Ik zoek een oplossing waarmee ik adresgeocodering in Excel kan uitvoeren met behulp van de Google Maps Geocode API.

In principe is de taak mogelijk via Google Spreadsheets, zoals is besproken op Hoe een Google-spreadsheet geocoderen?

en uitgelegd in details hier:

http://www.mkrgeo-blog.com/the-costless-way-to-geocoding-addresses-in-excel/

De Google Spreadsheets hebben een goede plug-in – Awesome Table, die het dagelijks tot 1000 records voor je kan doen. Het grootste lastige is dat het enigszins werkt op een extern platform, wat de Google Spreadsheet is, en dat het altijd moet worden overgezet naar ons Excel-werkblad.

Ik zou graag rechtstreeks in Excel willen hebben. Vanwege het beleid van Google Maps is de geocoderings-API niet meer gratis ( zelfs voor de kleine hoeveelheid queries ).

Het beleid is in de zomer van 2018 gewijzigd, maar ik zie iets op internet dat nuttig kan zijn om dit probleem te omzeilen, zelfs zonder de betrokkenheid van de VBA-macros.

Volgens de onderstaande thread:

https://www.reddit.com/r/excel/comments/a2r3aq/converting_addresses_to_lat_and_long/eb0mkys/

dit probleem kan worden opgelost tot 2500 records per dag , wanneer we:

  1. maak onze API-sleutel

  2. beperk deze tot Geocode API-optie

  3. Plak in onze Excel-formule, die eruitziet als volgt:

    = WEBSERVICE (" https://maps.googleapis.com/maps/api/directions/xml?key=PUTYOUROWNAPIKEYHERE&origin="&SUBSTITUTE (A1, " ", "% 20 ") & " bestemming = " & VERVANGING (A2, " ", "% 20 "))

Door het te vertalen naar mijn voorbeeld (met mijn eigen Geocode API-sleutel) ziet het er als volgt uit:

 =WEBSERVICE("https://maps.googleapis.com/maps/api/directions/xml?key=AIzaSyCiAhXX59p2G2PworpQeu8ADcqIo0s8h8A&origin="&SUBSTITUTE(Z18," ","%20")&"&destination="&SUBSTITUTE(Z19," ","%20")) 

Helaas werkt het niet, aangezien ik de string als volgt krijg:

REQUEST_DENIED < error_message > Dit API-project is niet geautoriseerd om deze API te gebruiken. < / error_message >

Ik denk echter dat het betekent dat mijn nieuw gemaakte API niet is ingeschakeld. Ik ging hier en deed het.

Het hielp ook niet. Het betekent dus dat er geen optie is voor gratis geocodering in Google? Kan iemand verduidelijken wie dit probleem heeft ondervonden of bereid was om wat geocodering uit te voeren via Google Maps?

voer afbeelding beschrijving hier

Reacties

  • Hoeveel geocodes heb je in totaal? Sommige zoals Google Maps API zullen alleen laat je geocoderen als je het op een google map laat zien en het niet opslaat in een bestand of database.
  • eigenlijk 2 postcodes. Volgens de Reddit-thread is het ' is mogelijk via de WEBSERVICE-functie
  • MapQuest werkt nog steeds developer.mapquest.com/documentation/samples/geocoding/v1/…
  • Ik waardeer het, maar mijn doel is om de geocodering zo mogelijk rechtstreeks vanuit het Excel-blad te maken. Ik weet over Nominatim en Bing Apis, hoe r Ik wil opheldering over de Google Maps Api. Ik wist dat het ' betaalbaar was, totdat ik deze hint op Reddit vond die me uitschakelde.

Antwoord

Met het Python-pakket GeoPy kun je geocoderen met de Google Maps v3 API. https://geopy.readthedocs.io/en/stable/#googlev3

Volgens https://developers.google.com/maps/documentation/geocoding/usage-and-billing , het lijkt erop dat er geen gratis niveau meer is.

“Herinnering: aan gebruik de Geocoding API, u moet een API-sleutel opnemen bij alle API-verzoeken en u moet facturering inschakelen voor elk van uw projecten. “

Dat gezegd hebbende, Ik heb dit pakket met succes gebruikt met andere geocoderopties zoals Nominatim en ArcGIS.

De onderstaande code kan worden gebruikt om adressen in elke rij van een kolom voor elk blad in een Excel-spreadsheet te geocoderen en elke uitvoer naar een nieuwe kolom te schrijven. Ik heb het ingesteld om een “stad, staat” -paar te geocoderen en lat en long naar individuele kolommen te schrijven.

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() 

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *