mbahsomo-note/openstreetmap.md

2.3 KiB
Raw Blame History

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)

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

{
  "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

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

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)

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 👍