Skip to content

Commit e07e17f

Browse files
authored
Initial Commit
1 parent 690b176 commit e07e17f

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

geocodefarm.js

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
class GeocodeFarm {
2+
constructor(apiKey) {
3+
this.apiKey = apiKey;
4+
this.baseUrl = 'https://api.geocode.farm/';
5+
}
6+
7+
async forward(address) {
8+
const url = `${this.baseUrl}forward/?key=${this.apiKey}&addr=${encodeURIComponent(address)}`;
9+
try {
10+
const response = await fetch(url);
11+
const data = await response.json();
12+
return this.handleResponse(data, 'forward');
13+
} catch (error) {
14+
return { success: false, error: 'Request failed or timed out' };
15+
}
16+
}
17+
18+
async reverse(lat, lon) {
19+
const url = `${this.baseUrl}reverse/?key=${this.apiKey}&lat=${lat}&lon=${lon}`;
20+
try {
21+
const response = await fetch(url);
22+
const data = await response.json();
23+
return this.handleResponse(data, 'reverse');
24+
} catch (error) {
25+
return { success: false, error: 'Request failed or timed out' };
26+
}
27+
}
28+
29+
handleResponse(data, type) {
30+
if (!data || !data.RESULTS) {
31+
return { success: false, error: 'Invalid response from server' };
32+
}
33+
34+
const status = data.STATUS && data.STATUS.status;
35+
if (status !== 'SUCCESS') {
36+
return { success: false, error: `API returned failure: ${status || 'Unknown'}` };
37+
}
38+
39+
let result = {};
40+
if (type === 'reverse') {
41+
const resultData = data.RESULTS.result[0];
42+
result = {
43+
house_number: resultData.house_number || null,
44+
street_name: resultData.street_name || null,
45+
locality: resultData.locality || null,
46+
admin_2: resultData.admin_2 || null,
47+
admin_1: resultData.admin_1 || null,
48+
country: resultData.country || null,
49+
postal_code: resultData.postal_code || null,
50+
formatted_address: resultData.formatted_address || null,
51+
latitude: resultData.latitude || null,
52+
longitude: resultData.longitude || null,
53+
};
54+
result.accuracy = resultData.accuracy || null;
55+
} else {
56+
const resultData = data.RESULTS.result;
57+
result = {
58+
house_number: resultData.address.house_number || null,
59+
street_name: resultData.address.street_name || null,
60+
locality: resultData.address.locality || null,
61+
admin_2: resultData.address.admin_2 || null,
62+
admin_1: resultData.address.admin_1 || null,
63+
country: resultData.address.country || null,
64+
postal_code: resultData.address.postal_code || null,
65+
formatted_address: resultData.address.full_address || null,
66+
latitude: resultData.coordinates.lat || null,
67+
longitude: resultData.coordinates.lon || null,
68+
};
69+
result.accuracy = resultData.accuracy || null;
70+
}
71+
72+
return {
73+
success: true,
74+
status_code: data.http_status || 0,
75+
lat: result.latitude,
76+
lon: result.longitude,
77+
accuracy: result.accuracy,
78+
full_address: result.formatted_address,
79+
result: result,
80+
};
81+
}
82+
}

0 commit comments

Comments
 (0)