Coğrafi konum isteği ve yanıtı

Coğrafi konum istekleri

Coğrafi konum istekleri, aşağıdaki URL'ye POST kullanılarak gönderilir:

https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY

İsteğinizde, key parametresinden yararlanın. key, uygulamanızın API anahtarı. Bu anahtar, kota amacıyla uygulamanızı tanımlar üzerine konuşalım. Nasıl anahtar alacağınızı öğrenin.

İstek içeriği

İsteğin gövdesi JSON biçiminde olmalıdır. İsteğin 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ğına ait mobil ülke kodu (MM). radioType gsm (varsayılan) için desteklenir wcdma, lte ve nr; cdma için kullanılmaz.
. Geçerli aralık: 0-999.
homeMobileNetworkCode number (uint32) Cihazın ev ağına ait Mobil Ağ Kodu. Bu; GSM, WCDMA, LTE ve NR için MNC.
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ü şu durumlarda her zaman eklenmelidir: anlayabiliyorsunuz.
. Bu alan atlanırsa Geolocation API'nin varsayılan değeri gsm olur. varsayıldığı varsayılan radyo türündeyse geçersiz veya sıfır sonuçla sonuçlanır yanlış.
carrier string Kargo şirketinin adı.
considerIp boolean Kablosuz ve baz istasyonu sinyalleri eksikse IP coğrafi konumunu temel alıp almayacağını belirtir. cihaz konumunu tahmin etmek için yeterli olmayabilir. Varsayılan olarak true değerine ayarlanır. considerIp değerini şuna ayarla: Düşüşü önlemek için false.
cellTowers array Bir dizi baz istasyonu nesnesi. Aşağıdaki Hücre Kulesi Nesneleri bölümüne bakın.
wifiAccessPoints array Bir dizi kablosuz erişim noktası nesnesi. Kablosuz Erişim Noktası Nesneleri bölümüne bakın bölümüne göz atın.

Örnek bir Coğrafi Konum API'si isteği gövdesi aşağıda gösterilmiştir.

{
  "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 içeriyor çok benzer.

Alan JSON türü Açıklama Notlar
cellId number (uint32) Hücrenin benzersiz tanımlayıcısı. radioType gsm (varsayılan), cdma için zorunlu wcdma ve lte; nr için reddedildi.
. Aşağıdaki Hücre kimliğini hesaplama bölümüne bakın. Bu bölümde ayrıca, geçerli değer aralıklarına göre görüntüleyebilirsiniz.
newRadioCellId number (uint64) NR (5G) hücresinin benzersiz tanımlayıcısı. radioType nr için zorunlu; diğer kullanıcı için reddedildi bulunur.
. Aşağıdaki NewRadioCellId'yi hesaplama bölümüne bakın. Bu değer, alan için geçerli değer aralığını da listeler.
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 için zorunlu cdma, diğer değerler için isteğe bağlıdır.
. gsm, cdma, wcdma ve lte: 0-65535.
. nr ile geçerli aralık: 0-16777215.
mobileCountryCode number (uint32) Baz kulesinin Mobil Ülke Kodu (MCC). radioType gsm (varsayılan), wcdma için zorunlu lte ve nr; cdma için kullanılmaz.
. Geçerli aralık: 0-999.
mobileNetworkCode number (uint32) Baz kulesinin Mobil Ağ Kodu. Bu; GSM, WCDMA, LTE ve NR için MNC.
CDMA, Sistem Kimliği'ni (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 aşağıdaki gibiyse dahil edilebilir: kullanılabilir.

Alan JSON türü Açıklama Notlar
age number (uint32) Bu hücrenin birincil hale gelmesinden bu yana geçen milisaniye sayısı. Yaş değeri 0 ise cellId veya newRadioCellId geçerli bir değeri temsil eder bahsedeceğim.
signalStrength number (double) dBm olarak ölçülen radyo sinyal gücü.
timingAdvance number (double) İlgili içeriği oluşturmak için kullanılan ileri zamanlama değer.

cellId hesaplanıyor

NR (5G) öncesi radyo türleri, ağı geçirmek için 32 bit cellId alanını kullanır Geolocation API'ye hücre kimliği.

  • 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ı, 28 bitlik bir tam sayı olan UTRAN/GERAN Hücre Kimliği'ni (UC-ID) kullanır 12 bit Radyo Ağı Denetleyici Tanımlayıcısı (RNC-ID) ile 16 bit'i birleştiren değer Hücre kimliği (CID).
    . 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, ya da sıfır sonuç olabilir.
  • LTE (4G) ağları, 28 bit tam sayı değeri olan E-UTRAN Hücre Kimliği'ni (ECI) kullanır 20 bit E-UTRAN Düğüm B Tanımlayıcısı (eNBId) ile 8 bit Hücre Kimliği (CID) birleştirilmelidir.
    . 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 ya da sıfır sonuç olabilir.

API isteğinde bu aralıkların dışına değerlerin yerleştirilmesi, tanımlanmamış davranışa neden olabilir. API, şahsi karar verme yetkisiyle, belirtilen aralığa sığması için sayıyı kısaltabilir. Bu durumda, radioType için düzeltme yapın veya hiç olmadan NOT_FOUND sonucu döndür göstergesi olabilir.

Aşağıda örnek bir LTE baz istasyonu nesnesi verilmiştir.

{
  "cellTowers": [
    {
      "cellId": 170402199,
      "locationAreaCode": 35632,
      "mobileCountryCode": 310,
      "mobileNetworkCode": 410,
      "age": 0,
      "signalStrength": -60,
      "timingAdvance": 15
    }
  ]
}

Hesaplanıyor newRadioCellId.

Hücre kimlikleri 32 bitten uzun olan yeni ağlar Ağ hücre kimliğinin iletilmesi için newRadioCellId alanı Coğrafi konum API'si.

  • NR (5G) ağları, 36 bit Yeni Radyo Hücre Kimliği'ni (NCI) olduğu gibi kullanır.
    Geçerli aralık: 0–68719476735.

Aşağıda, bir NR baz istasyonu nesnesi verilmiştir.

{
  "cellTowers": [
    {
      "newRadioCellId": 68719476735,
      "mobileCountryCode": 310,
      "mobileNetworkCode": 410,
      "age": 0,
      "signalStrength": -60,
    }
  ]
}

Kablosuz erişim noktası nesneleri

İstek gövdesinin wifiAccessPoints dizisi iki içermelidir veya daha fazla kablosuz erişim noktası nesnesi içerir. macAddress zorunludur; tümü diğer alanlar isteğe bağlıdır.

Alan JSON türü Açıklama Notlar
macAddress string Kablosuz düğümün MAC adresi. Bu alana genellikle BSS, BSSID veya MAC adresi denir. Zorunlu.Kolonla ayrılmış (:) onaltılık dize.
Yalnızca evrensel olarak yönetilir MAC adresleri API aracılığıyla bulunabilir. Diğer MAC adresleri: sessizce bırakılır ve API isteğinin etkin hale gelmesine neden olabilir. boştur. Ayrıntılar için İşe yaramayan kablosuz ağ erişimini bırakma başlıklı makaleyi inceleyin puan.
signalStrength number (double) dBm olarak ö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 arasındadır. Eksi işaretini eklediğinizden emin olun.
age number (uint32) Bu erişim noktasının algılanmasından bu yana geçen milisaniye sayısı.
channel number (uint32) İstemcinin erişim noktasıyla iletişim kurduğu kanal.
signalToNoiseRatio number (double) Mevcut sinyal-gürültü oranı dB cinsinden ölçülür.

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

Örnek konum içeren Geolocation API'yi denemek isterseniz verileri için aşağıdaki JSON dosyasını bir dosyaya 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
    }
  ]
}

Daha sonra cURL'yi kullanarak komut satırından isteğinizi gönderin:

$ curl -d @your_filename.json -H "Content-Type: application/json" -i "https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY"

Önceki MAC adreslerinin yanıtı aşağıdaki gibi görünür:

{
  "location": {
    "lat": 37.4241173,
    "lng": -122.0915717
  },
  "accuracy": 20
}

Kullanılmayan kablosuz erişim noktalarını bırakma

Şu özelliklere sahip kablosuz erişim noktası nesneleri kaldırılıyor: macAddress yerel-yönetim giriş olarak kablosuz bağlantı kullanan Geolocation API çağrılarının başarı oranını artırabilir. Filtrelemeden sonra, bir Geolocation API çağrısının eski konum sinyallerini veya kablosuz erişim noktaları kullanmak gibi çözümleri daha zayıf sinyaller de kullanılabilir. Bu yaklaşım, sunduğunuz ürün uygulamanın konum tahmini, doğruluğu ve geri çağırma ihtiyacı gereksinimlerini karşılayın. Aşağıdaki filtreleme teknikleri, ancak uygulama olarak başvurabileceğiniz çözümleri göstermeyin. mühendisim, başvurun.

Yerel olarak yönetilen MAC adresleri, ve isteklerden sessizce çıkarılır. Bu tür MAC adreslerini kaldırabilirsiniz: emin olmak için macAddress etiketinin en anlamlı baytı 0 şeklindedir, ör. "the" 1 bit, 2 tarafından temsil edilir ve 02:00:00:00:00:00. Yayın MAC adresi (FF:FF:FF:FF:FF:FF), şuna örnek bir MAC adresi: hariç tutulmasını sağlar.

00:00:5E:00:00:00 ile arasında MAC adresi aralığı 00:00:5E:FF:FF:FF ayırtılmış 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. Şunları da kaldırmalısınız: API'ye yapılan girişlerden MAC adresleri.

Örneğin, Coğrafi Konum için kullanılabilir MAC adresleri macs adlı macAddress dizelerinden oluşan dizi:

Java
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")));
    
Python
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')]
    
JavaScript
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 filtreyi kullandığınızda yalnızca 1c:34:56:78:9a:bc sonucunu görürsünüz. listede kaldı. Çünkü bu listede 2'den az kablosuz MAC adresi varsa isteği başarılı olmaz ve HTTP 404 hatası (notFound) yanıtı döndürülür.

Coğrafi konum yanıtları

Başarılı bir coğrafi konum isteği, JSON biçiminde bir yanıt döndürüyor bir konum ve yarıçap tanımlamaktır.

  • location: Kullanıcının tahmini enlem ve boylamı derece cinsinden belirtin. Bir lat ve bir lng içerir alt alana girin.
  • accuracy: Tahmini konumun doğruluğu, metre. Bu, verilen dairenin çevresindeki bir dairenin yarıçapını gösterir location
{
  "location": {
    "lat": 37.421875199999995,
    "lng": -122.0851173
  },
  "accuracy": 120
}