Geolocation-Anforderungen
Geolocation-Anforderungen werden mit POST an die folgende URL gesendet:
https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY
Sie müssen in Ihrer Anfrage einen Schlüssel angeben, der als Wert eines key
-Parameters enthalten ist. key
ist der API-Schlüssel Ihrer Anwendung. Mit diesem Schlüssel wird Ihre Anwendung für die Kontingentverwaltung identifiziert. Informationen zum Abrufen eines Schlüssels
Anfragetext
Der Anforderungstext muss in JSON formatiert sein. Wenn der Anfragetext nicht enthalten ist, werden die Ergebnisse basierend auf der IP-Adresse des Anfragestandorts zurückgegeben. Die folgenden Felder werden unterstützt. Sofern nicht anders angegeben, sind alle Felder optional:
Feld | JSON-Typ | Beschreibung | Hinweise |
---|---|---|---|
homeMobileCountryCode |
number (uint32 ) |
Der Mobile Country Code (MCC) für das Heimnetzwerk des Geräts. | Unterstützt für radioType gsm (Standard), wcdma , lte und nr ; wird nicht für cdma verwendet.Gültiger Bereich: 0–999. |
homeMobileNetworkCode |
number (uint32 ) |
Die Mobilfunknetzkennzahl für das Heimnetzwerk des Geräts.
Dies ist der MNC für GSM, WCDMA, LTE und NR. Bei CDMA wird die System-ID (SID) verwendet. |
Gültiger Bereich für MNC: 0–999. Gültiger Bereich für SID: 0–32767. |
radioType |
string |
Der Mobilfunktyp. Unterstützte Werte sind gsm , cdma , wcdma , lte und nr . |
Dieses Feld ist zwar optional, sollte aber immer angegeben werden, wenn der Funktyp dem Client bekannt ist. Wenn das Feld ausgelassen wird, verwendet die Geolocation API standardmäßig gsm . Dies führt zu ungültigen oder leeren Ergebnissen, wenn der angenommene Funktyp falsch ist. |
carrier |
string |
Der Name des Netzbetreibers. | |
considerIp |
boolean |
Gibt an, ob auf die IP-Geolokalisierung zurückgegriffen werden soll, wenn WLAN- und Mobilfunkmast-Signale fehlen, leer sind oder nicht ausreichen, um den Gerätestandort zu schätzen. | Die Standardeinstellung ist true . Setzen Sie considerIp auf false , um ein Fallback zu verhindern. |
cellTowers |
array |
Ein Array mit Mobilfunkmastobjekten. | Weitere Informationen finden Sie unten im Abschnitt Mobilfunkmastobjekte. |
wifiAccessPoints |
array |
Ein Array mit WiFi-Zugriffspunktobjekten. | Weitere Informationen finden Sie unten im Abschnitt WiFi Access Point Objects (WLAN-Zugangspunktobjekte). |
Unten sehen Sie ein Beispiel für einen Anfragetext für die Geolocation API.
{ "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. ] }
Mobilfunkmastobjekte
Das cellTowers
-Array des Anfrageinhalts enthält null oder mehr Mobilfunkmastobjekte.
Feld | JSON-Typ | Beschreibung | Hinweise |
---|---|---|---|
cellId |
number (uint32 ) |
Die eindeutige Kennung der Funkzelle. | Erforderlich für radioType gsm (Standard), cdma , wcdma und lte ; abgelehnt für nr .Weitere Informationen finden Sie unten im Abschnitt cellId berechnen. Dort sind auch die gültigen Wertebereiche für die einzelnen Funktypen aufgeführt. |
newRadioCellId |
number (uint64 ) |
Eindeutige Kennung der NR-Zelle (5G). | Erforderlich für radioType nr ; abgelehnt für andere Typen.Weitere Informationen finden Sie unten im Abschnitt newRadioCellId berechnen. Dort ist auch der gültige Wertebereich für das Feld aufgeführt. |
locationAreaCode |
number (uint32 ) |
Der Location Area Code (LAC) für GSM- und WCDMA-Netzwerke. Die Netzwerk-ID (NID) für CDMA-Netzwerke. Der Tracking Area Code (TAC) für LTE- und NR-Netzwerke. |
Erforderlich für radioType gsm (Standard) und cdma , optional für andere Werte.Gültiger Bereich mit gsm , cdma , wcdma und lte : 0–65535.Gültiger Bereich mit nr : 0–16777215. |
mobileCountryCode |
number (uint32 ) |
Der Mobile Country Code (MCC) des Mobilfunkmasts. | Erforderlich für radioType gsm (Standard), wcdma , lte und nr ; wird nicht für cdma verwendet.Gültiger Bereich: 0–999. |
mobileNetworkCode |
number (uint32 ) |
Die Mobilfunknetzkennzahl des Mobilfunkmasts.
Dies ist der MNC für GSM, WCDMA, LTE und NR. Bei CDMA wird die System-ID (SID) verwendet. |
Erforderlich. Gültiger Bereich für MNC: 0–999. Gültiger Bereich für SID: 0–32767. |
Die folgenden optionalen Felder werden nicht verwendet, können aber angegeben werden, wenn Werte verfügbar sind.
Feld | JSON-Typ | Beschreibung | Hinweise |
---|---|---|---|
age |
number (uint32 ) |
Die Anzahl Millisekunden, seit diese Funkzelle die primäre Funkzelle war. | Wenn das Alter 0 ist, steht cellId oder newRadioCellId für eine aktuelle Messung. |
signalStrength |
number (double ) |
Die Stärke des Funksignals, gemessen in dBm. | |
timingAdvance |
number (double ) |
Der Wert für Timing Advance. |
cellId
berechnen
Bei Funktypen vor NR (5G) wird das 32-Bit-Feld cellId
verwendet, um die Netzwerkzellen-ID an die Geolocation API zu übergeben.
- GSM-Netzwerke (2G) verwenden die 16‑Bit-Zell‑ID (CID) unverändert. Gültiger Bereich: 0–65535.
- In CDMA-Netzwerken (2G) wird die 16‑Bit-Basisstations-ID (BID) unverändert verwendet. Gültiger Bereich: 0–65535.
- In WCDMA-Netzwerken (3G) wird die UTRAN/GERAN Cell Identity (UC-ID) verwendet, ein 28-Bit-Ganzzahlwert, der die 12-Bit-RNC-ID (Radio Network Controller Identifier) und die 16-Bit-CID (Cell ID) verknüpft.
Formel:rnc_id << 16 | cid
.
Gültiger Bereich: 0–268435455.
Hinweis:Wenn Sie in WCDMA-Netzwerken nur den 16-Bit-Wert für die Cell ID angeben, erhalten Sie falsche oder keine Ergebnisse. - In LTE-Netzwerken (4G) wird die E-UTRAN Cell Identity (ECI) verwendet, ein 28-Bit-Ganzzahlwert, der aus der 20-Bit-E-UTRAN Node B Identifier (eNBId) und der 8-Bit-Cell ID (CID) besteht.
Formel:enb_id << 8 | cid
.
Gültiger Bereich: 0–268435455.
Hinweis:Wenn Sie in LTE-Netzwerken nur den 8-Bit-Wert für die Cell-ID angeben, erhalten Sie falsche oder keine Ergebnisse.
Wenn Sie Werte außerhalb dieser Bereiche in die API-Anfrage einfügen, kann dies zu einem undefinierten Verhalten führen. Die API kann die Zahl nach Ermessen von Google so kürzen, dass sie in den dokumentierten Bereich passt, eine Korrektur für radioType
ableiten oder ein NOT_FOUND
-Ergebnis ohne Indikator in der Antwort zurückgeben.
Unten sehen Sie ein Beispiel für ein LTE-Mobilfunkmastobjekt.
{ "cellTowers": [ { "cellId": 170402199, "locationAreaCode": 35632, "mobileCountryCode": 310, "mobileNetworkCode": 410, "age": 0, "signalStrength": -60, "timingAdvance": 15 } ] }
newRadioCellId
wird berechnet
Bei neueren Netzwerken, deren Zellen-IDs länger als 32 Bit sind, wird das 64-Bit-Feld newRadioCellId
verwendet, um die Netzwerkzellen-ID an die Geolocation API zu übergeben.
- In NR-Netzwerken (5G) wird die 36‑Bit-New Radio Cell Identity (NCI) unverändert verwendet.
Gültiger Bereich: 0–68719476735.
Unten sehen Sie ein Beispiel für ein NR-Mobilfunkmastobjekt.
{ "cellTowers": [ { "newRadioCellId": 68719476735, "mobileCountryCode": 310, "mobileNetworkCode": 410, "age": 0, "signalStrength": -60, } ] }
WiFi-Zugriffspunktobjekte
Das wifiAccessPoints
-Array des Anfragetexts muss mindestens zwei WLAN-Zugangspunktobjekte enthalten, die physisch unterschiedliche Zugangspunktgeräte darstellen. macAddress
ist erforderlich, alle anderen Felder sind optional.
Feld | JSON-Typ | Beschreibung | Hinweise |
---|---|---|---|
macAddress |
string |
Die MAC-Adresse des WLAN-Knotens. Sie wird in der Regel als BSS, BSSID oder MAC-Adresse bezeichnet. |
Erforderlich: Durch Doppelpunkte (: ) getrennter hexadezimaler String.
Über die API können nur universell verwaltete MAC-Adressen gefunden werden. Andere MAC-Adressen werden ohne Rückmeldung verworfen und können dazu führen, dass eine API-Anfrage leer ist. Weitere Informationen finden Sie unter Nutzlose WLAN-Zugangspunkte entfernen. |
signalStrength |
number (double ) |
Die aktuelle Signalstärke, gemessen in dBm. | Bei WLAN-Zugangspunkten liegen die dBm-Werte in der Regel bei -35 oder darunter und reichen von -128 bis -10 dBm.
Achten Sie darauf, das Minuszeichen anzugeben. Bei Werten über -10 dBm gibt die API NOT FOUND zurück. |
age |
number (uint32 ) |
Die Anzahl Millisekunden, seit dieser Zugriffspunkt gefunden wurde. | |
channel |
number (uint32 ) |
Der Kanal, über den der Client mit dem Zugriffspunkt kommuniziert. | |
signalToNoiseRatio |
number (double ) |
Das aktuelle Signal-Rausch-Verhältnis in dB. |
Im Folgenden finden Sie ein Beispiel für ein WiFi-Zugriffspunktobjekt.
{ "macAddress": "f0:d5:bf:fd:12:ae", "signalStrength": -43, "signalToNoiseRatio": 0, "channel": 11, "age": 0 }
Beispielanforderungen
Wenn Sie die Geolocation API mit Beispieldaten testen möchten, speichern Sie den folgenden JSON-Code in einer Datei:
{ "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 } ] }
Anschließend können Sie cURL verwenden, um Ihre Anfrage über die Befehlszeile zu stellen:
$ curl -d @your_filename.json -H "Content-Type: application/json" -i "https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY"
Die Antwort für die vorherigen MAC-Adressen sieht so aus:
{ "location": { "lat": 37.4241173, "lng": -122.0915717 }, "accuracy": 20 }
Nicht verwendete WLAN-Zugangspunkte entfernen
Wenn Sie WLAN-Zugangspunktobjekte mit macAddress
entfernen, die lokal verwaltet werden, kann sich die Erfolgsrate von Geolocation API-Aufrufen verbessern, bei denen WLAN als Eingabe verwendet wird.
Wenn nach dem Filtern festgestellt werden kann, dass ein Geolocation API-Aufruf nicht erfolgreich wäre, können Maßnahmen wie die Verwendung älterer Standortsignale oder WLAN-APs mit schwächeren Signalen ergriffen werden. Dieser Ansatz ist ein Kompromiss zwischen dem Bedarf Ihrer Anwendung an einer Standortschätzung und den Anforderungen an Genauigkeit und Recall. Die folgenden Filtertechniken zeigen, wie die Eingaben gefiltert werden, aber nicht die Maßnahmen, die Sie als Anwendungsentwickler ergreifen können.
Lokal verwaltete MAC-Adressen sind keine nützlichen Standortsignale für die API und werden in Anfragen ignoriert. Sie können solche MAC-Adressen entfernen, indem Sie dafür sorgen, dass das zweitniedrigstwertige Bit des höchstwertigen Byte von macAddress
0
ist, z.B. das 2
in 02:00:00:00:00:00
dargestellt wird. Die Broadcast-MAC-Adresse (FF:FF:FF:FF:FF:FF
) ist ein Beispiel für eine MAC-Adresse, die durch diesen Filter sinnvoll ausgeschlossen werden könnte.
Der Bereich der MAC-Adressen zwischen 00:00:5E:00:00:00
und 00:00:5E:FF:FF:FF
ist für die IANA reserviert und wird häufig für Netzwerkverwaltungs- und Multicastfunktionen verwendet, was ihre Verwendung als Standortsignal ausschließt. Sie sollten diese MAC-Adressen auch aus den Eingaben für die API entfernen.
Beispiel: Nutzbare MAC-Adressen für die Standortbestimmung können aus einem Array von macAddress
-Strings mit dem Namen macs
abgerufen werden:
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');
Wenn Sie diesen Filter verwenden, verbleiben nur 1c:34:56:78:9a:bc
in der Liste. Da diese Liste weniger als zwei WLAN-MAC-Adressen enthält, wäre die Anfrage nicht erfolgreich und es würde eine HTTP-Antwort 404(notFound
) zurückgegeben.
Geocoding-Antworten
Bei einer erfolgreichen Geolocation-Anfrage wird eine Antwort im JSON-Format zurückgegeben, in der ein Ort und ein Radius definiert sind.
location
: Die geschätzten Breiten- und Längengradkoordinaten des Nutzers in Grad. Enthält einlat
- und einlng
-Unterfeld.accuracy
: Die Genauigkeit des geschätzten Standorts in Metern. Dies entspricht dem Radius eines Kreises um die angegebenelocation
.
{ "location": { "lat": 37.421875199999995, "lng": -122.0851173 }, "accuracy": 120 }