Ich suche nach einer Lösung, mit der ich die Adress-Geokodierung in Excel mithilfe der Google Maps Geocode-API durchführen kann.
Grundsätzlich ist die Aufgabe über Google Sheets möglich, wie unter Wie wird eine Google-Tabelle geocodiert?
erläutert und erläutert Einzelheiten hier:
http://www.mkrgeo-blog.com/the-costless-way-to-geocoding-addresses-in-excel/
Die Google Sheets haben Ein gutes Plugin – Awesome Table, das täglich bis zu 1000 Datensätze für Sie erledigt. Das größte Problem ist, dass es auf einer externen Plattform funktioniert, wie es die Google-Tabelle ist, und jederzeit die Übertragung in unser Excel-Arbeitsblatt erfordert.
Ich möchte, dass ich direkt in Excel bin. Leider ist die Geokodierungs-API aufgrund der Google Maps-Richtlinie nicht mehr kostenlos (, selbst für die kleine Menge von Abfragen ).
Die Richtlinie wurde im Sommer 2018 geändert. Ich finde jedoch etwas im Web, das hilfreich sein kann, um dieses Problem zu umgehen, auch ohne die Beteiligung der VBA-Makros.
Gemäß dem folgenden Thread:
https://www.reddit.com/r/excel/comments/a2r3aq/converting_addresses_to_lat_and_long/eb0mkys/
Dieses Problem kann gelöst werden bis zu 2500 Datensätze pro Tag , wenn wir:
-
Erstellen Sie unseren API-Schlüssel
-
beschränken Sie ihn auf die Geocode-API-Option
-
Fügen Sie ihn in unsere Excel-Formel ein wie folgt:
= WEBSERVICE (" https://maps.googleapis.com/maps/api/directions/xml?key=PUTYOUROWNAPIKEYHERE&origin="&SUBSTITUTE (A1, " ", "% 20 ") & " destination = " & SUBSTITUT (A2, " ", "% 20 "))
Die Übersetzung in mein Beispiel (mit meinem eigenen Geocode-API-Schlüssel) sieht folgendermaßen aus:
=WEBSERVICE("https://maps.googleapis.com/maps/api/directions/xml?key=AIzaSyCiAhXX59p2G2PworpQeu8ADcqIo0s8h8A&origin="&SUBSTITUTE(Z18," ","%20")&"&destination="&SUBSTITUTE(Z19," ","%20"))
Leider funktioniert es nicht. Wenn ich die Zeichenfolge wie folgt erhalte:
REQUEST_DENIED < error_message > Dieses API-Projekt ist nicht berechtigt, diese API zu verwenden. < / error_message >
Ich denke jedoch, dass meine neu erstellte API nicht aktiviert ist. Ich bin hierher gegangen und habe es getan.
Es hat auch nicht geholfen. Das bedeutet auch, dass es keine Option für kostenlose Geokodierung gibt Kann jemand klären, wer auf dieses Problem gestoßen ist oder bereit war, eine Geokodierung über Google Maps durchzuführen?
Kommentare
- Wie viele Geocodes haben Sie insgesamt? Einige wie Google Maps API werden nur Sie können einen Geocode erstellen, wenn Sie ihn auf einer Google-Karte anzeigen und nicht in einer Datei oder Datenbank speichern.
- im Grunde genommen 2 Postleitzahlen. Laut Reddit-Thread ' Dies ist über die WEBSERVICE-Funktion möglich.
- MapQuest funktioniert weiterhin developer.mapquest.com/documentation/samples/geocoding/v1/…
- Ich weiß das zu schätzen, aber mein Ziel ist es, die Geokodierung nach Möglichkeit direkt aus dem Excel-Blatt zu entfernen. Ich kenne jedoch Nominatim und Bing Apis r Ich möchte die Klarstellung bezüglich der Google Maps-API. Ich wusste, dass es ' zahlbar ist, bis ich diesen Hinweis auf Reddit fand, der mich auslöste.
Antwort
Mit dem Python-Paket GeoPy können Sie mithilfe der Google Maps v3-API Geocodes erstellen. https://geopy.readthedocs.io/en/stable/#googlev3
Gemäß https://developers.google.com/maps/documentation/geocoding/usage-and-billing scheint es keine freie Stufe mehr zu geben.
„Erinnerung: An Wenn Sie die Geokodierungs-API verwenden, müssen Sie allen API-Anforderungen einen API-Schlüssel hinzufügen und die Abrechnung für jedes Ihrer Projekte aktivieren. „
Davon abgesehen, Ich habe dieses Paket mit anderen Geocoder-Optionen wie Nominatim und ArcGIS erfolgreich verwendet.
Der folgende Code kann verwendet werden, um Adressen in jeder Zeile einer Spalte für jedes Blatt in einer Excel-Tabelle zu geocodieren und jede Ausgabe in eine neue Spalte zu schreiben. Ich habe es eingerichtet, um ein „Stadt, Staat“ -Paar zu geocodieren und lat und long in einzelne Spalten zu schreiben.
import pandas as pd from geopy.geocoders import ArcGIS from openpyxl import load_workbook import xlrd from geopy.extra.rate_limiter import RateLimiter geolocator = GoogleV3(api_key, "maps.googleapis.com") #alter min_delay param if getting too many request error. May not need if using ArcGIS geocoder geocode = RateLimiter(geolocator.geocode) #min_delay_seconds=0.5 # Spreadsheet path adr_tble = (r"") #get sheet names sheets = [i for i in xlrd.open_workbook(adr_tble, on_demand = True).sheet_names()] book = load_workbook(adr_tble) writer = pd.ExcelWriter(adr_tble, engine="openpyxl") writer.book = book writer.sheets = dict((ws.title, ws) for ws in book.worksheets) for i in sheets: print("Sheet: " + i + "\n") #read in dataframe df = pd.read_excel(adr_tble, sheet_name = i) #check if city state column exists if "CITY_STATE" in df: # create empty lists list_lat = [] list_long = [] for index, row in df.iterrows(): cityState = row["DUTY_CITY_STATE"] location = geocode(cityState) lat = location.latitude long = location.longitude print(cityState + " = " + str(lat), str(long)) list_lat.append(lat) list_long.append(long) df["lat"] = list_lat df["lon"] = list_long df.to_excel(writer, sheet_name=i) print("\n-----------------------------------------------------------------------------------\n") writer.save() writer.close()