Jeg søger en løsning, der giver mig mulighed for at adressere geokodning i Excel ved hjælp af Google Maps Geocode API.

Grundlæggende er opgaven mulig via Google Sheets, som det er blevet diskuteret på Sådan geokodes et Google SpreadSheet?

og forklares i detaljer her:

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

Google Sheets har et godt plugin – Awesome Table, som kan gøre det for dig op til 1000 poster dagligt. Den største akavede ting er, at det fungerer noget på en ekstern platform, som Google-regnearket er, og når som helst kræver overførsel til vores Excel-regneark.

Jeg vil gerne have jeg lige i Excel. Desværre er geokodning API ikke gratis længere på grund af Google Maps-politik ( selv for den lille mængde forespørgsler ).

Politikken blev ændret i sommeren 2018, men jeg ser noget på nettet, der kan være nyttigt at omgå dette problem, selv uden VBA-makroer involvering.

I henhold til nedenstående tråd:

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

dette problem kan løses op til 2500 poster om dagen , når vi:

  1. opret vores API-nøgle

  2. begræns den til Geocode API-indstilling

  3. Indsæt i vores Excel-formel, som ser ud som følger:

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

Når det oversættes til mit eksempel (med min egen Geocode API-nøgle), ser det ud som følger:

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

Desværre fungerer det ikke, da jeg får strengen sådan:

REQUEST_DENIED < error_message > Dette API-projekt er ikke autoriseret til at bruge dette API. < / error_message >

Jeg dog, at det betyder, at min nyoprettede API ikke er aktiveret. Jeg gik her og gjorde det.

Det hjalp heller ikke. Så betyder det, at der ikke er nogen mulighed for gratis geokodning i Google? Kan nogen afklare, hvem der stødte på dette problem eller var villig til at foretage geokodning via Google Maps?

indtast billedbeskrivelse her

Kommentarer

  • Hvor mange geokoder har du i alt? Nogle som Google Maps API vil kun lad dig geokode, hvis du viser det på et google-kort og ikke gemmer det i en fil eller database.
  • dybest set 2 postnumre. Ifølge Reddit-tråden ' s muligt via WEBSERVICE-funktionen
  • MapQuest fungerer stadig developer.mapquest.com/documentation/samples/geocoding/v1/…
  • Jeg sætter pris på det, men mit mål er at gøre geokodningen direkte fra Excel-arket, når det er muligt. Jeg kender til Nominatim og Bing Apis, hvordan r Jeg ønsker afklaring vedrørende Google Maps Api. Jeg vidste, at det ' betales, indtil jeg fandt dette tip på Reddit, der udløste mig.

Svar

Ved hjælp af Python-pakken GeoPy kan du geokode ved hjælp af Google Maps v3 API. https://geopy.readthedocs.io/en/stable/#googlev3

I henhold til https://developers.google.com/maps/documentation/geocoding/usage-and-billing ser det ud til, at der ikke længere er et gratis niveau.

“Påmindelse: Til brug Geocoding API, du skal medtage en API-nøgle med alle API-anmodninger, og du skal aktivere fakturering på hvert af dine projekter. “

Når det er sagt, Jeg har brugt denne pakke med andre geocoder-indstillinger som Nominatim og ArcGIS med succes.

Koden nedenfor kan bruges til at geokode adresser i hver række i en kolonne for hvert ark i et excel-regneark og skrive hvert output til en ny kolonne. Jeg har sat det op til at geokode et “by, stat” -par og skrive lat og lang til individuelle kolonner.

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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *