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 edilecek bir anahtar belirtmeniz gerekir. key
, uygulamanızın API anahtarıdır. Bu anahtar, kota yönetimi amacıyla uygulamanızı tanımlar. Anahtar edinme hakkında bilgi edinin.
İstek içeriği
İstek metni 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 ev ağının mobil ülke kodu (MCC). | 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ü. Desteklenen değerler: gsm , cdma ,
wcdma , lte ve nr . |
Bu alan isteğe bağlı olsa da radyo türü istemci tarafından biliniyorsa her zaman eklenmelidir. Alan atlanırsa Coğrafi Konum API'si varsayılan olarak gsm değerini alır. Bu durumda, varsayılan radyo türü yanlışsa geçersiz veya sıfır sonuç elde edilir. |
carrier |
string |
Kargo şirketinin adı. | |
considerIp |
boolean |
Kablosuz ağ ve baz istasyonu sinyalleri eksik, boş veya cihaz konumunu tahmin etmek için yeterli değilse IP coğrafi konumuna dönülüp dönülmeyeceğini belirtir. | Varsayılan olarak true değerine ayarlanır. Yedekleme işlemini önlemek için considerIp değerini false olarak ayarlayın. |
cellTowers |
array |
Bir dizi baz istasyonu nesnesi. | Aşağıdaki Cep Kulesi Nesneleri bölümüne bakın. |
wifiAccessPoints |
array |
WiFi erişim noktası nesneleri dizisi. | Aşağıdaki Kablosuz Ağ Erişim Noktası Nesneleri bölümüne bakın. |
Aşağıda örnek bir Geolocation API istek gövdesi 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 reddedilir.Aşağıdaki cellId hesaplama bölümüne bakın. Bu bölümde, her radyo türü için geçerli değer aralıkları da listelenir. |
newRadioCellId |
number (uint64 ) |
NR (5G) hücresinin benzersiz tanımlayıcısı. | radioType nr için zorunludur; diğer türler için reddedilir.Aşağıdaki newRadioCellId değerini hesaplama bölümüne bakın. Bu bölümde, alanın geçerli değer aralığı da listelenir. |
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 izleme alanı kodu (TAC). |
radioType gsm (varsayılan) ve cdma için zorunludur, 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 mevcutsa 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 sinyal gücü. | |
timingAdvance |
number (double ) |
Zamanlama ilerleme değeri. |
cellId
hesaplanıyor
NR'den (5G) önceki radyo türleri, ağ hücre kimliğini Geolocation API'ye iletmek için 32 bitlik cellId
alanını kullanır.
- GSM (2G) ağları, 16 bitlik Hücre Kimliği'ni (CID) olduğu gibi kullanır. Geçerli aralık: 0-65535.
- CDMA (2G) ağları, 16 bitlik baz istasyonu kimliğini (BID) olduğu gibi kullanır. Geçerli aralık: 0-65535.
- WCDMA (3G) ağları, 12 bitlik Radyo Ağı Denetleyicisi Tanımlayıcısı (RNC-ID) ve 16 bitlik Hücre Kimliği'ni (CID) birleştiren 28 bitlik bir tam sayı 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 bitlik Hücre Kimliği değerinin belirtilmesi yanlış veya sıfır sonuçlara yol açar. - LTE (4G) ağları, 20 bitlik E-UTRAN B Noktası Tanımlayıcısı (eNBId) ile 8 bitlik Hücre Kimliği'ni (CID) birleştiren 28 bitlik bir tam sayı 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 bitlik Hücre Kimliği değerinin belirtilmesi yanlış veya sıfır sonuçlara yol açar.
API isteğine bu aralıkların dışındaki değerleri yerleştirmek, tanımlanmamış davranışlara neden olabilir. API, Google'ın takdirine bağlı olarak sayıyı, belgelenen aralığa sığacak şekilde kısaltabilir, radioType
için düzeltme yapabilir veya yanıtta herhangi bir gösterge olmadan NOT_FOUND
sonucu döndürebilir.
Aşağıda bir LTE baz istasyonu nesnesi örneği verilmiştir.
{ "cellTowers": [ { "cellId": 170402199, "locationAreaCode": 35632, "mobileCountryCode": 310, "mobileNetworkCode": 410, "age": 0, "signalStrength": -60, "timingAdvance": 15 } ] }
Hesaplama
newRadioCellId
Hücre kimlikleri 32 bitten uzun olan yeni ağlar, ağ hücre kimliğini Geolocation API'ye iletmek için 64 bitlik newRadioCellId
alanını kullanır.
- NR (5G) ağları, 36 bitlik yeni radyo hücre kimliğini (NCI) olduğu gibi kullanır.
Geçerli aralık: 0-68719476735.
Aşağıda bir NR hücre kulesi nesnesi örneği verilmiştir.
{ "cellTowers": [ { "newRadioCellId": 68719476735, "mobileCountryCode": 310, "mobileNetworkCode": 410, "age": 0, "signalStrength": -60, } ] }
WiFi erişim noktası nesneleri
İstek metninin wifiAccessPoints
dizisi, fiziksel olarak farklı erişim noktası cihazlarını temsil eden 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 genellikle BSS, BSSID veya MAC adresi olarak adlandırılır. |
Zorunlu. İki nokta işaretiyle ayrılmış (: ) onaltılık dize.
API üzerinden yalnızca evrensel olarak yönetilen MAC adresleri bulunabilir. Diğer MAC adresleri sessizce atlanır ve API isteğinin etkili bir şekilde boş olmasına yol açabilir. Ayrıntılı bilgi için Yersiz kablosuz erişim noktalarını kaldırma başlıklı makaleyi inceleyin. |
signalStrength |
number (double ) |
dBm cinsinden ölçülen mevcut sinyal gücü. | Kablosuz erişim noktalarında dBm değerleri genellikle -35 veya daha düşüktür ve -128 ile -10 dBm arasında değişir. Eksi işaretini eklediğinizden emin olun. |
age |
number (uint32 ) |
Bu erişim noktasının algılandığı andan itibaren geçen milisaniye sayısı. | |
channel |
number (uint32 ) |
İstemcinin 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": "f0:d5:bf:fd:12:ae", "signalStrength": -43, "signalToNoiseRatio": 0, "channel": 11, "age": 0 }
Örnek istekler
Coğrafi Konum API'yi örnek verileriyle denemek istiyorsanız aşağıdaki JSON dosyasını kaydedin:
{ "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 } ] }
Ardından, komut satırından isteğinizi yapmak için cURL'yi 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 adreslerine verilen yanıt şöyle görünür:
{ "location": { "lat": 37.4241173, "lng": -122.0915717 }, "accuracy": 20 }
Kullanılmayan WiFi erişim noktalarını kaldırma
Yerel olarak yönetilen macAddress
'leri içeren kablosuz erişim noktası nesnelerini kaldırmak, giriş olarak kablosuz bağlantı kullanan Geolocation API çağrılarının başarı oranını artırabilir.
Filtreleme yapıldıktan sonra bir Coğrafi Konum API çağrısının başarılı olmayacağı belirlenebilirse eski konum sinyalleri veya daha zayıf sinyallere sahip kablosuz AP'ler kullanma gibi azaltıcı önlemler kullanılabilir. Bu yaklaşım, uygulamanızın konum tahmini ihtiyacı ile doğruluk ve geri çağırma gereksinimleri arasında bir denge kurar. Aşağıdaki filtreleme tekniklerinde girişlerin nasıl filtreleneceği gösterilmektedir ancak uygulama mühendisi olarak uygulamayı seçebileceğiniz azaltma yöntemleri gösterilmemektedir.
Yerel olarak yönetilen MAC adresleri, API için yararlı konum sinyalleri değildir ve isteklerden sessizce çıkarılır. Bu tür MAC adreslerini, macAddress
'ün en önemli baytının ikinci en az önemli bitinin 0
olduğundan emin olarak kaldırabilirsiniz (ör. 02:00:00:00:00:00
'deki 2
ile temsil edilen FF:FF:FF:FF:FF:FF
), bu filtre tarafından faydalı bir şekilde hariç tutulacak bir MAC adresi örneğidir.
00:00:5E:00:00:00
ile 00:00:5E:FF:FF:FF
arasındaki MAC adresi aralığı, IANA için ayrılmıştır ve genellikle ağ yönetimi ve çoklu yayın işlevleri için kullanılır. Bu da konum sinyali olarak kullanılmalarını engeller. Bu MAC adreslerini API'ye gelen girişlerden de kaldırmanız gerekir.
Örneğin, coğrafi konum için kullanılabilen 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 filtrenin kullanılması sonucunda listede yalnızca 1c:34:56:78:9a:bc
öğe kalır. Bu listede 2'den az kablosuz MAC adresi bulunduğundan 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, konumu ve yarıçapı tanımlayan JSON biçimli bir yanıt döndürür.
location
: Kullanıcının tahmini enlem ve boylam koordinatları (derece cinsinden). Birlat
ve birlng
alt alanı içerir.accuracy
: Tahmini konumun doğruluğu (metre cinsinden). Bu, belirli birlocation
etrafındaki dairenin yarıçapını temsil eder.
{ "location": { "lat": 37.421875199999995, "lng": -122.0851173 }, "accuracy": 120 }