Jeg søker en løsning som gjør det mulig for meg å adressere geokoding i Excel ved hjelp av Google Maps Geocode API.

I utgangspunktet er oppgaven mulig via Google Sheets, som det er blitt diskutert på Hvordan geokode et Google-regneark?

og forklart 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 gjøre det for deg opptil 1000 poster daglig. Det viktigste som er vanskelig, er at det fungerer noe på en ekstern plattform, som Google-regnearket er, og når som helst krever overføring til Excel-regnearket.

Jeg vil gjerne ha det rett i Excel. Dessverre, på grunn av retningslinjene for Google Maps, er geokoding API ikke gratis lenger ( selv for den lille mengden spørsmål ).

Retningslinjene ble endret sommeren 2018, men jeg ser noe på nettet, som kan være nyttig for å omgå dette problemet, selv uten involvering av VBA-makroer.

I henhold til tråden nedenfor:

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

dette problemet kan løses opptil 2500 poster per dag , når vi:

  1. opprett API-nøkkelen vår

  2. begrens den til alternativet Geocode API

  3. Lim inn i Excel-formelen, som ser ut 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 oversettes til eksemplet mitt (med min egen Geocode API-nøkkel), ser det slik ut:

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

Dessverre fungerer det ikke, når jeg får strengen slik:

FORESPØRSEL_DENIERT < error_message > Dette API-prosjektet er ikke autorisert til å bruke dette API-et. < / error_message >

Jeg skjønt, at det betyr at min nyopprettede API ikke er aktivert. Jeg gikk hit og gjorde det.

Det hjalp ikke også. Så betyr det at det ikke er noe alternativ for gratis geokoding i Google? Kan noen avklare hvem som har opplevd dette problemet eller var villig til å gjøre litt geokoding via Google Maps?

skriv inn bildebeskrivelse her

Kommentarer

  • Hvor mange geokoder totalt har du? Noen som Google Maps API vil bare la deg geokode hvis du viser det på et google-kart og ikke lagrer det i en fil eller database.
  • i utgangspunktet to postnummer. I følge Reddit-tråden ' s mulig via WEBSERVICE-funksjonen
  • MapQuest fungerer fremdeles developer.mapquest.com/documentation/samples/geocoding/v1/…
  • Jeg setter pris på det, men målet mitt er å gjøre geokodingen rett fra Excel-arket når det er mulig. Jeg vet om Nominatim og Bing Apis, hvordan r Jeg vil ha en avklaring angående Google Maps Api. Jeg visste at det ' betales, til jeg fant dette hintet på Reddit som utløste meg.

Svar

Ved å bruke Python-pakken GeoPy kan du geokode ved hjelp av Google Maps v3 API. https://geopy.readthedocs.io/en/stable/#googlev3

Ifølge https://developers.google.com/maps/documentation/geocoding/usage-and-billing , ser det ut til at det ikke lenger er et gratis nivå.

«Påminnelse: Til bruk Geocoding API, du må inkludere en API-nøkkel med alle API-forespørsler, og du må aktivere fakturering på hvert av prosjektene dine. «

Når det er sagt, Jeg har brukt denne pakken med andre geokoderalternativer som Nominatim og ArcGIS med hell.

Koden nedenfor kan brukes til å geokode adresser i hver rad i en kolonne for hvert ark i et Excel-regneark, og skrive hver utgang til en ny kolonne. Jeg har satt den opp for å geokode et «by, stat» -par og skrive ut lengde og lengde 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() 

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *