Estou procurando uma solução que me permita fazer geocodificação de endereços no Excel usando a API de geocodificação do Google Maps.

Basicamente, a tarefa é possível por meio do Planilhas Google, como foi discutido em Como geocodificar uma planilha do Google?

e explicado em detalhes aqui:

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

O Planilhas Google tem um bom plugin – Awesome Table, que pode fazer isso por você até 1000 registros diários. O mais estranho é que ele funciona um pouco em uma plataforma externa, o que é o Google Spreadsheet e a qualquer momento requer a transferência para nossa planilha Excel.

Eu gostaria de ter direto no Excel. Infelizmente, devido à política do Google Maps, a API de geocodificação não é mais gratuita ( mesmo para uma pequena quantidade de consultas ).

A política mudou no verão de 2018, no entanto, descobri algo na web que pode ser útil para contornar esse problema, mesmo sem o envolvimento de macros VBA.

De acordo com o tópico abaixo:

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

este problema pode ser resolvido até 2.500 registros por dia , quando nós:

  1. crie nossa chave de API

  2. restrinja-a à opção Geocode API

  3. Cole em nossa fórmula do Excel, que parece da seguinte forma:

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

Traduzindo para o meu exemplo (com minha própria chave Geocode API), parece o seguinte:

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

Infelizmente, não funciona, pois estou recebendo a string como esta:

REQUEST_DENIED < error_message > Este projeto de API não está autorizado a usar esta API. < / error_message >

Eu pensei que isso significa que minha API recém-criada não está habilitada. Fui aqui e fiz.

Não ajudou também. Isso significa que não há opção para geocodificação gratuita no Google? Alguém pode esclarecer quem encontrou esse problema ou estava disposto a fazer geocodificação por meio do Google Maps?

digite descrição da imagem aqui

Comentários

  • Quantos geocódigos no total você tem? Alguns, como a API do Google Maps, só permitem geocodificar se você está mostrando em um mapa do Google e não armazenando em um arquivo ou banco de dados.
  • basicamente 2 códigos postais. De acordo com o tópico do Reddit, ' é viável por meio da função WEBSERVICE
  • MapQuest ainda funciona developer.mapquest.com/documentation/samples/geocoding/v1/…
  • Agradeço, mas meu objetivo é fazer a geocodificação direto da planilha do Excel quando possível. Eu sei sobre Nominatim e Bing Apis, no entanto r Desejo o esclarecimento sobre a API do Google Maps. Eu sabia que era ' pagável, até que encontrei esta dica no Reddit que me enganou.

Resposta

Usando o pacote Python GeoPy, você pode geocodificar usando a API do Google Maps v3. https://geopy.readthedocs.io/en/stable/#googlev3

De acordo com https://developers.google.com/maps/documentation/geocoding/usage-and-billing , parece que não há mais uma camada gratuita.

“Lembrete: para usar a API de geocodificação, você deve incluir uma chave de API com todas as solicitações de API e deve habilitar o faturamento em cada um de seus projetos. “

Dito isso, Usei este pacote com outras opções de geocodificador, como Nominatim e ArcGIS, com sucesso.

O código abaixo pode ser usado para geocodificar endereços em cada linha de uma coluna para cada folha em uma planilha do Excel e escrever cada saída em uma nova coluna. Eu configurei para geocodificar um par de “cidade, estado” e escrever latitude e longitude em colunas individuais.

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

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *