Olyan megoldást keresek, amely lehetővé teszi számomra, hogy címk geokódolást végezzek az Excel programban a Google Maps Geocode API használatával.
Alapvetően a feladat a Google Táblázatokon keresztül lehetséges, amint arról a cikkben is szó esett. Hogyan kell geokódolni a Google SpreadSheet-et?
és elmagyarázta itt részletesen:
http://www.mkrgeo-blog.com/the-costless-way-to-geocoding-addresses-in-excel/
A Google Táblázatok egy jó plugin – Félelmetes táblázat, amely akár napi 1000 rekordot is képes megtenni. A legfőbb kényelmetlen dolog az, hogy valamennyire működik egy külső platformon, amely a Google Spreadsheet, és bármikor megköveteli az áttelepítést az Excel munkalapunkra.
Szeretném, ha egyenesen az Excel programban lennék. Sajnos a Google Maps irányelvei miatt a geokódoló API már nem ingyenes ( még kis mennyiségű lekérdezések ).
A házirend 2018 nyarán megváltozott, azonban észreveszek valamit az interneten, ami hasznos lehet a probléma kiküszöbölése érdekében, még a VBA makrók bevonása nélkül is.
Az alábbi szál szerint:
https://www.reddit.com/r/excel/comments/a2r3aq/converting_addresses_to_lat_and_long/eb0mkys/
ez a probléma megoldható akár 2500 rekord naponta , amikor:
-
hozza létre API kulcsunkat
-
korlátozza Geocode API beállításra
-
Illessze be Excel képletünkbe, amely úgy néz ki az alábbiak szerint:
= WEBSZOLGÁLTATÁS (" https://maps.googleapis.com/maps/api/directions/xml?key=PUTYOUROWNAPIKEYHERE&origin="&SUBSTITUTE (A1, " ", "% 20 ") & " destination = " & PÓT (A2, " ", "% 20 ")
A példámra lefordítva (saját Geocode API-kulccsal) a következőképpen néz ki:
=WEBSERVICE("https://maps.googleapis.com/maps/api/directions/xml?key=AIzaSyCiAhXX59p2G2PworpQeu8ADcqIo0s8h8A&origin="&SUBSTITUTE(Z18," ","%20")&"&destination="&SUBSTITUTE(Z19," ","%20"))
Sajnos nem működik, amint a következő karakterláncot kapom:
REQUEST_DENIED < error_message > Ez az API-projekt nincs engedélyezve ennek az API-nak a használatára. / div>
Bár azt jelenti, hogy az újonnan létrehozott API-m nincs engedélyezve. ide mentem és megcsináltam.
Ez sem segített. Tehát azt jelenti-e, hogy nincs lehetőség ingyenes geokódolásra a Google-ban? Tudna valaki tisztázni, ki találkozott ezzel a problémával, vagy hajlandó volt-e geokódolni a Google Maps segítségével?
Megjegyzések
- Hány geokódod van összesen? Néhányan, mint például a Google Maps API, csak lehetővé teszi a geokódolást, ha megmutatja a Google térképen, és nem tárolja fájlban vagy adatbázisban.
- alapvetően 2 irányítószám. A Reddit szál szerint ' s a WEBSERVICE függvény segítségével megvalósítható
- A MapQuest még mindig működik developer.mapquest.com/documentation/samples/geocoding/v1/…
- Nagyra értékelem, de célom az, hogy a geokódolást, ha lehetséges, egyenesen az excel lapról készítsem. Tudok a Nominatimról és a Bing Apis-ról, hogyan r Szeretném tisztázni a Google Maps Api-t. Tudtam, hogy ' fizetendő, amíg meg nem találtam ezt a tippet a Reddit-en, ami kibuktatott.
Válasz
A GeoPy Python csomag használatával geokódolhat a Google Maps v3 API használatával. https://geopy.readthedocs.io/en/stable/#googlev3
A https://developers.google.com/maps/documentation/geocoding/usage-and-billing , úgy tűnik, hogy már nincs szabad szint.
“Emlékeztető: használja a Geocoding API-t, minden API-kéréshez hozzá kell adnia egy API-kulcsot, és engedélyeznie kell a számlázást minden projektjén. “
Ennek ellenére, Ezt a csomagot más geocoder opciókkal, például a Nominatim és az ArcGIS programmal is sikeresen használtam.
Az alábbi kód felhasználható az excel táblázat minden egyes oszlopának oszlopainak minden sorában található címek geokódolására, és az egyes kimenetek új oszlopba írására. Úgy állítottam be, hogy geokódoljon egy “város, állam” párost, és kiírja a hosszú és hosszú oszlopokat.
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()