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
No related posts.
1. Comment by harryteguh
10/May/2010 at 21:55
Mas, ada nggak ya website yang menyediakan layanan Reverse Geocoding? Kalau ada tolong di share donk, Mas. Thanks
-Harry
2. Comment by harryteguh
10/May/2010 at 21:59
@harryteguh
Maaf, Mas. Cuma mw lebih spesifik lagi: menyediakan layanan Reverse Geocoding dalam format file .php
3. Comment by Eric Lontong
11/May/2010 at 09:57
harryteguh
maksudnya menyediakan layanan Reverse Geocoding dalam bentuk PHP gimana nih?
source code untuk ngambil hasil reverse geocoding ini maksudnya?
itu kan sudah dalam bentuk API (JSON, XML) yg bisa dibaca dalam bentuk PHP atau Javascript (JSONP) dgn baik. Bisa pake cURL, get_stream_context atau fungsi apa pun di PHP.
Atau ingin membuat source code yang menyediakan layanan Reverse Geocoding seperti ini?
4. Comment by harryteguh
8/Jun/2010 at 15:19
Saya membuat aplikasi ponsel memakai bahasa Java (J2ME) yang memanfaatkan proses Reverse Geocoding. Pada aplikasi ini, data koordinat diambil dari GPS ponsel (terbatas untuk ponsel yang ber-GPS) untuk kemudian dikirimkan ke sebuah server. Nah, server inilah yang melakukan reverse geocoding. Kemudian hasil reverse geocoding ini dikembalikan lagi ke ponsel. Masalahnya, J2ME cuma bisa membaca data dari internet yang berekstensi php.
Sekarang saya udah berhasil membuat source code untuk layanan reverse geocoding memakai API Google. Tapi layanan ini cuma bersifat menampilkan alamat dari suatu koordinat. Saya belum berhasil membuat database-nya. Kira-kira untuk membuat database dari aplikasi reverse geocoding ini gimana ya, Mas? Saya memakai MySQL.
Terima kasih banyak, Mas. Maaf telat me-reply
-Harry
5. Comment by harryteguh
8/Jun/2010 at 15:25
NB: Alasan saya membutuhkan database untuk code reverse geocoding saya adalah karena data-data alamat dari Google masih terlalu umum. Saya ingin menambahkan alamat kampus, alamat rumah atau landmark lainnya agar bisa ditampilkan setelah proses reverse geocoding berhasil.
6. Comment by Eric Lontong
8/Jun/2010 at 21:36
Wah, klo itu sih mungkin agak berat bro harry. Anda harus punya data sendiri.
komersial? hehe..
7. Comment by harryteguh
9/Jun/2010 at 20:39
Nggak komersial koq, Mas. Untuk proyek akhir saya. Yang di sisi ponsel udah bisa dikatakan selesai koq.
Kalau masalah "data" yang anda maksudkan data koordinat, saya masih bisa atur. Terima kasih atas waktunya, Mas
-Harry
8. Comment by Eric Lontong
10/Jun/2010 at 11:17
Owh gitu.. gpp jg komersial ato proyek tugas akhir. apalagi tugas akhir nya bisa dijadiin proyek komersial hehe..
Bukan sekedar data koordinat poi, data koordinat area dan jalan itu sendiri untuk proses geocoding nya.
Sip, selalu senang kok diskusi geo-tech kya gini. Anytime, anyplace
mungkin ada link untuk publikasi hasil akhir aplikasinya seperti apa?
Tampaknya sangat menarik tuh.
9. Comment by harryteguh
10/Jun/2010 at 18:18
mungkin setelah saya sidangkan TA saya ini akan saya publikasi
10. Comment by Eric Lontong
10/Jun/2010 at 19:00
sip sip siiippp!
kasi link aja di sini ya ntar ya.
klo kedetect sebagai spam, ntar aku yg post deh biar lolos sensor
11. Comment by harryteguh
15/Jun/2010 at 03:45
OK, Mas. Mungkin paling lambat bulan September saya post ke sini.
Btw, Mas. Kalau ngambil data koordinat area itu apa bisa pake gps aja? Misalnya setiap 500 m kita ambil koordinatnya area tersebut yang kemudian bisa dibentuk menjadi waypoint (betul nggak waypoint namanya?)?
Thanks again, Mas
-Harry
12. Comment by Eric Lontong
16/Jun/2010 at 01:17
Pakai GPS?
Tentu saja bisa dan sangat disarankan
Benar sekali, itu bisa menjadi waypoint, karena sesuai dengan definisi vektor yang mempunyai besaran dan arah, menggunakan GPS (apalagi beresolusi tinggi) menjadi cara yang paling efektif untuk saat ini.
Hanya saja yang perlu diingat, kalau ingin datanya lebih akurat, waypoint2 itu ditandai mana yang satu arah dan mana yg bisa 2 arah. Ini perlu untuk routing. Jelasnya boleh dibaca juga di http://www.lontongcorp.com/2007/04/29/pgdijkstra-…
Ditunggu lho hasilnya ya..
13. Comment by adit
23/Jun/2010 at 04:23
Mas, saya mau nanya, jika melakukan script reverse geocoding dengan postgresql namun nama jalan yang didapat masih tidak sesuai apa yang harus dilakukan?apakah mengurangi ketelitiannya atau bagaimana?
lalu dalam script
ST_Crosses(ST_Buffer(GeomFromText(‘POINT(107.6486287 -6.9431445)’),0.00009),the_geom)
0.00009 >> apakah ini dalam hitungan centimeter ke meter ??
mohon pencerahannya. Terimakasih.
14. Comment by Eric Lontong
23/Jun/2010 at 10:40
ya, dengan merubah ketelitiannya itu tadi.
ada perubahan untuk ketelitian itu. di postgis awal2, (angka 0.00009) itu merupakan ketelitian dari degree. tapi sekarang sesuai dengan OGC spec yg baru (OGC SPEC s2.1.1.3), nilai itu merupakan integer yg menunjukkan jumlah segmen dalam pendekatan seperempat lingkaran. Bahasa aslinya begini:
"The optional third parameter sets the number of segment used to approximate a quarter circle (defaults to 8)."
Beda dengan awal dimana pembagian itu berdasarkan ketelitian dalam bentuk degree ini.
Jadi makin besar nilainya, maka makin teliti.
Oke deh, thanks sudah mengingatkan secara tidak langsung. tulisan ini aku update sekalian
15. Trackback by Eric Lontong
2/Jul/2010 at 03:51
GeoHash…
Geohash, nah lho barang geo apalagi ini? Belum beres dengan belajar barang-barang geo yg lain, ataupun masih menunggu Foursquare ato Koprol meningkatkan keGEOannya, atau menunggu stabilnya geoserver detikMap, eh sudah ada alat bantu lain nih yg sama se…
16. Comment by syabana
13/Jul/2010 at 04:24
maaf mas ikt nimbrung,…mau tanya sy mhsiswa mw nyelesain tgs akhir,..saya bikin visualisasi peta ATM di Kota bebbasis web,..
saya bikin peta kota dan atmx pake arcview3.3 trus hasil dari projek arcview yg saya bikin di koversi dri arcview(*.shp) ke MySql(*.sql) biar bisa di buka di web,..
untuk bisa di liat di web saya mengunakan SVGviewer,..
nah yg sudah sy bikin ini sdh smpe menampilkan peta dan layer"x di localhost,..
yg mau saya tanya TA yg saya buat ini dilengkap sistem pencarian,..jadi nantix klo kita mau cari ATM yg kita cari kita tinggal ketikan keywordx dan nantinya peta ATM itu akan muncul,..yg saya bingung gimana menampilkan peta ATM yg di cari agar dapat terarah ke lokasi yg dicari,..
mungkin gambaranx seperti jika kita mencari peta indonesia di google eart atau yg lainya,..peta tersebut bisa bergerak ke posisi yg dicari,…
mohon bantuanx mas,..sapa tau ada yg bisa
17. Comment by Eric Lontong
13/Jul/2010 at 21:14
Halo Syabana, salam kenal.
Sebenarnya solusi itu sangat simpel. ATM itu kan sudah dilengkapi dengan koordinat LatLon-nya?
Nah, tinggal diarahin saja SVG nya ke koordinat itu menggunakan code sederhana.
Boleh tahu alamat web-nya klo onlen?
18. Comment by Eric Lontong
13/Jul/2010 at 22:12
@syabana, pakai bahasa indonesia yg baik aja ya. disingkat2 juga ga apa2 asal jangan aneh2 kya "nya" => "x" (baru tau dari temen adik soalnya)
bukan anak gaul atau alay nih yg ngerti bahasa2 gitu hehe…
19. Comment by harryteguh
2/Oct/2010 at 18:38
Sorry baru ngirim skarang, Mas. File hasil PA saya sudah bisa diambil di link berikut:
http://www.ziddu.com/download/11911671/File2PA.ra…
Note:
*Aplikasi ini adalah aplikasi ponsel, namun dapat dicobakan pada PC dengan menginstall Sun Java (TM) Wireless Toolkit 2.5.2 terlebih dahulu
* Setelah Sun Java WTK 2.5.2 berhasil diinstall, click file yang berextensi .jad
Jika ada problem silahkan hubungi saya via email: teguhharryprabowo@yahoo.co.id
Sukses selalu, Mas.
-HarryTeguh
20. Comment by Eric Lontong
22/Oct/2010 at 04:17
WUAHHH… MANTAP!!
sori baru liat, baru beres2 pindah workshop & pindah server sekalian.
21. Comment by harryteguh
27/Oct/2010 at 15:50
Koreksi, Mas
teguhharryprabowo@yahoo.com
22. Comment by Eric Lontong
1/Nov/2010 at 21:47
seep! tapi blom sempat ngecek nih.
oya, ntar aku kontak lewat email boleh ya