Szukam rozwiązania umożliwiającego geokodowanie adresów w Excelu przy użyciu Google Maps Geocode API.

Zasadniczo zadanie jest możliwe za pośrednictwem Arkuszy Google, tak jak zostało to omówione w Jak geokodować arkusz kalkulacyjny Google?

i wyjaśniono szczegółowo tutaj:

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

Arkusze Google mają dobra wtyczka – Awesome Table, która może zrobić dla Ciebie do 1000 rekordów dziennie. Główną niezręczną rzeczą jest to, że działa trochę na zewnętrznej platformie, którą jest arkusz kalkulacyjny Google i zawsze wymaga przeniesienia do naszego arkusza Excela.

Chciałbym mieć bezpośrednio w Excelu. Niestety, ze względu na zasady Map Google, interfejs API geokodowania nie jest już darmowy ( nawet dla niewielkiej ilości zapytań ).

Polityka uległa zmianie latem 2018 roku, jednak dostrzegam w sieci coś, co mogłoby pomóc w obejściu tego problemu, nawet bez użycia makr VBA.

Zgodnie z wątkiem poniżej:

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

ten problem można rozwiązać do 2500 rekordów dziennie , gdy:

  1. utwórz nasz klucz API

  2. ogranicz go do opcji Geocode API

  3. Wklej do naszej formuły Excela, która wygląda w następujący sposób:

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

Tłumacząc to na mój przykład (z moim własnym kluczem Geocode API) wygląda to następująco:

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

Niestety to nie działa, ponieważ otrzymuję następujący ciąg:

REQUEST_DENIED < error_message > Ten projekt API nie ma uprawnień do korzystania z tego interfejsu API. < / error_message >

Pomyślałem, że oznacza to, że moje nowo utworzone API nie jest włączone. Poszedłem tutaj i zrobiłem to.

To też nie pomogło. Czy to oznacza, że nie ma opcji darmowego geokodowania w Google? Czy ktoś może wyjaśnić, kto napotkał ten problem lub chciał przeprowadzić geokodowanie za pomocą Map Google?

wpisz opis obrazu tutaj

Komentarze

  • Ile masz w sumie geokodów? Niektóre, takie jak Google Maps API, będą pozwalają geokodować, jeśli pokazujesz go na mapie Google i nie przechowujesz go w pliku lub bazie danych.
  • w zasadzie 2 kody pocztowe. Według wątku Reddit to ' jest to możliwe dzięki funkcji WEBSERVICE
  • MapQuest nadal działa developer.mapquest.com/documentation/samples/geocoding/v1/…
  • Doceniam to, ale moim celem jest zrobienie geokodowania prosto z arkusza Excela, gdy tylko jest to możliwe. Wiem o Nominatim i Bing Apis, ale r Chcę uzyskać wyjaśnienia dotyczące interfejsu API Map Google. Wiedziałem, że ' jest płatne, dopóki nie znalazłem tej wskazówki na Reddicie, która mnie zaskoczyła.

Odpowiedź

Korzystając z pakietu GeoPy w języku Python, możesz geokodować za pomocą Google Maps v3 API. https://geopy.readthedocs.io/en/stable/#googlev3

Zgodnie z https://developers.google.com/maps/documentation/geocoding/usage-and-billing , wygląda na to, że nie ma już bezpłatnej warstwy.

„Przypomnienie: Aby korzystać z API Geocoding, musisz dołączyć klucz API do wszystkich żądań API i musisz włączyć rozliczanie dla każdego ze swoich projektów. „

To powiedziawszy, Z powodzeniem korzystałem z tego pakietu z innymi opcjami geokodera, takimi jak Nominatim i ArcGIS.

Poniższy kod może być użyty do geokodowania adresów w każdym wierszu kolumny dla każdego arkusza w arkuszu kalkulacyjnym Excel i zapisania każdego wyniku w nowej kolumnie. Ustawiłem go tak, aby geokodował parę „miasto, stan” i zapisywał szerokość i długość w poszczególnych kolumnach.

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

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *