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 atribut
Kunci API. Kunci ini mengidentifikasi aplikasi Anda untuk keperluan kuota
otomatisasi pengelolaan biaya. Pelajari cara mendapatkan kunci.
Isi permintaan
Tubuh permintaan harus diformat sebagai JSON. Jika isi permintaan tidak disertakan, hasil ditampilkan berdasarkan alamat IP lokasi permintaan. {i>Field<i} berikut adalah 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 System ID (SID) |
Rentang 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 bersifat opsional, kolom ini harus selalu disertakan jika jenis radio
yang diketahui oleh klien. Jika kolom dihilangkan, Geolocation API akan ditetapkan secara default ke gsm ,
yang akan memberikan 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 WiFi dan menara BTS tidak ada, kosong, atau tidak cukup 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 Wi-Fi di bawah ini. |
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 ini, 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 datanya.Lihat bagian Menghitung newRadioCellId di bawah, yang juga mencantumkan rentang nilai yang valid untuk bidang 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 yang 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 System ID (SID). |
Wajib. Rentang valid untuk MNC: 0–999. Rentang yang valid untuk SID: 0–32767. |
Kolom opsional berikut tidak digunakan, tetapi mungkin disertakan jika nilai yang 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 kelompok usia saat ini
pengukuran. |
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 jaringan
ID sel 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 valid: 0–65535.
- Jaringan WCDMA (3G) menggunakan UTRAN/GERAN Cell Identity (UC-ID), yang merupakan bilangan bulat 28-bit
yang menggabungkan 12-bit Radio Network Controller Identifier (RNC-ID) dan 16-bit
ID sel (CID).
Formula:rnc_id << 16 | cid
.
Rentang 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 ID Node B E-UTRAN 20-bit (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 menyebabkan hasil yang salah atau nol.
Menempatkan nilai di luar rentang ini dalam permintaan API dapat menghasilkan perilaku yang tidak ditentukan. API,
atas kebijaksanaan Google, dapat memotong nomor tersebut agar sesuai dengan rentang yang didokumentasikan,
koreksi pada radioType
, atau tampilkan hasil NOT_FOUND
tanpa
indikator tertentu dalam respons.
Contoh objek menara BTS LTE ada di bawah ini.
{ "cellTowers": [ { "cellId": 170402199, "locationAreaCode": 35632, "mobileCountryCode": 310, "mobileNetworkCode": 410, "age": 0, "signalStrength": -60, "timingAdvance": 15 } ] }
Menghitung
newRadioCellId
Jaringan yang lebih baru, dengan ID sel yang lebih panjang dari 32 bit menggunakan 64-bit
Kolom newRadioCellId
untuk meneruskan ID sel jaringan ke
Geolocation API.
- Jaringan NR (5G) menggunakan New Radio Cell Identity (NCI) 36-bit sebagaimana adanya.
Rentang 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
atau lebih banyak objek titik akses WiFi. macAddress
wajib diisi; semua
kolom lainnya bersifat opsional.
Kolom | Jenis JSON | Deskripsi | Catatan |
---|---|---|---|
macAddress |
string |
Alamat MAC simpul 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 adalah dihentikan secara otomatis dan dapat menyebabkan permintaan API menjadi efektif kosong. Untuk mengetahui detailnya, lihat Menghentikan akses Wi-Fi yang tidak berguna poin. |
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. |
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 kebisingan 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 Anda dari baris perintah:
$ 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 }
Meletakkan 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 yang lebih lama atau AP Wi-Fi dengan sinyal yang lebih lemah dapat digunakan. Pendekatan ini adalah kompromi antara
kebutuhan aplikasi atas perkiraan lokasi serta presisi dan perolehannya
lainnya. Teknik pemfilteran berikut
menunjukkan cara memfilter
input, tetapi tidak menunjukkan mitigasi yang dapat Anda lakukan, sebagai
insinyur, pilih
untuk melamar.
Alamat MAC yang dikelola secara lokal bukanlah sinyal lokasi yang berguna untuk
API dan otomatis dihapus dari permintaan. Anda dapat menghapus alamat MAC tersebut
dengan memastikan bahwa bit
paling tidak signifikan kedua dari
Byte macAddress
yang paling signifikan adalah 0
, misalnya tindakan
2
di
02:00:00:00:00:00
. Alamat MAC siaran
(FF:FF:FF:FF:FF:FF
) adalah contoh alamat MAC yang akan
dikecualikan secara berguna oleh filter ini.
Rentang alamat MAC antara 00:00:5E:00:00:00
dan
00:00:5E:FF:FF:FF
adalah
dicadangkan
untuk IANA dan sering digunakan untuk pengelolaan jaringan serta fungsi multicast
yang menghalangi penggunaannya
sebagai sinyal lokasi. Anda juga harus menghapus
alamat MAC 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');
Penggunaan filter ini hanya akan menghasilkan 1c:34:56:78:9a:bc
tersisa dalam daftar. Karena daftar ini memiliki
kurang dari 2 alamat MAC WiFi,
permintaan tidak akan berhasil dan permintaan HTTP 404
(notFound
)
yang akan ditampilkan.
Respons Geolocation
Permintaan geolokasi yang berhasil akan menampilkan respons berformat JSON yang menentukan lokasi dan radius.
location
: Perkiraan lintang dan bujur pengguna koordinat, dalam derajat. Berisi satulat
dan satulng
sub-isian.accuracy
: Keakuratan perkiraan lokasi, di meter. Nilai ini mewakili radius lingkaran di sekitar bidang yang ditentukanlocation
.
{ "location": { "lat": 37.421875199999995, "lng": -122.0851173 }, "accuracy": 120 }