135 lines
2.3 KiB
Markdown
135 lines
2.3 KiB
Markdown
Untuk **ambil alamat dari longitude–latitude** itu namanya **reverse geocoding**.
|
||
Ada beberapa cara, tergantung mau **pakai API online** atau **offline**.
|
||
|
||
---
|
||
|
||
## ✅ Cara PALING UMUM: Google Maps Reverse Geocoding
|
||
|
||
### Contoh koordinat
|
||
|
||
```
|
||
lat = -6.200000
|
||
lng = 106.816666
|
||
```
|
||
|
||
---
|
||
|
||
### 🔹 JavaScript (fetch)
|
||
|
||
```js
|
||
const lat = -6.2;
|
||
const lng = 106.816666;
|
||
const apiKey = "API_KEY_KAMU";
|
||
|
||
fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`)
|
||
.then(res => res.json())
|
||
.then(data => {
|
||
console.log(data.results[0].formatted_address);
|
||
});
|
||
```
|
||
|
||
📌 Output contoh:
|
||
|
||
```
|
||
Jakarta, Daerah Khusus Ibukota Jakarta, Indonesia
|
||
```
|
||
|
||
---
|
||
|
||
### 🔹 Response penting dari Google
|
||
|
||
```json
|
||
{
|
||
"formatted_address": "Jl. MH Thamrin No.1, Jakarta Pusat, Indonesia",
|
||
"address_components": [
|
||
{ "long_name": "Jakarta Pusat", "types": ["administrative_area_level_2"] }
|
||
]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## ✅ Alternatif GRATIS (tanpa API key): OpenStreetMap (Nominatim)
|
||
|
||
⚠️ Ada rate limit (jangan spam)
|
||
|
||
### JavaScript
|
||
|
||
```js
|
||
fetch(`https://nominatim.openstreetmap.org/reverse?lat=-6.2&lon=106.816666&format=json`)
|
||
.then(res => res.json())
|
||
.then(data => {
|
||
console.log(data.display_name);
|
||
});
|
||
```
|
||
|
||
📌 Output:
|
||
|
||
```
|
||
Jakarta Pusat, DKI Jakarta, Indonesia
|
||
```
|
||
|
||
---
|
||
|
||
## ✅ Flutter (sering dipakai di mobile)
|
||
|
||
### Pakai `geocoding` package
|
||
|
||
```dart
|
||
import 'package:geocoding/geocoding.dart';
|
||
|
||
List<Placemark> placemarks =
|
||
await placemarkFromCoordinates(-6.2, 106.816666);
|
||
|
||
Placemark place = placemarks.first;
|
||
|
||
print(place.street);
|
||
print(place.locality);
|
||
print(place.country);
|
||
```
|
||
|
||
---
|
||
|
||
## ✅ Golang (pakai OpenStreetMap)
|
||
|
||
```go
|
||
resp, _ := http.Get(
|
||
"https://nominatim.openstreetmap.org/reverse?lat=-6.2&lon=106.816666&format=json",
|
||
)
|
||
defer resp.Body.Close()
|
||
|
||
var result map[string]interface{}
|
||
json.NewDecoder(resp.Body).Decode(&result)
|
||
|
||
fmt.Println(result["display_name"])
|
||
```
|
||
|
||
---
|
||
|
||
## ⚠️ Penting diketahui
|
||
|
||
* Reverse geocoding **tidak 100% presisi**
|
||
* Bisa beda hasil antar provider
|
||
* Google = paling akurat, tapi **berbayar**
|
||
* OSM = gratis, tapi **lebih lambat**
|
||
|
||
---
|
||
|
||
## 🔥 Mau hasil lebih detail?
|
||
|
||
Kamu bisa ambil:
|
||
|
||
* Jalan
|
||
* Kecamatan
|
||
* Kota
|
||
* Provinsi
|
||
* Kode pos
|
||
|
||
Tinggal bilang:
|
||
|
||
* **pakai bahasa apa** (JS / Flutter / Go)
|
||
* **provider** (Google / OSM / Mapbox)
|
||
* mau **online atau offline**
|
||
|
||
Nanti aku bikinin contoh **siap copy–paste** 👍
|