PL/pgSQL function haversine
create or replace function Haversine( p1_lat double precision, p1_long double precision, p2_lat double precision, p2_long double precision ) returns double precision as $tavolsag$ declare EarthRadius constant double precision = 6372.8; m_pi constant double precision = 3.1415926535; diffLat double precision; diffLong double precision; a double precision; begin diffLat = m_pi * (p2_lat - p1_lat) / 180; diffLong = m_pi * (p2_long - p1_long) / 180; p1_lat = m_pi * (p1_lat) / 180; p2_lat = m_pi * (p2_lat) / 180; a = sin(diffLat / 2) * sin(diffLat / 2) + sin(diffLong / 2) * sin(diffLong / 2) * cos(p1_lat) * cos(p2_lat); return EarthRadius * 2 * asin(sqrt(a)); end; $tavolsag$ LANGUAGE plpgsql;
Kisvárda-Nyíregyháza távolság kilométerben.
TEST2=# select Haversine(48.21667, 22.08333, 47.95539, 21.71671); haversine ------------------ 39.8318008206491 (1 row)
C++ forrás ebben a témában.