Permintaan Geolocation
Permintaan geolokasi 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
. key
adalah kunci API aplikasi Anda. Kunci ini mengidentifikasi aplikasi Anda untuk keperluan manajemen kuota. Pelajari cara mendapatkan kunci.
Isi permintaan
Tubuh permintaan harus diformat sebagai JSON. Jika isi permintaan tidak disertakan, hasil 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 asal perangkat. | Didukung untuk radioType gsm (default),
wcdma , lte , dan nr ; tidak digunakan untuk cdma .Rentang yang valid: 0–999. |
homeMobileNetworkCode |
number (uint32 ) |
Kode Jaringan Seluler untuk jaringan asal perangkat.
Ini adalah MNC untuk GSM, WCDMA, LTE, dan NR. CDMA menggunakan System ID (SID) |
Rentang yang valid untuk MNC: 0–999. Rentang yang 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 ditetapkan secara default ke gsm ,
yang akan menyebabkan 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 Wi-Fi dan menara BTS tidak ada, kosong, atau tidak memadai untuk memperkirakan lokasi perangkat. | Default-nya adalah true . Tetapkan considerIp ke
false untuk mencegah penggantian. |
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 ini.
{ "homeMobileCountryCode": 310, "homeMobileNetworkCode": 410, "radioType": "gsm", "carrier": "Vodafone", "considerIp": true, "cellTowers": [ // See the Cell Tower Objects section below. ], "wifiAccessPoints": [ // See the WiFi Access Point Objects section below. ] }
Objek menara BTS
Array cellTowers
isi permintaan berisi nol atau beberapa objek menara BTS.
Kolom | Jenis JSON | Deskripsi | Catatan |
---|---|---|---|
cellId |
number (uint32 ) |
Identifier unik seluler. | 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. |
locationAreaCode |
number (uint32 ) |
Kode Area Lokasi (Location Area Code/LAC) untuk jaringan GSM dan WCDMA. ID Jaringan (NID) untuk jaringan CDMA. Tracking Area Code (TAC) untuk jaringan LTE dan NR. |
Wajib untuk radioType gsm (default) dan
cdma , opsional untuk nilai lainnya.Rentang yang valid dengan gsm , cdma , wcdma , dan
lte : 0–65535.Rentang yang valid dengan nr : 0–16777215. |
mobileCountryCode |
number (uint32 ) |
Kode Negara Seluler (Mobile Country Code/MCC) menara BTS. | Wajib untuk radioType gsm (default), wcdma ,
lte , dan nr ; tidak digunakan untuk cdma .Rentang yang valid: 0–999. |
mobileNetworkCode |
number (uint32 ) |
Kode Jaringan Seluler menara BTS.
Ini adalah MNC untuk GSM, WCDMA, LTE, dan NR. CDMA menggunakan System ID (SID). |
Wajib. Rentang yang valid untuk MNC: 0–999. Rentang yang 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 age adalah 0, cellId atau newRadioCellId akan mewakili pengukuran
saat ini. |
signalStrength |
number (double ) |
Kekuatan sinyal radio diukur dalam dBm. | |
timingAdvance |
number (double ) |
Nilai timing advance. |
Menghitung cellId
Jenis radio sebelum NR (5G) menggunakan kolom cellId
32-bit untuk meneruskan ID sel jaringan ke Geolocation API.
- Jaringan GSM (2G) menggunakan Cell ID (CID) 16-bit sebagaimana adanya. Rentang valid: 0–65535.
- Jaringan CDMA (2G) menggunakan ID Stasiun Pangkalan (BID) 16-bit sebagaimana adanya. Rentang yang valid: 0–65535.
- Jaringan WCDMA (3G) menggunakan UTRAN/GERAN Cell Identity (UC-ID), yang merupakan nilai bilangan bulat
28-bit yang menggabungkan ID Pengontrol Jaringan Radio (RNC-ID) 12-bit dan Cell ID
16-bit (CID).
Formula:rnc_id << 16 | cid
.
Rentang yang valid: 0–268435455.
Catatan: Hanya menentukan nilai Cell ID 16-bit di jaringan WCDMA akan menghasilkan hasil yang salah atau nol. - Jaringan LTE (4G) menggunakan E-UTRAN Cell Identity (ECI), yang merupakan nilai bilangan bulat 28-bit yang menggabungkan 20-bit E-UTRAN Node B Identifier (eNBId) dan Cell ID (CID) 8-bit.
Formula:enb_id << 8 | cid
.
Rentang yang valid: 0–268435455.
Catatan: Hanya menentukan nilai Cell ID 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 memotong angka agar sesuai dengan rentang yang didokumentasikan, menyimpulkan
koreksi pada radioType
, atau menampilkan hasil NOT_FOUND
tanpa
indikator dalam respons.
Di bawah ini adalah contoh objek menara BTS LTE.
{ "cellTowers": [ { "cellId": 170402199, "locationAreaCode": 35632, "mobileCountryCode": 310, "mobileNetworkCode": 410, "age": 0, "signalStrength": -60, "timingAdvance": 15 } ] }
Menghitung
newRadioCellId
Jaringan yang lebih baru, yang ID selnya lebih panjang dari 32 bit, menggunakan kolom newRadioCellId
64-bit untuk meneruskan ID sel jaringan ke
Geolocation API.
- Jaringan NR (5G) menggunakan New Radio Cell Identity (NCI) 36-bit sebagaimana adanya.
Rentang yang valid: 0–68719476735.
Contoh objek menara BTS NR adalah sebagai berikut.
{ "cellTowers": [ { "newRadioCellId": 68719476735, "mobileCountryCode": 310, "mobileNetworkCode": 410, "age": 0, "signalStrength": -60, } ] }
Objek titik akses WiFi
Array wifiAccessPoints
isi permintaan harus berisi dua
objek titik akses WiFi atau lebih yang mewakili perangkat titik akses
yang berbeda secara fisik. macAddress
wajib diisi; semua kolom lainnya bersifat opsional.
Kolom | Jenis JSON | Deskripsi | Catatan |
---|---|---|---|
macAddress |
string |
Alamat MAC node WiFi. Ini biasanya disebut alamat BSS, BSSID atau MAC. |
Wajib. String heksadesimal yang dipisahkan titik dua (: ).
Hanya alamat MAC yang dikelola secara universal yang dapat ditemukan melalui API. Alamat MAC lainnya dihapus secara otomatis dan dapat menyebabkan permintaan API menjadi kosong. Untuk mengetahui detailnya, lihat Menghapus 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 dari -128 hingga -10 dBm. Pastikan untuk menyertakan tanda minus. |
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 derau saat ini yang diukur dalam dB. |
Contoh objek titik akses WiFi ditampilkan di bawah ini.
{ "macAddress": "f0:d5:bf:fd:12:ae", "signalStrength": -43, "signalToNoiseRatio": 0, "channel": 11, "age": 0 }
Permintaan contoh
Jika Anda ingin mencoba Geolocation API dengan contoh data, simpan JSON berikut ke dalam 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 } ] }
Anda kemudian 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 terlihat seperti ini:
{ "location": { "lat": 37.4241173, "lng": -122.0915717 }, "accuracy": 20 }
Menghapus titik akses WiFi yang tidak digunakan
Menghapus objek titik akses Wi-Fi dengan macAddress
yang
dikelola secara lokal
dapat meningkatkan tingkat keberhasilan panggilan Geolocation API yang menggunakan Wi-Fi sebagai input.
Jika, setelah pemfilteran, dapat ditentukan bahwa panggilan Geolocation API tidak akan berhasil, mitigasi seperti menggunakan sinyal lokasi lama atau AP Wi-Fi dengan
sinyal yang lebih lemah dapat digunakan. Pendekatan ini merupakan kompromi antara kebutuhan aplikasi Anda akan perkiraan lokasi dan persyaratan presisi dan perolehannya. Teknik pemfilteran berikut menunjukkan cara memfilter
input, tetapi tidak menampilkan mitigasi yang dapat Anda pilih untuk diterapkan sebagai
engineer aplikasi.
Alamat MAC yang dikelola secara lokal bukanlah sinyal lokasi yang berguna untuk API dan akan dihapus secara diam-diam dari permintaan. Anda dapat menghapus alamat MAC tersebut
dengan memastikan bahwa bit kedua yang paling tidak signifikan dari
byte paling signifikan macAddress
adalah 0
, misalnya
2
di
02:00:00:00:00:00
. Alamat MAC siaran
(FF:FF:FF:FF:FF:FF
) adalah contoh alamat MAC yang akan
berguna dikecualikan oleh filter ini.
Rentang alamat MAC antara 00:00:5E:00:00:00
dan
00:00:5E:FF:FF:FF
disediakan
untuk IANA dan sering digunakan untuk pengelolaan jaringan dan fungsi multicast
yang mencegah penggunaannya sebagai sinyal lokasi. Anda juga harus menghapus alamat MAC ini dari input ke API.
Misalnya, alamat MAC yang dapat digunakan untuk Geolokasi dapat dikumpulkan dari
array string macAddress
bernama macs
:
String[] macs = {"12:34:56:78:9a:bc", "1c:34:56:78:9a:bc", "00:00:5e:00:00:01"}; ArrayList<String> _macs = new ArrayList<>(Arrays.asList(macs)); _macs.removeIf(m -> !(0 == (2 & Integer.parseInt(m.substring(1, 2), 16)) && !m.substring(0, 8).toUpperCase().equals("00:00:5E")));
macs = ['12:34:56:78:9a:bc', '1c:34:56:78:9a:bc', '00:00:5e:00:00:01'] macs = [m for m in macs if (0 == (2 & int(m[1], 16)) and m[:8].upper() != '00:00:5E')]
macs = ['12:34:56:78:9a:bc', '1c:34:56:78:9a:bc', '00:00:5e:00:00:01']; macs = macs.filter(m => 0 === (2 & Number.parseInt(m[1], 16)) && m.substr(0, 8).toUpperCase() !== '00:00:5E');
Dengan menggunakan filter ini, hanya 1c:34:56:78:9a:bc
yang tersisa dalam daftar. Karena daftar ini memiliki
kurang dari 2 alamat MAC Wi-Fi, permintaan
tidak akan berhasil dan respons
(notFound
)
HTTP 404 akan ditampilkan.
Respons Geolocation
Permintaan geolokasi yang berhasil akan menampilkan respons berformat JSON yang mendefinisikan lokasi dan radius.
location
: Estimasi koordinat lintang dan bujur pengguna, dalam derajat. Berisi satu subkolomlat
dan satu subkolomlng
.accuracy
: Akurasi lokasi yang diperkirakan, dalam meter. Ini mewakili radius lingkaran di sekitarlocation
yang diberikan.
{ "location": { "lat": 37.421875199999995, "lng": -122.0851173 }, "accuracy": 120 }