Je recherche une solution me permettant de faire du géocodage dadresse dans Excel à laide de lAPI Google Maps Geocode.
Fondamentalement, la tâche est possible via Google Sheets, comme cela a été discuté à Comment géocoder une feuille de calcul Google?
et expliqué en détails ici:
http://www.mkrgeo-blog.com/the-costless-way-to-geocoding-addresses-in-excel/
Les feuilles de calcul Google ont un bon plugin – Awesome Table, qui peut le faire pour vous jusquà 1000 enregistrements par jour. Le principal inconvénient est que cela fonctionne un peu sur une plate-forme externe, ce que la feuille de calcul Google est et nécessite à tout moment le transfert vers notre feuille de calcul Excel.
Je voudrais avoir directement dans Excel. Malheureusement, en raison de la politique de Google Maps, lAPI de géocodage nest plus gratuite ( même pour la petite quantité de requêtes ).
La politique a changé à lété 2018, mais jai repéré quelque chose sur le Web, qui pourrait être utile pour contourner ce problème, même sans limplication des macros VBA.
Selon le fil de discussion ci-dessous:
https://www.reddit.com/r/excel/comments/a2r3aq/converting_addresses_to_lat_and_long/eb0mkys/
ce problème peut être résolu jusquà 2500 enregistrements par jour , lorsque nous:
-
créez notre clé API
-
limitez-la à loption de géocodage de lAPI
-
Collez dans notre formule Excel, qui ressemble comme suit:
= WEBSERVICE (" https://maps.googleapis.com/maps/api/directions/xml?key=PUTYOUROWNAPIKEYHERE&origin="&SUBSTITUTE (A1, " ", "% 20 ") & " destination = " & SUBSTITUTE (A2, " ", "% 20 "))
En le traduisant dans mon exemple (avec ma propre clé API Geocode), il ressemble à ceci:
=WEBSERVICE("https://maps.googleapis.com/maps/api/directions/xml?key=AIzaSyCiAhXX59p2G2PworpQeu8ADcqIo0s8h8A&origin="&SUBSTITUTE(Z18," ","%20")&"&destination="&SUBSTITUTE(Z19," ","%20"))
Malheureusement, cela ne fonctionne pas, car jobtiens la chaîne comme ceci:
REQUEST_DENIED < error_message > Ce projet dAPI nest pas autorisé à utiliser cette API. < / error_message >
Je pense que cela signifie que mon API nouvellement créée nest pas activée. Je suis allé ici et je lai fait.
Cela na pas non plus aidé. Cela signifie donc quil ny a pas doption de géocodage gratuit dans Google? Quelquun peut-il préciser, qui a rencontré ce problème ou était prêt à faire du géocodage via Google Maps?
Commentaires
- Combien de géocodes au total disposez-vous? Certains comme lAPI Google Maps vous permet de géocoder si vous laffichez sur une carte google et ne le stockez pas dans un fichier ou une base de données.
- essentiellement 2 codes postaux. Selon le fil Reddit, ' s réalisable via la fonction WEBSERVICE
- MapQuest fonctionne toujours developer.mapquest.com/documentation/samples/geocoding/v1/…
- Je lapprécie, mais mon objectif est de faire le géocodage directement à partir de la feuille Excel lorsque cela est possible. Je connais Nominatim et Bing Apis, cependant r Je souhaite obtenir des éclaircissements concernant lAPI Google Maps. Je savais que cela ' est payable, jusquà ce que je trouve cet indice sur Reddit qui ma fait trébucher.
Réponse
En utilisant le package Python GeoPy, vous pouvez géocoder à laide de lAPI Google Maps v3. https://geopy.readthedocs.io/en/stable/#googlev3
Selon https://developers.google.com/maps/documentation/geocoding/usage-and-billing , il semble quil ny ait plus de version gratuite.
« Rappel: à utilisez lAPI Geocoding, vous devez inclure une clé API avec toutes les requêtes API et vous devez activer la facturation sur chacun de vos projets. «
Cela étant dit, Jai utilisé ce package avec dautres options de géocodeur telles que Nominatim et ArcGIS avec succès.
Le code ci-dessous peut être utilisé pour géocoder les adresses dans chaque ligne dune colonne pour chaque feuille dans une feuille de calcul Excel, et écrire chaque sortie dans une nouvelle colonne. Je lai configuré pour géocoder une paire «ville, état» et écrire lat et long dans des colonnes individuelles.
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()