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ü 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 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 |
WiFi erişim noktası nesneleri dizisi. | 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 zorunludur; diğer türler için reddedilir.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 istasyonunun 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, veya sıfır sonuçla karşılaşabilirsiniz. - 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 veya sıfır sonuçla karşılaşabilirsiniz.
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 } ] }
Hesaplama
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ılı bilgi için Yersiz kablosuz erişim noktalarını kaldırma başlıklı makaleyi inceleyin. |
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"
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:
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 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. Birlat
ve birlng
içerir alt alana girin.accuracy
: Tahmini konumun doğruluğu, metre. Bu, verilen dairenin çevresindeki bir dairenin yarıçapını gösterirlocation
{ "location": { "lat": 37.421875199999995, "lng": -122.0851173 }, "accuracy": 120 }