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í.

  1. Výpočet vzdáleností mezi lokalitami
  2. 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é)
  3. 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.

funkce

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”.
    zaskrtnuti
  • 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.

2 Komentářů

  1. 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

  2. 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ěď

Komentáře není možné přidávat