Coğrafi konum istekleri
Coğrafi konum istekleri POST kullanılarak aşağıdaki URL'ye gönderilir:
https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY
İsteğinizde key
parametresinin değeri olarak dahil edilen bir anahtar belirtmeniz gerekir. key
, uygulamanızın API anahtarıdır. Bu anahtar, kota yönetimi amacıyla uygulamanızı tanımlar. Nasıl anahtar alacağınızı öğrenin.
İstek içeriği
İsteğin gövdesi JSON olarak biçimlendirilmelidir. İstek gövdesi dahil edilmezse sonuçlar, istek konumunun IP adresine göre döndürülür. Aşağıdaki alanlar desteklenir ve aksi belirtilmedikçe tüm alanlar isteğe bağlıdır:
Alan | JSON türü | Açıklama | Notlar |
---|---|---|---|
homeMobileCountryCode |
number (uint32 ) |
Cihazın ana ağının mobil ülke kodu (MM). | radioType gsm (varsayılan), wcdma , lte ve nr için desteklenir, cdma için kullanılmaz.Geçerli aralık: 0-999. |
homeMobileNetworkCode |
number (uint32 ) |
Cihazın ev ağının Mobil Ağ Kodu.
Bu, GSM, WCDMA, LTE ve NR için MNC'dir. CDMA, Sistem Kimliğini (SID) kullanır. |
MNC için geçerli aralık: 0-999. SID için geçerli aralık: 0-32767. |
radioType |
string |
Mobil radyo türü. gsm , cdma , wcdma , lte ve nr değerleri desteklenir. |
Bu alan isteğe bağlı olsa da radyo türü istemci tarafından biliniyorsa her zaman dahil olmalıdır. Alan atlanırsa Coğrafi Konum API'si varsayılan olarak gsm değerine ayarlanır. Bu durum, varsayılan radyo türü yanlışsa geçersiz sonuçla veya sıfır sonuçla sonuçlanır. |
carrier |
string |
Kargo şirketinin adı. | |
considerIp |
boolean |
Kablosuz ağ ve baz istasyonu sinyalleri eksikse, boşsa veya cihaz konumunu tahmin etmek için yeterli değilse IP coğrafi konumuna geri döndürülüp döndürülmeyeceğini belirtir. | Varsayılan olarak true değerine ayarlanır. Yedeklemeyi önlemek için considerIp değerini false olarak ayarlayın. |
cellTowers |
array |
Bir dizi baz istasyonu. | Aşağıdaki Baz İstasyonu Nesneleri bölümüne bakın. |
wifiAccessPoints |
array |
Kablosuz erişim noktası nesneleri dizisi. | Aşağıdaki Kablosuz Erişim Noktası Nesneleri bölümüne bakın. |
Aşağıda Coğrafi Konum API'si isteğinin gövde metniyle ilgili örnek gösterilmektedir.
{ "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. ] }
Baz istasyonu nesneleri
İstek gövdesinin cellTowers
dizisi, sıfır veya daha fazla baz istasyonu nesnesi içeriyor.
Alan | JSON türü | Açıklama | Notlar |
---|---|---|---|
cellId |
number (uint32 ) |
Hücrenin benzersiz tanımlayıcısı. | radioType gsm (varsayılan), cdma , wcdma ve lte için zorunlu; nr için reddedildi.Her bir radyo türü için geçerli değer aralıklarını da listeleyen aşağıdaki Hücre kimliğini hesaplama bölümüne bakın. |
newRadioCellId |
number (uint64 ) |
NR (5G) hücresinin benzersiz tanımlayıcısı. | radioType nr için zorunlu; diğer türler için reddedildi.Alan için geçerli değer aralığını da listeleyen aşağıdaki RadioCellId'yi hesaplama bölümüne bakın. |
locationAreaCode |
number (uint32 ) |
GSM ve WCDMA ağları için Konum Alanı Kodu (LAC). CDMA ağları için Ağ Kimliği (NID). LTE ve NR ağları için İzleme Alanı Kodu (TAC). |
radioType gsm (varsayılan) ve cdma için zorunlu, diğer değerler için isteğe bağlıdır.gsm , cdma , wcdma ve lte ile geçerli aralık: 0-65535.nr ile geçerli aralık: 0-16777215. |
mobileCountryCode |
number (uint32 ) |
Baz istasyonunun Mobil Ülke Kodu (MCC). | radioType gsm (varsayılan), wcdma , lte ve nr için zorunludur, cdma için kullanılmaz.Geçerli aralık: 0-999. |
mobileNetworkCode |
number (uint32 ) |
Baz istasyonunun Mobil Ağ Kodu.
Bu, GSM, WCDMA, LTE ve NR için MNC'dir. CDMA, Sistem Kimliğini (SID) kullanır. |
Zorunludur. MNC için geçerli aralık: 0-999. SID için geçerli aralık: 0-32767. |
Aşağıdaki isteğe bağlı alanlar kullanılmaz ancak değerler varsa dahil edilebilir.
Alan | JSON türü | Açıklama | Notlar |
---|---|---|---|
age |
number (uint32 ) |
Bu hücrenin birincil olduğu andan itibaren geçen milisaniye sayısı. | Yaş 0 ise cellId veya newRadioCellId mevcut bir ölçümü temsil eder. |
signalStrength |
number (double ) |
dBm cinsinden ölçülen radyo sinyali gücü. | |
timingAdvance |
number (double ) |
Zamanlama ilerlemesi değeri. |
cellId
hesaplanıyor
NR (5G) öncesi radyo türleri, ağ hücre kimliğini Geolocation API'ye geçirmek için 32 bit cellId
alanını kullanır.
- GSM (2G) ağları, 16 bit Hücre Kimliği'ni (CID) olduğu gibi kullanır. Geçerli aralık: 0-65535.
- CDMA (2G) ağları, 16 bit Baz İstasyonu kimliğini (BID) olduğu gibi kullanır. Geçerli aralık: 0-65535.
- WCDMA (3G) ağları, 12 bit Radyo Ağı Denetleyici Tanımlayıcısı (RNC-ID) ile 16 bit Hücre Kimliği'ni (CID) birleştiren 28 bitlik bir tam sayı değeri olan UTRAN/GERAN Hücre Kimliği'ni (UC-ID) kullanır.
Formül:rnc_id << 16 | cid
.
Geçerli aralık: 0–268435455.
Not: WCDMA ağlarında yalnızca 16 bit Hücre Kimliği değerinin belirtilmesi yanlış veya sıfır sonuçla sonuçlanır. - LTE (4G) ağları, 20 bit E-UTRAN Düğüm Tanımlayıcısı (eNBId) ile 8 bit Hücre Kimliği'ni (CID) birleştiren 28 bitlik bir tam sayı değeri olan E-UTRAN Hücre Kimliği'ni (ECI) kullanır.
Formül:enb_id << 8 | cid
.
Geçerli aralık: 0–268435455.
Not: LTE ağlarında yalnızca 8 bit Hücre Kimliği değerinin belirtilmesi hatalı veya sıfır sonuçla sonuçlanır.
API isteğine bu aralıkların dışına değerler yerleştirmek tanımsız davranışa neden olabilir. API, Google'ın takdirine bağlı olarak sayıyı belgelenen aralığa sığacak şekilde kesebilir, radioType
için bir düzeltme olduğu sonucuna varabilir veya yanıtta herhangi bir gösterge olmaksızın bir NOT_FOUND
sonucu döndürebilir.
Aşağıda örnek bir LTE baz istasyonu nesnesi görebilirsiniz.
{ "cellTowers": [ { "cellId": 170402199, "locationAreaCode": 35632, "mobileCountryCode": 310, "mobileNetworkCode": 410, "age": 0, "signalStrength": -60, "timingAdvance": 15 } ] }
newRadioCellId
hesaplanıyor
Hücre kimlikleri 32 bitten uzun olan yeni ağlar, ağ hücre kimliğini Geolocation API'ye geçirmek için 64 bit newRadioCellId
alanını kullanır.
- NR (5G) ağları, 36 bit Yeni Radyo Hücresi Kimliği'ni (NCI) olduğu gibi kullanır.
Geçerli aralık: 0–68719476735.
Aşağıda örnek bir NR baz istasyonu nesnesi görebilirsiniz.
{ "cellTowers": [ { "newRadioCellId": 68719476735, "mobileCountryCode": 310, "mobileNetworkCode": 410, "age": 0, "signalStrength": -60, } ] }
Kablosuz erişim noktası nesneleri
İstek gövdesinin wifiAccessPoints
dizisi, iki veya daha fazla kablosuz erişim noktası nesnesi içermelidir. macAddress
zorunludur; diğer tüm alanlar isteğe bağlıdır.
Alan | JSON türü | Açıklama | Notlar |
---|---|---|---|
macAddress |
string |
Kablosuz düğümün MAC adresi. Bu adres genellikle BSS, BSSID veya MAC adresi olarak adlandırılır. |
Zorunlu.Kolonla ayrılmış (: ) onaltılık dize.
API aracılığıyla yalnızca evrensel olarak yönetilen MAC adresleri bulunabilir. Diğer MAC adresleri sessizce atılır ve API isteğinin boşalmasıyla sonuçlanabilir. Ayrıntılı bilgi için Kullanışsız Wifi erişim noktalarını bırakma başlıklı makaleyi inceleyin. |
signalStrength |
number (double ) |
dBm cinsinden ölçülen mevcut sinyal gücü. | Kablosuz erişim noktaları için dBm değerleri genellikle -35 veya daha düşük olup -128 ile -10 dBm aralığındadır. Eksi işaretini eklemeyi unutmayın. |
age |
number (uint32 ) |
Bu erişim noktasının algılanmasından bu yana geçen milisaniye sayısı. | |
channel |
number (uint32 ) |
Müşterinin erişim noktasıyla iletişim kurduğu kanal. | |
signalToNoiseRatio |
number (double ) |
dB cinsinden ölçülen mevcut sinyal-gürültü oranı. |
Aşağıda örnek bir kablosuz erişim noktası nesnesi gösterilmektedir.
{ "macAddress": "9c:1c:12:b0:45:f1", "signalStrength": -43, "signalToNoiseRatio": 0, "channel": 11, "age": 0 }
Örnek istekler
Geolocation API'yi örnek verilerle denemek istiyorsanız aşağıdaki JSON dosyasını bir dosyaya kaydedin:
{ "considerIp": "false", "wifiAccessPoints": [ { "macAddress": "3c:37:86:5d:75:d4", "signalStrength": -35, "signalToNoiseRatio": 0 }, { "macAddress": "94:b4:0f:fd:c1:40", "signalStrength": -35, "signalToNoiseRatio": 0 } ] }
Daha sonra komut satırından isteğinizi iletmek için cURL kullanabilirsiniz:
$ curl -d @your_filename.json -H "Content-Type: application/json" -i "https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY"
Önceki MAC adresleri için yanıt şu şekildedir:
{ "location": { "lat": 37.4241876, "lng": -122.0917381 }, "accuracy": 32.839 }
Kullanılmayan kablosuz erişim noktaları kaldırılıyor
Yerel olarak yönetilen macAddress
'lere sahip kablosuz erişim noktası nesnelerinin kaldırılması, giriş olarak kablosuz ağı kullanan Geolocation API çağrılarının başarı oranını artırabilir.
Filtrelemeden sonra bir Coğrafi Konum API çağrısının başarılı olmayacağı belirlenirse eski konum sinyallerini veya daha zayıf sinyallere sahip kablosuz erişim noktalarını kullanmak gibi azaltma yöntemleri kullanılabilir. Bu yaklaşım, uygulamanızın konum tahmini ihtiyacı ile hassasiyet ve geri çağırma gereksinimleri arasında denge sağlar. Aşağıdaki filtreleme teknikleri, girişlerin nasıl filtreleneceğini gösterir ancak uygulama mühendisi olarak uygulayabileceğiniz azaltmaları göstermez.
Yerel olarak yönetilen MAC adresleri, API için kullanışlı konum sinyalleri değildir ve sessizce isteklerden çıkarılır. macAddress
ürününün en anlamlı baytının ikinci en az anlamlı bitinin 0
(ör. 02:00:00:00:00:00
öğesinde 2
ile temsil edilen FF:FF:FF:FF:FF:FF
), bu filtre tarafından faydalı olabilecek bir MAC adresi örneğidir.
00:00:5E:00:00:00
ile 00:00:5E:FF:FF:FF
arasındaki MAC adresleri aralığı IANA için ayrılmıştır ve genellikle ağ yönetimi ve konum sinyali olarak kullanılmasını engelleyen çok noktaya yayın işlevleri için kullanılır. Bu MAC adreslerini, API'ye yapılan girişlerden de kaldırmanız gerekir.
Örneğin, Coğrafi Konum için kullanılabilir MAC adresleri, macs
adlı bir macAddress
dizesi dizisinden toplanabilir:
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');
Bu filtre kullanıldığında listede yalnızca 1c:34:56:78:9a:bc
kalır. Bu listede 2'den az kablosuz MAC adresi olduğu için istek başarılı olmaz ve HTTP 404 (notFound
) yanıtı döndürülür.
Coğrafi konum yanıtları
Başarılı bir coğrafi konum isteği, konum ve yarıçap tanımlayan JSON biçimli bir yanıt döndürür.
location
: Kullanıcının derece cinsinden tahmini enlem ve boylam koordinatları. Birlat
ve birlng
alt alanı içerir.accuracy
: Tahmini konumun metre cinsinden doğruluğu. Bu değer, belirtilenlocation
etrafında bir dairenin yarıçapını temsil eder.
{ "location": { "lat": 37.421875199999995, "lng": -122.0851173 }, "accuracy": 120 }