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.

Hozzászólások lezárva.