Jag söker en lösning som gör det möjligt för mig att adressera geokodning i Excel med Google Maps Geocode API.

I grund och botten är uppgiften möjlig via Google Sheets, som har diskuterats på Hur geokodar du ett Google-kalkylark?

och förklaras i detaljer här:

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

Google Sheets har ett bra plugin – Awesome Table, som kan göra det åt dig upp till 1000 poster dagligen. Det viktigaste besvärliga är att det fungerar något på en extern plattform, vilket Google-kalkylbladet är och när som helst kräver överföring till vårt Excel-kalkylblad.

Jag skulle vilja ha mig direkt i Excel. Tyvärr, på grund av Google Maps policy, är geokodning API inte gratis längre ( även för den lilla mängden frågor ).

Policyen ändrades sommaren 2018, men jag upptäcker något på webben, som kan vara till hjälp för att komma runt detta problem, även utan VBA-makron involvering.

Enligt tråden nedan:

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

det här problemet kan lösas upp till 2500 poster per dag , när vi:

  1. skapa vår API-nyckel

  2. begränsa den till alternativet Geocode API

  3. Klistra in i vår Excel-formel, som ser ut enligt följande:

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

Att översätta det till mitt exempel (med min egen Geocode API-nyckel) ser det ut så här:

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

Tyvärr fungerar det inte, när jag får strängen så här:

REQUEST_DENIED < error_message > Detta API-projekt är inte auktoriserat att använda detta API. < / error_message >

Jag men att det betyder att mitt nyskapade API inte är aktiverat. Jag gick hit och gjorde det.

Det hjälpte inte heller. Så betyder det att det inte finns något alternativ för gratis geokodning i Google? Kan någon klargöra vem som stötte på detta problem eller var villig att göra geokodning via Google Maps?

ange bildbeskrivning här

Kommentarer

  • Hur många geokoder har du totalt? Några som Google Maps API kommer bara låta dig geokoda om du visar den på en google-karta och inte lagrar den i en fil eller databas.
  • i grund och botten två postnummer. Enligt Reddit-tråden ' s möjligt via WEBSERVICE-funktionen
  • MapQuest fungerar fortfarande developer.mapquest.com/documentation/samples/geocoding/v1/…
  • Jag uppskattar det, men mitt mål är att göra geokodningen direkt från excelbladet när det är möjligt. Jag vet om Nominatim och Bing Apis, hur r Jag vill ha klargöranden angående Google Maps Api. Jag visste att det ' skulle betalas tills jag hittade den här ledtråden på Reddit som utlöste mig.

Svar

Med hjälp av Python-paketet GeoPy kan du geokodning med Google Maps v3 API. https://geopy.readthedocs.io/en/stable/#googlev3

Enligt https://developers.google.com/maps/documentation/geocoding/usage-and-billing , det verkar som att det inte längre finns ett gratis nivå.

”Påminnelse: Till använd Geocoding API, du måste inkludera en API-nyckel med alla API-förfrågningar och du måste aktivera fakturering för vart och ett av dina projekt. ”

Med detta sagt, Jag har använt detta paket med andra geokodaralternativ som Nominatim och ArcGIS framgångsrikt.

Koden nedan kan användas för att geokodning av adresser i varje rad i en kolumn för varje ark i ett Excel-kalkylblad och skriva varje utdata till en ny kolumn. Jag har det inställt på att geokodning av ett ”stad, stat” -par och skriva ut lat och lång till enskilda kolumner.

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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *