Calculer la distance entre deux points géographiques avec PostgreSQL
Vous voudriez utiliser une fonction Postgres comme earth_distance() pour calculer la distance théorique entre deux points sur la Terre (en assumant qu'elle est parfaitement ronde) sans installer de package ou utiliser PostGIS ?
Voici une fonction écrite en pl/pgsql qui vous permettra d'obtenir une approximation en fournissant la latitude et la longitude de deux coordonnées. Par exemple, la distance en ligne droite (ou à vol d'oiseau) entre l'Auberge du Dragon Rouge et la microbrasserie Dieu-du-Ciel! à Montréal serait de 4,639 km (j'ai obtenu les coordonnées en pointant et cliquant sur la carte Google Maps Distance Calculator).
Assurez-vous d'abord que le langage pl/pgsql est installé. Ensuite, exécutez le code ci-dessous qui créera la fonction :
CREATE FUNCTION evaluate_earth_distance(Vous pourrez ensuite faire l'appel comme ceci par une requête SQL :
"latitude1" numeric,
"longitude1" numeric,
"latitude2" numeric,
"longitude2" numeric
)
RETURNS numeric AS
$body$
DECLARE
degToRad NUMERIC;
radToDeg NUMERIC;
pi NUMERIC;
theta NUMERIC;
distance NUMERIC;
BEGIN
pi := 3.14159265358979323846;
degToRad := pi / 180;
radToDeg := 180 / pi;
theta := longitude2 - longitude1;
distance := sin(latitude1 * degToRad) * sin(latitude2 * degToRad) + cos(latitude1 * degToRad) * cos(latitude2 * degToRad) * cos(theta * degToRad);
distance := acos(distance);
distance := distance * radToDeg;
distance := distance * 60 * 1.1515 * 1.609344;
RETURN distance;
END;
$body$
LANGUAGE 'plpgsql';
SELECT evaluate_earth_distance(45.547291,-73.641446, 45.522651,-73.593373);La distance sera retournée en kilomètres.
-- 4,63949681350483 km
Une seule chose à dire: Vive l'auberge du dragon rouge :-D