Google Maps Geocode API를 사용하여 Excel에서 주소 지오 코딩을 수행 할 수있는 솔루션을 찾고 있습니다.
기본적으로 작업은 Google 스프레드 시트를 지오 코딩하는 방법
에서 논의 된 것처럼 Google 스프레드 시트를 통해 가능합니다. 자세한 내용은 여기를 참조하세요.
http://www.mkrgeo-blog.com/the-costless-way-to-geocoding-addresses-in-excel/
Google 스프레드 시트에는 좋은 플러그인-Awesome Table, 매일 최대 1000 개의 레코드를 수행 할 수 있습니다. 가장 어색한 점은 Google 스프레드 시트가 있고 언제든지 Excel 워크 시트로 전송해야하는 외부 플랫폼에서 어느 정도 작동한다는 것입니다.
Excel에서 바로 사용하고 싶습니다. 안타깝게도 Google지도 정책으로 인해 지오 코딩 API는 더 이상 무료가 아닙니다 ( 검색어 ).
2018 년 여름에 정책이 변경되었지만 웹에서 VBA 매크로를 사용하지 않아도이 문제를 해결하는 데 도움이 될 수있는 무언가를 발견했습니다.
아래 스레드에 따르면 :
https://www.reddit.com/r/excel/comments/a2r3aq/converting_addresses_to_lat_and_long/eb0mkys/
이 문제는 다음과 같은 경우 하루에 최대 2500 개의 레코드 를 해결할 수 있습니다.
-
API 키 생성
-
Geocode API 옵션으로 제한
-
Excel 수식에 붙여 넣으면 다음과 같습니다.
= WEBSERVICE (" https://maps.googleapis.com/maps/api/directions/xml?key=PUTYOUROWNAPIKEYHERE&origin="&SUBSTITUTE (A1, " ", " % 20 ") & " destination = " & SUBSTITUTE (A2, " ", " % 20 "))
내 예제 (내 고유 Geocode API 키 사용)로 번역하면 다음과 같습니다.
=WEBSERVICE("https://maps.googleapis.com/maps/api/directions/xml?key=AIzaSyCiAhXX59p2G2PworpQeu8ADcqIo0s8h8A&origin="&SUBSTITUTE(Z18," ","%20")&"&destination="&SUBSTITUTE(Z19," ","%20"))
안타깝게도 작동하지 않습니다. 다음과 같은 문자열이 표시됩니다.
REQUEST_DENIED < error_message >이 API 프로젝트는이 API를 사용할 권한이 없습니다. < / error_message >
그래도 새로 생성 된 API가 활성화되지 않았 음을 의미합니다. 저는 여기 에 가서 해냈습니다.
도움이되지 않았습니다. 무료 지오 코딩 옵션이 없다는 뜻이기도합니다. 누구든지이 문제가 발생했거나 Google지도를 통해 지오 코딩을 수행 할 의향이 있는지 명확히 할 수 있습니까?
댓글
- 총 지오 코드가 몇 개 있습니까? Google Maps API와 같은 일부는 Google지도에 표시하고 파일이나 데이터베이스에 저장하지 않는 경우 지오 코딩 할 수 있습니다.
- 기본적으로 2 개의 우편 번호입니다. Reddit 스레드에 따르면 ' WEBSERVICE 기능을 통해 실행 가능
- MapQuest는 계속 작동합니다. developer.mapquest.com/documentation/samples/geocoding/v1/ …
- 감사합니다.하지만 제 목표는 가능한 경우 Excel 시트에서 바로 지오 코딩을 만드는 것입니다. Nominatim과 Bing Apis에 대해 알고 있습니다. r Google Maps API에 대한 설명을 원합니다. Reddit에서이 힌트를 찾을 때까지 ' 지불 할 수 있다는 것을 알고있었습니다.
답변
Python 패키지 GeoPy를 사용하면 Google Maps v3 API를 사용하여 지오 코딩 할 수 있습니다. https://geopy.readthedocs.io/en/stable/#googlev3
https://developers.google.com/maps/documentation/geocoding/usage-and-billing , 더 이상 무료 등급이없는 것 같습니다.
“알림 :받는 사람 Geocoding API를 사용하려면 모든 API 요청에 API 키를 포함해야하며 각 프로젝트에서 결제를 활성화해야합니다. “
즉, 이 패키지를 Nominatim 및 ArcGIS와 같은 다른 지오 코더 옵션과 함께 성공적으로 사용했습니다.
아래 코드를 사용하여 Excel 스프레드 시트의 각 시트에 대한 열의 각 행에있는 주소를 지오 코딩하고 각 출력을 새 열에 쓸 수 있습니다. “도시, 주”쌍을 지오 코딩하고 개별 열에 위도 및 경도를 작성하도록 설정했습니다.
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()