mbahsomo-note/openstreetmap.md

135 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Untuk **ambil alamat dari longitudelatitude** 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 copypaste** 👍