Jak zjistit GPS souřadnice podle adresy
S tímto tématem se setkáte na našich kurzech ExcelTown.
Aktuálně: kurzy můžete absolvovat jak online, tak prezenčně.
Tento článek popisuje různé možnosti, jak v Excelu přiřadit k adrese GPS souřadnice.
K čemu by se nám v Excelu mohly hodit GPS souřadnice? Napadají mě minimálně tři velmi praktická použití.
- Výpočet vzdáleností mezi lokalitami
- Tvorba map v Power View (to jde sice i přímo z adres, bez souřadnic, ale souřadnice jsou na rozdíl od adres jednoznačné)
- Tvorba rozklikávacích odkazů s přesměrováním na otevření mapy v prohlížeči.
Pokud tedy máme adresy, a potřebujeme jejich GPS souřadnice, jak můžeme postupovat?
Ručně
První možností je najít adresu na mapách Googlu, Bingu nebo Seznamu, zjistit tam rovnou i souřadnice, a ty přepsat do Excelu. Jednoduchá, ale nepříjemně neautomatická a pracná cesta.
Hromadně
Hromadné načtení se hodí v situaci, kdy máme hromadu adres a tu potřebujeme najednou zpracovat.
Doporučuji např. tento web:
http://www.gpsvisualizer.com/geocoder/
Po zadání adres se generují GPS.
Pro malé dávky stačí prosté vložení sady adres (co adresa, to řádek). Pro velké dávky je třeba nechat si vygenerovat klíč dle uživatelského účtu Microsoftu. To je docela podrobně popsané přímo na uvedeném webu a podle mé zkušenosti to funguje bezproblémově minimálně pro řádově tisíce adres.
Funkcí
Předchozí způsob se samozřejmě nehodí v situaci, kdy potřebujete vytvořit tabulku, do které budou adresy teprve zadávány, a čeká se, že se souřadnice dotáhnou po zadání.
Osvědčila se mi vlastní funkce, kterou jedna dobrá duše publikovala na Stackoverflow:
Option Explicit Function getGoogleMapsGeocode(sAddr As String) As String Dim xhrRequest As XMLHTTP60 Dim sQuery As String Dim domResponse As DOMDocument60 Dim ixnStatus As IXMLDOMNode Dim ixnLat As IXMLDOMNode Dim ixnLng As IXMLDOMNode ' Use the empty string to indicate failure getGoogleMapsGeocode = "" Set xhrRequest = New XMLHTTP60 sQuery = "http://maps.googleapis.com/maps/api/geocode/xml?sensor=false&address=" sQuery = sQuery & Replace(sAddr, " ", "+") xhrRequest.Open "GET", sQuery, False xhrRequest.send Set domResponse = New DOMDocument60 domResponse.loadXML xhrRequest.responseText Set ixnStatus = domResponse.selectSingleNode("//status") If (ixnStatus.Text <> "OK") Then Exit Function End If Set ixnLat = domResponse.selectSingleNode("/GeocodeResponse/result/geometry/location/lat") Set ixnLng = domResponse.selectSingleNode("/GeocodeResponse/result/geometry/location/lng") getGoogleMapsGeocode = ixnLat.Text & ", " & ixnLng.Text End Function
Funkci prostě vložíte do VBA editoru jako běžné makro. Pak se začne objevovat ve standardním seznamu funkcí a můžete ji použít tak, že jediným argumentem je adresa. Výstupem pak jsou geografické souřadnice.
Poznámky k funkci:
- Adresy fungují výrazně lépe, když jsou bez interpunkce
- V souboru s makrem je třeba jít v editoru VBA na Tools / References a zaškrtnout "Microsoft XML, v6.0".
- Informace ohledně limitů, kolikrát je možné se do rozhraní "zeptat", jsou k dispozici tady: https://goo.gl/zJtT7j. Aktuálně je to 2500 dotazů za den a 10 za sekundu, plus co si zaplatíte. Každopádně lepší samozřejmě je vytvořit tabulku tak, aby nedocházelo k opakovanému dotazování na jednu adresu.
- Na konci makra je vidět, že výsledek vzniká spojením šířky a délky do jednoho textu. I pro začátečníka bude jednoduché z této funkce vytvořit funkce dvě, kde jedna bude generovat jen šířku a jedna jen délku.
S tímto tématem se setkáte na našich kurzech ExcelTown.
Aktuálně: kurzy můžete absolvovat jak online, tak prezenčně.
Dobrý den, jak by vypadal tento kod, pokud bych chtěl použít API kod od Googlu, abych nebyl odkázaný na limit povolený googlem.
moc díky
Dobrý den.
Dívám se na tuto funkci, ale nevidím kam bych měl vložit API klíč od Googlu?
Děkuji za odpověď