Caut o soluție care să-mi permită să realizez geocodarea adreselor în Excel folosind Google Maps Geocode API.

Practic, sarcina este posibilă prin intermediul Foi de calcul Google, așa cum s-a discutat la Cum să geocodificați o foaie de calcul Google?

în detalii aici:

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

Foi de calcul Google un plugin bun – Awesome Table, care îl poate face până la 1000 de înregistrări zilnic. Principalul lucru ciudat este că funcționează oarecum pe o platformă externă, care este foaia de calcul Google și necesită oricând transferul în foaia noastră de lucru Excel.

Aș dori să mă contactez direct în Excel. Din păcate, datorită politicii Google Maps, API-ul de geocodificare nu mai este ( chiar și pentru cantitatea mică de interogări ).

Politica s-a schimbat în vara anului 2018, totuși identific ceva pe web, care ar putea fi util pentru a rezolva această problemă, chiar și fără implicarea macrocomenzilor VBA.

Conform firului de mai jos:

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

această problemă poate fi rezolvată până la 2500 înregistrări pe zi , atunci când:

  1. creați cheia API

  2. restrângeți-o la opțiunea Geocode API

  3. Lipiți în formula noastră Excel, care arată după cum urmează:

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

Traducându-l în exemplul meu (cu propria mea cheie API Geocode) arată după cum urmează:

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

Din păcate, nu funcționează, pe măsură ce primesc șirul astfel:

REQUEST_DENIED < error_message > Acest proiect API nu este autorizat să utilizeze acest API. < / error_message >

Totuși, asta înseamnă că API-ul meu nou creat nu este activat. M-am dus aici și am făcut-o.

Nici nu a ajutat. Deci înseamnă că nu există nicio opțiune pentru geocodificare gratuită în Google? Poate cineva să clarifice cine a întâmpinat această problemă sau a fost dispus să facă o geocodificare prin Google Maps?

introduce descrierea imaginii aici

Comentarii

  • Câte geocoduri aveți în total? Unele ca API-ul Google Maps vor avea doar vă permite să geocodificați dacă îl afișați pe o hartă google și nu îl stocați într-un fișier sau bază de date.
  • practic 2 coduri poștale. Conform firului Reddit ' Este fezabil prin intermediul funcției WEBSERVICE
  • MapQuest funcționează în continuare developer.mapquest.com/documentation/samples/geocoding/v1/…
  • Îl apreciez, cu toate acestea scopul meu este de a face geocodificarea direct din foaia Excel când este posibil. Știu despre Nominatim și Bing Apis, dar r Vreau clarificări cu privire la Google Maps Api. Știam că ' se plătește, până când am găsit acest indiciu pe Reddit care m-a dezamăgit.

Răspuns

Utilizând pachetul Python GeoPy puteți geocoda utilizând Google Maps v3 API. https://geopy.readthedocs.io/en/stable/#googlev3

Conform https://developers.google.com/maps/documentation/geocoding/usage-and-billing , se pare că nu mai există un nivel gratuit.

„Memento: Pentru utilizați API-ul Geocoding, trebuie să includeți o cheie API cu toate cererile API și trebuie să activați facturarea pentru fiecare proiect. „

Acestea fiind spuse, Am folosit acest pachet cu alte opțiuni de geocoder, cum ar fi Nominatim și ArcGIS cu succes.

Codul de mai jos poate fi utilizat pentru a geocoda adrese în fiecare rând al unei coloane pentru fiecare foaie dintr-o foaie de calcul Excel și pentru a scrie fiecare ieșire într-o nouă coloană. L-am configurat pentru a geocoda o pereche „oraș, stat” și a scrie lat și lung în coloane individuale.

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

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *