Weboldalkészítő suli #40 - Geokódolás oda-vissza

Folytatva térképes minisorozatunkat, megnézzük, hogyan tudunk címeket és koordinátákat „konvertálni” egymásba, valamint azt is, miként határozhatjuk meg két pont között a legrövidebb távolságot.

Kategóriák: Programozás

Szerző: Weisz Tamás 2011. szeptember 02.

következő oldal »

A Websuli legutóbbi két leckéjében, miután megismerkedtünk a HTML5 helymeghatározó (geolocation) funkciójával, megnéztük, hogyan illeszthetünk oldalainkba interaktív térképeket, és azokat különféle módokon hogyan tudjuk testre szabni. Ezt követően a térképeken először standard, majd saját helyjelölő bójákat és azokhoz kapcsolódó információs buborékokat helyeztünk el, amelyekben adott pontokhoz kapcsolódó szöveges-képes információkat jelenítettünk meg.

 



Mindkét rész példaállományai között megtalálható volt egy hasznos kis „segédprogram”, amellyel a térképen kattintással lerakható-áthelyezhető bója aktuális koordinátáit tettük egyszerűen olvashatóvá, sőt másolhatóvá. Azok, akik kipróbálták a példaprogramot, láthatták, hogy egy új funkcióval bővült, a cím szerinti kereséssel.

Címből koordináták

Kis programunk HTML-kódjában két kisebb változtatást hajtottunk végre az elmúlt havihoz képest. Egyrészt az űrlapelemeket egy form-ba illesztettük, és a Geokódolás gombot kineveztük submit, vagyis küldés típusnak, így a cím beírása után már nemcsak a gomb megnyomásával, hanem az Enter billentyű leütésével is elindíthatjuk a keresést. Másrészt létrehoztunk egy új számmezőt (ami Google Chrome-ban és Operában már tényleg számmezőként működik), amelyben megadhatjuk, hogy hány tizedesjegy pontossággal szeretnénk kiíratni a helyjelölő bója koordinátáit (getcoords.html: 13–24. sorok).

A Google Térképek szolgáltatás (maps.google.hu) egyik legismertebb és leggyakrabban használt funkciója az úgynevezett geokódolás, amikor is beírunk egy „emberi fogyasztásra is alkalmas” címet (például 1075 Budapest, Madách Imre út 13-14.), amit azután a program megpróbál megkeresni és megjeleníteni a térképen. Ezt a funkciót a google.maps.Geocoder objektum geocode() metódusán keresztül érhetjük el saját szoftvereinkben, ezért – az inicializáláskor már szokásosnak mondható lépéseken túl – létre kell hoznunk egy ilyen geokodolásra használható objektumot (getcoords.js: 11. sor), amit majd az űrlapunk eseményeként beállított codeAddress() függvény fog majd munkára bírni.

 

Gyorsabban navigálhatunk a térképen, ha tudjuk a pontos címet


Ez a függvény először is kiolvassa a címet tartalmazó űrlapelem aktuális értékét (55. sor), majd azt átadja Geocoder típusú objektum már említett geocode() metódusának. E metódusnak két paramétert adjunk át: egyrészt természetesen azt a címet, amelynek a koordinátáit keressük, másrészt azt a függvényt, ami akkor fog elindulni, amikor a Google Térképek – sikerrel vagy sikertelenül, de – befejezte a cím feldolgozását (56–63. sorok). Egyes esetekben előfordulhat, hogy biztos, ami biztos alapon akár koordináták (bounds), akár régiókódok (region) megadásával egyértelművé kell tennünk, hogy mely területen is keressük az adott címe(ke)t, különben „Budapest”-re keresve egy floridai vagy egy georgiai címet kaphatunk vissza.

Persze egyáltalán nem biztos, hogy a művelet sikerrel zárul, éppen ezért először meg kell néznünk, hogy minden rendben volt-e (57. sor). Ha igen, akkor biztos, hogy az eredmény tömbünknek legalább egy eleme lesz, amiből jelenleg nekünk csak a koordinátákra lesz szükségünk(results[0].geometry.location), hogy áthelyezzük oda a bóját és a térkép középpontját (58–59. sorok). Abban az esetben pedig, ha valami hiba történt (a cím nem található [ZERO_RESULTS], túl sok kérés érkezett az adott oldalról [OVER_QUERY_LIMIT] stb.), akkor erről egy rövid értesítést küldünk a felhasználónak.

Koordinátákból cím

A címkereséshez képest – egy átlagos felhasználónál legalábbis – sokkal ritkábban, de előfordul(hat) az is, hogy egy pont koordinátái ismertek, és meg kell tudnunk az ehhez a ponthoz tartozó címet (például ha egy geokódolt fotókról szeretnénk kideríteni a készítés helyének pontos adatait). Az ilyen esetekben is nyugodtan segítségül hívhatjuk a google.maps.Geocoder objektum geocode() metódusát, ám ilyenkor első paraméterként nem egy címet, esetleg egy címrészletet adunk meg, hanem egy LatLng formátumú koordinátapárt (inversgeocode.js: 49. sor).

 

Ennyi mindent tudhatunk meg egy koordinátáról


Eredményül természetesen ugyanúgy egy eredménytömböt kapunk – már amennyiben nem valamilyen hibaüzenetet –, amiben a talált címről kapunk nagyon részletes információkat. Az, hogy mennyi és milyen típusú adatot kapunk egy pontról, az egyrészt függ attól, hogy melyik országban található (például milyen közigazgatási szintek vannak az adott országban), másrészt attól, hogy hova is mutat a megadott koordinátapár (például egy konkrét cím közvetlen közelében, valahol az országúton, esetleg egy mezőn található a keresett pont). Éppen ezért minden egyes címhez kapunk egy „címrészletező” tömböt (address_components) is, amelyben a rövid (short_name) és a hosszú megnevezés (long_name) mellett megtaláljuk az adott címrészlet típusát (types) is.

A típus mintegy két tucat különböző értéket vehet fel az ország- és városnévtől, az adott országra jellemző különböző területi szinteken (állam, megye, kerület stb.) át egészen a házszámig. Ezenkívül pedig még az is előfordulhat, hogy kiderül: a megadott pont egy nagyobb útkereszteződést, egy (nemzeti) parkot vagy éppen egy repülőteret jelöl.

Mintaszoftverünk éppen ezért valamennyi komponens típusát és hosszú megnevezését megjeleníti az információs ablakban az „olvasható cím” alatt, így megnézhetjük azt is, miként változnak az elérhető típusok a különböző országokban, sőt akár országokon belül is.

 

Cimkék: webszerkesztés, google, térkép, lokalizáció, geokódolás

következő oldal »

Térképszoftver/térinformatika

Legfrissebb videó

websuli 40 galéria

Kommentek A hozzászóláshoz jelentkezzen be!

A hozzászólások a vonatkozó jogszabályok értelmében felhasználói tartalomnak minősülnek, értük a szerkesztőség és a szolgáltatás üzemeltetője semmilyen felelősséget nem vállal! A moderálási elvekbe ütköző hozzászólásokat szerkesztőségünk bármikor törölheti.

el_diablo 2011-10-17 16:19:46

Nagyon jó leírás, köszönöm. A példaprogramokat sajnos nem tudtam megnézni, mert az előző cikk melléklete van belinkelve.

Válasz