A következőkben bemutatjuk, hogy hogyan lehet SQL-ben a google maps koordinátái alapján két pont légvonalbeli távolságát kiszámítani kellő pontossággal, melyet kellemes és érdekes featureként lehet beépíteni a google mashupunkba.
Egy egyszerű példán keresztül nézzük meg, hogy hogyan is működik.
A helyszínnek meg kell adni a koordinátáit, regisztrált felhasználónkpedig az adatlapján tudja beállítani tartózkodási helyét:

Vegyünk két táblát tehát:
- felhasználót tároló tábla (tábla1), mezői: id, név, lat, lng, egyéb
- helyszint tároló tábla (tábla2), mezői: id, név, lat, lng, egyéb
Amikor főhősünket informálni szeretnénk milyen messze is van, szükségnük van egy tárolt függvényre (MySQL 5) , ami kiszámolja a távolság értékét:
CREATE FUNCTION `get_dist`(lat1 FLOAT(18,14), lon1 FLOAT(18,14), lat2 FLOAT(18,14), lon2 FLOAT(18,14) ) RETURNS float(18,3)NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN return ROUND(6378.7 * acos(sin(lat1/57.2958) * sin(lat2/57.2958) + cos(lat1/57.2958) * cos(lat2/57.2958) * cos(lon2/57.2958-lon1/57.2958)),3); END;
A get_dist függvénynek 4 bemenő paramétere van, az első kettő az egyik cél koordináta párja, a másik kettő a másiké. Ügyeljünk a float értékekre – 18,14 -, így viszi az előjeleket is.
Ez a függvény a két pont közötti távolságot adja meg km-ben. Használata pedig:
select get_dist(tábla1.lat,tábla1.lng, tábla2.lat, tábla2.lng) as km from tábla1, tábla2 where tábla1.id=1 and tábla2.id=11;
Innen adódik, hogy le tudjuk kérdezni egy ponthoz képest pl 10 km-es körön belül elhelyezkedő további pontokat:
select ... where get_dist(tábla1.lat,tábla1.lng, tábla2.lat, tábla2.lng)<10 and ....
A függvény matematikai problémáira nem térünk ki, célunk csupán az eljárás bemutatása volt. Aki esetleg ennél tud pontosabb megoldást vagy bugot talált, az küldje el nekünk.
van már valami útvonaltervező cucc is benne, lehet azzal meg lehetne kapni a valós távolságot is (nem légvonalban)
http://www.google.com/apis/maps/documentation/directionsAdvanced.html
http://www.google.com/apis/maps/documentation/directionsSimple.html
esetleg úgy lehetne, hogy a háttérben kérni egy routeot, és letárolni a polyline hosszát. ergo kesselés lenne. csak nem tudom, hogy a google hogy jutalmazná a sok túráztatást. egyszer lekéred az útvonalat mikor megjelenik a hely, majd következőleg csak kiíratod a távolságot. Lehetne adott tűréssel is, használva a fenti függvényt:
minden olyan emberkére igaz lesz ez a távolság, aki pl 3-4 km-es körzeten belül lakik az eredeti lekérőtől. Kicsit csalna…