Hledám řešení, které mi umožní provádět geokódování adres v Excelu pomocí Google Maps Geocode API.

Úloha je v zásadě možná prostřednictvím tabulek Google, jak bylo popsáno na stránce Jak geokódovat tabulku Google SpreadSheet?

a vysvětleno podrobně zde:

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

Tabulky Google mají dobrý plugin – Awesome Table, který za vás zvládne až 1000 záznamů denně. Hlavní nepříjemnou věcí je, že to tak trochu funguje na externí platformě, kterou je tabulka Google, a kdykoli vyžaduje převod do našeho excelového listu.

Chtěl bych mít I přímo v Excelu. Kvůli zásadám Map Google bohužel rozhraní geokódování API již není zdarma ( i pro malé množství dotazy ).

Zásady se změnily v létě 2018, nicméně na webu vidím něco, co by mohlo pomoci tento problém obejít, a to i bez zapojení maker VBA.

Podle vlákna níže:

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

ento problém lze vyřešit až 2 500 záznamů denně , když:

  1. vytvořit náš klíč API

  2. omezit jej na možnost API Geocode

  3. vložit do našeho vzorce Excel, který vypadá takto:

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

Překlad do mého příkladu (pomocí mého vlastního klíče API Geocode) vypadá následovně:

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

Bohužel to nefunguje, protože dostávám řetězec takto:

REQUEST_DENIED < error_message > Tento projekt API nemá oprávnění k používání tohoto API. < / error_message >

I když to znamená, že moje nově vytvořené API není povoleno. Šel jsem sem a udělal to.

Nepomohlo ani to. Znamená to tedy, že neexistuje možnost volného geokódování v Google? Může někdo objasnit, kdo narazil na tento problém nebo byl ochoten provést geokódování prostřednictvím Map Google?

vstoupit popis obrázku zde

Komentáře

  • Kolik geokódů celkem máte? Někteří jako Google Maps API budou pouze umožní vám geokódovat, pokud ho zobrazujete na mapě Google a neukládáte jej do souboru nebo databáze.
  • v zásadě 2 poštovní směrovací čísla. Podle vlákna Reddit to ' je možné prostřednictvím funkce WEBSERVICE
  • MapQuest stále funguje developer.mapquest.com/documentation/samples/geocoding/v1/…
  • Oceňuji to, nicméně mým cílem je vytvořit geokódování přímo z listu aplikace Excel, pokud je to možné. Vím o Nominatim a Bing Apis, jak r Chci vysvětlení týkající se rozhraní API služby Mapy Google. Věděl jsem, že je to ' splatné, dokud jsem nenašel tuto narážku na Reddit, která mě podrazila.

Odpověď

Pomocí balíčku Python GeoPy můžete geokódovat pomocí Google Maps v3 API. https://geopy.readthedocs.io/en/stable/#googlev3

Podle https://developers.google.com/maps/documentation/geocoding/usage-and-billing se zdá, že již není bezplatná vrstva.

„Připomenutí: Komu použijte Geocoding API, musíte zahrnout klíč API se všemi požadavky API a musíte povolit fakturaci pro každý ze svých projektů. „

To je řečeno, Tento balíček jsem úspěšně použil s dalšími možnostmi geokodéru, jako jsou Nominatim a ArcGIS.

Níže uvedený kód lze použít ke geokódování adres v každém řádku sloupce pro každý list v tabulce aplikace Excel a k zápisu každého výstupu do nového sloupce. Mám to nastaveno tak, aby geokódovalo pár „město, stát“ a vypisovalo lat a long do jednotlivých sloupců.

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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *