Pria: “Hai, boleh kenalan?”
Wanita: “Boleh”
….
Pria: “Kalau mau ke rumah alamatnya dimana, neng?”
Wanita: “107. 42354, -6.39196″
Pria: “???”
Akhir-akhir ini topik geocoding ramai dibicarakan dan banyak tools yang berkembang untuk dimanfaatkan secara spesifik untuk setiap orang. Seperti yang kita tahu, dunia GeoIT saat ini semakin berkembang pesat semenjak Google berhasil mengimplementasikan produk Web Mapping nya lewat Google Maps dan bahkan Google Earth 3D. Tidak hanya kalangan akademik saja, bahkan kalangan bisnis dan kalangan personal semakin memanfaatkan secara global. Untuk pebisnis, lokalisasi distribusi kantor distributor, agen, suplier, bahkan konsumen semakin membantu dalam analisa pasar dan perkembangan ke depan.
Untuk umum, Koprol sebagai pemimpin konten lokal berbasis geolokasi, fokus memanfaatkan API Google Maps dalam melayani penggunanya di dunia jejaring sosial.
Atau fenomena yang akhir-akhir ini berkembang adalah GPS Tracking System, sistem yang aku oprek mulai sekitar 3 tahun lalu. Namun saat ini sudah jauuuuh lebih mudah.

Pencarian lokasi, baik melalui geo-koordinat maupun nama/label lokasi ini lah yang kita sebut dengan GeoCoding dan sebaliknya Reverse GeoCoding.

Lalu apa sebenarnya GeoCoding itu sendiri?
Seperti biasa kalau ditanya, jawabanku akan banyak menggunakan analogi biar lebih gampang.
Untuk sederhananya, mari kita lihat terlebih dahulu harafiah kata geocoding itu sendiri.

GeoCoding berasal dari 2 kata, Geo dan Code sedangkan akhiran -ing hanya menunjukkan proses geocode itu sendiri.
Geo yang berarti kebumian secara horisontal dibagi ke dalam sumbu X dan Y, yang dari kecil kita diajarkan untuk mengenal dengan istilah Bujur dan Lintang. Perbedaan terletak datum, kita ambil saja istilah umum geografis, Latitude dan Longitude (disingkat: LatLon atau LonLat pada tulisan berikutnya).
Code disini lebih diartikan sebagai Coordinate yaitu koordinat lokasi dalam LatLon.

Dan sebagai manusia normal maupun paranormal, kita hanya mengenal nama daerah, nama jalan atau nomor rumah saja. Sangat jarang jika dalam pembicaraan sehari-hari menanyakan alamat kita memberikan koordinat LatLon kepada seseorang. Namun untuk dunia komputer (digital), hal ini sangat perlu dilakukan.
Secara sederhana:    NAMA JALAN <-> LONLAT
Dan proses ini bila kita analogikan dengan dunia internet, translasi ini sama dengan proses translasi DOMAIN <-> IP Address. Untuk alamat situs, kita tidak memberikan IP Address melainkan alamat URL yang mudah diingat.

Proses satu arah, misalnya dari Nama Jalan menjadi koordinat LonLat, ini yang disebut dengan GeoCoding Service. Sedangkan untuk translasi (mapping) dari LonLat menjadi Nama Jalan atau Daerah, yang disebut dengan Reverse GeoCoding Service. Untuk code sederhana, aku menampilkan contoh dari 3 layanan saja, yang lain bisa dilihat pada dokumentasi masing-masing, yaitu antara lain:

1. Google Geocoding

Yang perlu diingat adalah bahwa Google memberikan layanan gratis dan Pro. Untuk yang gratis, geocoding ini berlaku untuk 15.000 kali per bulan. Namun di beberapa milis disebutkan Google menyediakan “bonus layanan” hingga tidak terbatas (sama dengan versi Pro) yang ditujukan untuk kebutuhan publik, bukan komersial. Contoh menggunakan layanan geocoding (dan reverse geocoding) dari Google adalah sbb:

// GEOCODING
// versi 2 (old)

http://maps.google.com/maps/geo?q=Jalan+Soekarno+Hatta,+Bandung,+Indonesia&output=json&key=your_api_key

http://maps.google.com/maps/geo?q=Jalan+Soekarno+Hatta,+Bandung,+Indonesia&output=xml&key=your_api_key

// versi 3 (new)
http://maps.google.com/maps/api/geocode/json?address=Jalan+Soekarno+Hatta,+Bandung,+Indonesia&sensor=false&key=your_api_key[1]
http://maps.google.com/maps/api/geocode/xml?address=Jalan+Soekarno+Hatta,+Bandung,+Indonesia&sensor=false&key=your_api_key[1]

// REVERSE GEOCODING
// versi 2 (old)

http://maps.google.com/maps/geo?q=-6.9431445,107.6486287&output=json&key=your_api_key

http://maps.google.com/maps/geo?q=-6.9431445,107.6486287&output=xml&key=your_api_key

// versi 3 (new)
http://maps.google.com/maps/api/geocode/json?latlng=-6.9431445,107.6486287&sensor=false&key=your_api_key[1]
http://maps.google.com/maps/api/geocode/xml?latlng=-6.9431445,107.6486287&sensor=false&key=your_api_key[1]

Untuk lebih lengkapnya penggunaan Javascript API Google bisa dilihat di http://code.google.com/apis/maps/.
Dari hasil ujicoba, jika Anda memiliki server sendiri, tanpa Google API Key juga bisa menggunakan layanan ini. Google mendeteksi IP Address dan mengidentifikasi sebagai satu domain beserta subdomain-nya ke dalam satu kunci tunggal (Single API key). Jadi sangat disarankan untuk tidak digunakan di share hosting, lebih baik menggunakan kunci yang dibuat berdasarkan domain di Google.

2. Nominatim OpenStreetMap

Aku suka layanan ini karena benar-benar gratis, data berasal dari komunitas dan memang ditujukan untuk komunitas. Kewajiban tidak mengikatnya cukup mudah, bila Anda menemukan data yang tidak sesuai atau bahkan tidak ada, Anda “wajib” menambahkan sendiri data di OSM (OpenStreetMap) dan sharing ke komunitas.
Contoh code untuk layanan nominatim ini juga sederhana:

// GEOCODING

http://nominatim.openstreetmap.org/search?q=Soekarno+Hatta,+Bandung,+Indonesia&addressdetails=1&format=json

http://nominatim.openstreetmap.org/search?q=Soekarno+Hatta,+Bandung,+Indonesia&addressdetails=1&format=xml

// REVERSE GEOCODING

http://nominatim.openstreetmap.org/reverse?lat=-6.9431445&lon=107.6486287&addressdetails=1&format=json

http://nominatim.openstreetmap.org/reverse?lat=-6.9431445&lon=107.6486287&addressdetails=1&format=xml

Kalau urusan data, masih jauh lebih bagus Google yang diupdate oleh Tele Atlas Indonesia dibandingkan layanan sejenis lainnya termasuk OSM yang mendapatkan datanya sebagian besar dari Bakosurtanal.

3. Data sendiri dengan PostGIS (PostgreSQL)

PostgreSQL yang dipersenjatai dengan ekstensi PostGIS sudah dilengkapi dengan layanan ini, namun harus sedikit kreatif dengan sintaks PL/SQL yang kita buat. Asumsi data yang kurang bagus yang saat ini berkembang menggunakan data Bakosurtanal (sori…). Langsung ke contoh bagaimana kita menerapkan fungsi geocoding:

// GEOCODING dilakukan dengan mengambil titik awal line pada tabel jalan (simpel saja)
SELECT gid,label,ST_X(ST_StartPoint(the_geom)) AS lon, ST_Y(ST_StartPoint(the_geom)) AS lat FROM jalan ORDER BY gid;

// REVERSE GEOCODING memanfaatkan fungsi cross-section dan buffering dengan ketelitian tertentu
SELECT label FROM tabel_jalan WHERE ST_Crosses(ST_Buffer(GeomFromText(‘POINT(107.6486287 -6.9431445)’), 9[2]),the_geom)
// bila tidak ditemukan data pada tabel jalan, berikan nama daerah yang paling teliti saja, mis.: desa atau kecamatan
SELECT * FROM tabel_administrasi WHERE ST_Within(GeomFromText(‘POINT(107.6486287 -6.9431445)’),the_geom)

Proses ini membutuhkan proses yang sedikit lebih berat dibandingkan dengan pencarian (kueri) data textual seperti yang biasa dilakukan di native MySQL ataupun PostgreSQL sehari-hari. Sangat disarankan untuk melakukan indexing GIST pada tabel geometri.
Dengan demikian, kita bisa membuat layanan geocoding sendiri, terlepas dari keterbatasan Google Maps maupun bandwidth bila request ke luar jaringan Indonesia.

update:
[1] Google versi baru tidak membutuhkan API Key lagi
[2] Berdasarkan OGC Spec s2.1.1.3, nilai ini merupakan integer sebagai jumlah segmen yg membagi ¼ lingkaran dalam pendekatan buffering

Freelance Web Developer