Firefox 3.5 menawarkan sebuah fasilitas bernama Geolocation yang dapat digunakan untuk mencari tahu di mana pengguna browser tersebut berada. Selain Firefox 3.5 (atau yg lebih baru), fasilitas ini juga tersedia pada Google Gears dan Safari pada iPhone OS 3.0. Fasilitas ini didefinsikan pada spesifikasi Geolocation API yang dibuat oleh W3C. Dalam tulisan ini, saya akan menunjukkan bagaimana cara menggunakannya.
Sebelum dapat menggunakan API yang disediakan, kita perlu mendapatkan/membuat sebuah objek yang disediakan oleh browser/plugin yang mengimplementasikan Geolocation API. Pada Firefox dan Safari iPhone OS, objek berada di bawah objek navigator
yang disediakan oleh browse, yaitu di navigator.geolocation
. Google Gears menyediakan objek ini dengan cara yg sedikit lebih rumit, yaitu dalam dua tahapan: inisialisasi Google Gears lalu mendapatkan objek Geolocation dari google.gears.factory.create('beta.geolocation')
.
<script type="text/javascript" src="gears_init.js"></script>
<script type="text/javascript">
var geo = undefined;
if (navigator.geolocation) {
geo = navigator.geolocation;
}
else if (window.google && google.gears) {
try {
geo = google.gears.factory.create('beta.geolocation');
}
catch (e) {
}
}
if (geo == undefined) {
// Geolocation API tidak tersedia
}
else {
// Geolocation API tersedia
}
</script>
Kode di atas akan menginisialisasi Google Gears dengan mencoba memasukkan berkas gears_init.js
lalu mendeteksi apakah objek untuk Geolocation tersedia pada browser atau Google Gears. Berkas gears_init.js
dapat diunduh pada website Google Gears.
Jika nilai geo
tidak bernilai undefined
, maka Anda telah mendapatkan sebuah objek yang mengimplementasikan Geolocation API. Anda dapat mendapatkan lokasi pengguna browser, tentu saja atas seizin pengguna tersebut. Mari kita coba..
Objek tadi menyediakan sebuah method bernama getCurrentPosition
yang dapat digunakan untuk mengambil posisi saat ini. Method ini membutuhkan 2 buah parameter, yaitu callback jika operasi berjalan dengan sukses dan gagal.
function posisi_ok(posisi) {
// lokasi berhasil didapat
var lintang = posisi.coords.latitude;
var bujur = posisi.coords.longitude;
var akurasi = posisi.coords.accuracy; // dalam meter
}
function posisi_error(error) {
// masalah terjadi
}
function cari_lokasi() {
geo.getCurrentPosition(posisi_ok, posisi_error);
}
Yak seperti itu saja! Untuk informasi lebih detil mengenai method/properti apa saja yang disediakan, silakan baca spesifikasinya atau dokumentasi Mozilla.
Untuk demo, coba buka http://arsip.fajran.web.id/ngoprek/geolocation/geolocation.html
Selanjutnya apa? dari informasi lokasi ini Anda dapat menggunakan layanan lain untuk mendapatkan alamat yang ada pada lokasi tersebut. Salah satu penyedia layanan yang disebut Reverse Geocoding ini adalah, coba tebak, Google! Coba baca dokumentasi mengenai hal ini pada bagian Google Maps API v2 atau v3.
Untuk contoh aplikasi nyata (terlepas dari akurasi yang ada), coba buka http://distributor.sebelah.web.id *pengumuman terselubung* hehehe
Bagi yang sudah nyoba-nyoba mungkin bertanya-tanya mengenai akurasi dan/atau bagaimana kok alamat kita bisa diketahui. Bagi yang menggunakan alat dengan fasilitas GPS (misalnya iPhone) mungkin sudah jelas kalau lokasi bisa diperoleh dengan GPS. Namun bagaimana jika tidak ada GPS?
Saat kita menjelajah Internet, setidaknya ada satu informasi yang kita bawa yang dapat dijadikan petunjuk untuk mendapatkan lokasi, yaitu IP address. Selain itu, jika kita menggunakan Wi-Fi di daerah yang memiliki banyak access point (misalnya perumahan), daftar access point sekitar yang terdeteksi juga dapat digunakan untuk mendapatkan lokasi yang lebih akurat. Tentu saja harus sudah ada orang yang mencatat access point ini ada di daerah mana, yaa seperti apa yang dilakukan oleh Skyhook Wireless. Contoh sumber lain adalah informasi lokasi BTS yang digunakan oleh telepon genggam. Lokasi dari beberapa GPS terdekat dapat digunakan untuk melakukan perhitungan penentuan posisi.
Spesifikasi dari W3C sendiri menyebutkan informasi lokasi ini dapat diperoleh dari sumber apa saja yang kira-kira dapat memberikan informasi lokasi, termasuk menanyakan langsung :D
Common sources of location information include Global Positioning System (GPS) and location inferred from network signals such as IP address, RFID, WiFi and Bluetooth MAC addresses, and GSM/CDMA cell IDs, as well as user input.
Oh iya, saya sempat membandingkan akurasi yang saya dapat jika saya menggunakan koneksi Internet melalui kabel dan nirkabel. Hasilnya, jika menggunakan koneksi nirkabel, akurasi (baca: seberapa meleset) yang saya dapat bisa sampai 150 meter saja! dan memang selisihnya cuma 1 blok rumah saja hehe.. Ketika saya menggunakan koneksi kabel, akurasi mencapai 25 kilometer. Mengapa bisa begitu? asumsi saya ketika saya menggunakan koneksi nirkabel, informasi accesspoint yang ada di sekitar rumah saya juga ikut dikirim/digunakan dalam mencari lokasi. Ketika saya menggunakan koneksi kabel, hanya informasi alamat IP saja yang digunakan. Hasilnya pun sesuai dengan apa yang saya dapat ketika menggunakan layanan GeoIP dari MaxMind.
Sekian saja, selamat ngoprek! =D
Referensi:
- Location-Aware Browsing atau terjemahannya Penjelajahan Berbasis-Lokasi
- W3C: Geolocation API Specification
- Mozilla: Using geolocation
- Google Gears: Geolocation API
- Safari iPhone: Getting Geographic Locations
No comments:
Post a Comment