Permintaan Geolocation
Permintaan Geolocation dikirim menggunakan POST ke URL berikut:
https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY
Anda harus menentukan kunci dalam permintaan, yang disertakan sebagai nilai parameter
key. A key adalah kunci API aplikasi Anda. Kunci ini mengidentifikasi aplikasi Anda untuk tujuan pengelolaan kuota
management. Pelajari cara mendapatkan kunci.
Isi permintaan
Isi permintaan harus diformat sebagai JSON. Jika isi permintaan tidak disertakan, hasilnya akan ditampilkan berdasarkan alamat IP lokasi permintaan. Kolom berikut didukung, dan semua kolom bersifat opsional, kecuali jika dinyatakan lain:
| Kolom | Jenis JSON | Deskripsi | Catatan |
|---|---|---|---|
homeMobileCountryCode |
number (uint32) |
Kode negara seluler (MCC) untuk jaringan rumah perangkat. | Didukung untuk radioType gsm (default), wcdma, lte dan nr; tidak digunakan untuk cdma.Rentang valid: 0–999. |
homeMobileNetworkCode |
number (uint32) |
Kode Jaringan Seluler untuk jaringan rumah perangkat.
Ini adalah MNC untuk GSM, WCDMA, LTE, dan NR. CDMA menggunakan ID Sistem (SID) |
Rentang valid untuk MNC: 0–999. Rentang valid untuk SID: 0–32767. |
radioType |
string |
Tipe radio seluler. Nilai yang didukung adalah gsm, cdma,
wcdma, lte dan nr. |
Meskipun kolom ini bersifat opsional, kolom ini harus selalu disertakan jika jenis radio diketahui oleh klien. Jika kolom dihilangkan, Geolocation API akan menggunakan gsm secara default,
yang akan menghasilkan hasil yang tidak valid atau nol jika jenis radio yang diasumsikan
salah. |
carrier |
string |
Nama operator. | |
considerIp |
boolean |
Menentukan apakah akan kembali ke geolokasi IP jika sinyal menara seluler dan WiFi tidak ada, kosong, atau tidak cukup untuk memperkirakan lokasi perangkat. | Default-nya adalah true. Tetapkan considerIp ke
false untuk mencegah kembali. |
cellTowers |
array |
Larik objek menara BTS. | Lihat bagian Objek Menara BTS di bawah. |
wifiAccessPoints |
array |
Sebuah larik objek titik akses WiFi. | Lihat bagian Objek Titik Akses WiFi di bawah. |
Contoh isi permintaan Geolocation API ditampilkan di bawah.
{ "homeMobileCountryCode": 310, "homeMobileNetworkCode": 410, "radioType": "lte", "carrier": "Vodafone", "considerIp": true, "cellTowers": [ // See the Cell Tower Objects section below. ], "wifiAccessPoints": [ // See the WiFi Access Point Objects section below. ] }
Objek menara BTS
Larik cellTowers isi permintaan berisi nol atau beberapa
objek menara BTS.
| Kolom | Jenis JSON | Deskripsi | Catatan |
|---|---|---|---|
cellId |
number (uint32) |
ID unik sel. | Wajib untuk radioType gsm (default), cdma, wcdma dan lte; ditolak untuk nr.Lihat bagian Menghitung cellId di bawah, yang juga mencantumkan rentang nilai yang valid untuk setiap jenis radio. |
newRadioCellId |
number (uint64) |
ID unik sel NR (5G). | Wajib untuk radioType nr; ditolak untuk jenis lainnya
Lihat bagian Menghitung newRadioCellId di bawah, yang juga mencantumkan rentang nilai yang valid untuk kolom tersebut. |
locationAreaCode |
number (uint32) |
Kode Area Lokasi (LAC) untuk jaringan GSM dan WCDMA. ID Jaringan (NID) untuk jaringan CDMA. Kode Area Pelacakan (TAC) untuk jaringan LTE dan NR. |
Wajib untuk radioType gsm (default) dan
cdma, opsional untuk nilai lainnya.Rentang valid dengan gsm, cdma, wcdma dan
lte: 0–65535.Rentang valid dengan nr: 0–16777215. |
mobileCountryCode |
number (uint32) |
Kode Negara Seluler (MCC) menara BTS. | Wajib untuk radioType gsm (default), wcdma, lte dan nr; tidak digunakan untuk cdma.Rentang valid: 0–999. |
mobileNetworkCode |
number (uint32) |
Kode Jaringan Seluler menara BTS.
Ini adalah MNC untuk GSM, WCDMA, LTE, dan NR. CDMA menggunakan ID Sistem (SID). |
Wajib. Rentang valid untuk MNC: 0–999. Rentang valid untuk SID: 0–32767. |
Kolom opsional berikut tidak digunakan, tetapi dapat disertakan jika nilainya tersedia.
| Kolom | Jenis JSON | Deskripsi | Catatan |
|---|---|---|---|
age |
number (uint32) |
Jumlah milidetik sejak seluler ini menjadi ponsel utama. | Jika usia adalah 0, cellId atau newRadioCellId mewakili pengukuran saat ini. |
signalStrength |
number (double) |
Kekuatan sinyal radio diukur dalam dBm. | |
timingAdvance |
number (double) |
Nilai waktu lanjutan. |
Menghitung cellId
Jenis radio sebelum NR (5G) menggunakan kolom cellId 32-bit untuk meneruskan ID sel
jaringan ke Geolocation API.
- Jaringan GSM (2G) menggunakan ID Sel (CID) 16-bit apa adanya. Rentang valid: 0–65535.
- Jaringan CDMA (2G) menggunakan ID Stasiun Basis (BID) 16-bit apa adanya. Rentang valid: 0–65535.
- Jaringan WCDMA (3G) menggunakan Identitas Sel UTRAN/GERAN (UC-ID), yang merupakan nilai bilangan bulat 28-bit
yang menggabungkan Pengidentifikasi Pengontrol Jaringan Radio (RNC-ID) 12-bit dan ID Sel (CID) 16-bit
.
Formula:rnc_id << 16 | cid.
Rentang valid: 0–268435455.
Catatan: Menentukan hanya nilai ID Sel 16-bit di jaringan WCDMA akan menghasilkan hasil yang salah atau nol. - Jaringan LTE (4G) menggunakan Identitas Sel E-UTRAN (ECI), yang merupakan nilai bilangan bulat 28-bit yang menggabungkan Pengidentifikasi Node B E-UTRAN (eNBId) 20-bit dan ID Sel (CID) 8-bit.
Formula:enb_id << 8 | cid.
Rentang valid: 0–268435455.
Catatan: Menentukan hanya nilai ID Sel 8-bit di jaringan LTE akan menghasilkan hasil yang salah atau nol.
Menempatkan nilai di luar rentang ini dalam permintaan API dapat menyebabkan perilaku yang tidak ditentukan. API,
atas pertimbangan Google, dapat memangkas angka sehingga sesuai dengan rentang yang didokumentasikan, menyimpulkan koreksi ke radioType, atau menampilkan hasil NOT_FOUND tanpa indikator apa pun dalam respons.
Contoh objek menara BTS LTE, yang merupakan bagian dari isi permintaan, ada di bawah.
{ ... "cellTowers": [ { "cellId": 170402199, "locationAreaCode": 35632, "mobileCountryCode": 310, "mobileNetworkCode": 410, "age": 0, "signalStrength": -60, "timingAdvance": 15 } ] }
Respons untuk permintaan sebelumnya akan terlihat seperti ini:
{ "location": { "lat": 37.7801129, "lng": -122.4168229 }, "accuracy": 180.052 }
Menghitung
newRadioCellId
Jaringan yang lebih baru, yang ID selnya lebih panjang dari 32 bit, menggunakan kolom 64-bit
newRadioCellId untuk meneruskan ID sel jaringan ke
Geolocation API.
- Jaringan NR (5G) menggunakan Identitas Sel Radio Baru (NCI) 36-bit apa adanya.
Rentang valid: 0–68719476735.
Contoh objek menara BTS NR, yang merupakan bagian dari isi permintaan, ada di bawah.
{ ... "cellTowers": [ { "newRadioCellId": 68719476735, "mobileCountryCode": 310, "mobileNetworkCode": 410, "age": 0, "signalStrength": -60, } ] }
Respons untuk permintaan sebelumnya akan terlihat seperti ini:
{ "location": { "lat": 37.7646157, "lng": -122.4127361 }, "accuracy": 1458.5570522410717 }
Objek titik akses WiFi
Larik wifiAccessPoints isi permintaan harus berisi dua
atau lebih objek titik akses WiFi yang mewakili perangkat titik akses stasioner yang secara fisik berbeda. Kolom macAddress wajib diisi. Semua kolom lainnya bersifat opsional. Layanan ini mengabaikan titik akses
yang bergerak, seperti yang ada di pesawat dan kereta.
| Kolom | Jenis JSON | Deskripsi | Catatan |
|---|---|---|---|
macAddress |
string |
Alamat MAC node WiFi. Biasanya disebut alamat BSS, BSSID, atau MAC. |
Wajib. String heksadesimal yang dipisahkan koma (:).
Hanya alamat MAC yang dikelola secara universal yang dapat ditemukan menggunakan API. Alamat MAC lainnya akan dihilangkan secara diam-diam dan dapat menyebabkan permintaan API menjadi kosong. Untuk mengetahui detailnya, lihat Menghilangkan titik akses WiFi yang tidak berguna. |
signalStrength |
number (double) |
Kekuatan sinyal saat ini yang diukur dalam dBm. | Untuk titik akses WiFi, nilai dBm biasanya -35 atau lebih rendah dan berkisar antara -128 hingga -10 dBm.
Pastikan untuk menyertakan tanda minus. Untuk nilai yang lebih besar dari -10 dBm, API akan menampilkan NOT FOUND. |
age |
number (uint32) |
Jumlah milidetik sejak titik akses ini dideteksi. | |
channel |
number (uint32) |
Saluran yang digunakan klien untuk berkomunikasi dengan titik akses. | |
signalToNoiseRatio |
number (double) |
Rasio sinyal terhadap noise saat ini diukur dalam dB. |
Contoh objek titik akses WiFi, yang merupakan bagian dari isi permintaan, ditampilkan di bawah.
{ ... "macAddress": "f0:d5:bf:fd:12:ae", "signalStrength": -43, "signalToNoiseRatio": 0, "channel": 11, "age": 0 }
Respons untuk permintaan sebelumnya akan terlihat seperti ini:
{ "location": { "lat": 37.7801129, "lng": -122.4168229 }, "accuracy": 180.052 }
Permintaan contoh
Jika ingin mencoba Geolocation API dengan data contoh, simpan JSON berikut ke file:
{ "considerIp": "false", "wifiAccessPoints": [ { "macAddress": "3c:37:86:5d:75:d4", "signalStrength": -35, "signalToNoiseRatio": 0 }, { "macAddress": "30:86:2d:c4:29:d0", "signalStrength": -35, "signalToNoiseRatio": 0 } ] }
Kemudian, Anda dapat menggunakan curl
untuk membuat permintaan dari command line:
$ curl -d @your_filename.json -H "Content-Type: application/json" -i "https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY"
Respons untuk alamat MAC sebelumnya akan terlihat seperti ini:
{ "location": { "lat": 37.4241173, "lng": -122.0915717 }, "accuracy": 20 }
Menghilangkan titik akses WiFi yang tidak digunakan
Menghapus objek titik akses WiFi dengan macAddresses yang
merupakan alamat siaran (FF:FF:FF:FF:FF:FF) atau dicadangkan oleh
IANA dapat meningkatkan tingkat keberhasilan panggilan Geolocation API yang menggunakan WiFi sebagai
input. Jika, setelah pemfilteran, dapat ditentukan bahwa panggilan Geolocation API
tidak akan berhasil, mitigasi seperti menggunakan sinyal lokasi yang lebih lama atau AP WiFi
dengan sinyal yang lebih lemah dapat digunakan. Pendekatan ini merupakan kompromi antara kebutuhan aplikasi Anda untuk perkiraan lokasi dan persyaratan presisi serta recall-nya. Teknik pemfilteran berikut menunjukkan cara memfilter
input, tetapi tidak menampilkan mitigasi yang mungkin Anda, sebagai engineer aplikasi, pilih untuk diterapkan.
Rentang alamat MAC antara 00:00:5E:00:00:00 dan 00:00:5E:FF:FF:FF dicadangkan untuk IANA dan sering digunakan untuk fungsi pengelolaan jaringan dan multicast, sehingga tidak dapat digunakan sebagai sinyal lokasi. Anda juga harus menghapus alamat MAC
ini dari input ke API.
Misalnya, alamat MAC yang dapat digunakan untuk Geolocation dapat dikumpulkan dari an
array of macAddress strings named macs:
String[] macs = {"ff:ff:ff:ff:ff:ff", "1c:34:56:78:9a:bc", "00:00:5e:00:00:01"}; ArrayList<String> _macs = new ArrayList<>(Arrays.asList(macs)); _macs.removeIf(m -> !(!m.toUpperCase().equals("FF:FF:FF:FF:FF:FF") && !m.substring(0, 8).toUpperCase().equals("00:00:5E")));
macs = ['ff:ff:ff:ff:ff:ff', '1c:34:56:78:9a:bc', '00:00:5e:00:00:01'] macs = [m for m in macs if (m.upper() != "FF:FF:FF:FF:FF:FF" and m[:8].upper() != '00:00:5E')]
macs = ['ff:ff:ff:ff:ff:ff', '1c:34:56:78:9a:bc', '00:00:5e:00:00:01']; macs = macs.filter(m => m.toUpperCase() !== "FF:FF:FF:FF:FF:FF" && m.substr(0, 8).toUpperCase() !== '00:00:5E');
Menggunakan filter ini akan menghasilkan hanya 1c:34:56:78:9a:bc yang tersisa dalam daftar. Karena daftar ini memiliki
kurang dari 2 alamat MAC WiFi, permintaan tidak akan berhasil dan respons HTTP 404
(notFound)
akan ditampilkan.
Respons Geolocation
Permintaan geolokasi yang berhasil akan menampilkan respons berformat JSON yang menentukan lokasi dan radius.
location: Koordinat lintang dan bujur perkiraan pengguna dalam derajat. Berisi satulatdan satulngsubkolom.accuracy: Akurasi perkiraan lokasi, dalam meter. Ini mewakili radius lingkaran di sekitar yang diberikanlocation.
{ "location": { "lat": 37.421875199999995, "lng": -122.0851173 }, "accuracy": 120 }
API menampilkan lokasi dan radius akurasi berdasarkan sinyal input. Meskipun API dapat menampilkan lokasi yang sangat akurat, akurasi dapat bervariasi bergantung pada sumber, jumlah, kepadatan, dan kekuatan sinyal yang tersedia. Biasanya, Anda dapat memperkirakan radius akurasi berikut:
- Titik akses WiFi: Jika permintaan menyertakan dua atau lebih
wifiAccessPoints, radius akurasi yang ditampilkan biasanya sekitar 20 meter. Akurasi meningkat seiring dengan jumlah titik akses dan sinyal yang lebih kuat (diukur dalam dBm), dengan kekuatan sinyal biasanya berkisar antara -100 hingga -20 dBm. - Menara BTS: Jika informasi WiFi tidak tersedia atau tidak mencukupi,
API akan menggunakan
cellTowersuntuk lokasi. Akurasi sangat bervariasi menurut jenis menara BTS, kekuatan sinyal, dan kepadatan jaringan:- Sel makro (jenis yang paling umum, digunakan untuk cakupan area luas ) memberikan akurasi yang lebih rendah. Radius biasanya berada dalam rentang ratusan meter, dan dapat mencapai beberapa ribu meter di area dengan cakupan menara BTS yang jarang. Untuk sel makro, jarang sekali mencapai radius akurasi di bawah 100 meter. Akurasi umumnya lebih tinggi untuk menara BTS dengan sinyal yang kuat. Sinyal yang kuat biasanya > -110 dBm untuk LTE (rentang sinyal -140 hingga -55 dBm), > -100 dBm untuk WCDMA (rentang sinyal -111 hingga -53 dBm), > -100 dBm untuk CDMA (rentang sinyal -120 hingga -40 dBm), dan > -80 dBm untuk GSM (rentang sinyal -121 hingga -1 dBm).
- Sel kecil (misalnya, femtocell, picocell, atau repeater dalam ruangan) memberikan lokasi berbasis sel yang paling akurat, dengan radius akurasi yang dapat berada dalam rentang 10-30 meter.
- Geolokasi IP: Jika
considerIpadalahtruedan tidak ada sinyal menara seluler atau WiFi yang dapat dilokasikan secara geografis, API akan memperkirakan lokasi berdasarkan alamat IP permintaan. Metode ini memberikan akurasi terendah, dengan radius yang dapat mencapai ribuan meter. Lihat Mengapa radius akurasi sangat besar? di Panduan pemecahan masalah.