Comment calculer le relèvement entre deux points dans PostGIS?

19

Comment trouver le relèvement entre deux points dans PostGIS?

Veuillez préciser dans votre réponse si oui ou non la méthode produisant un roulement sur le sphéroïde, ou un roulement plan.

fmark
la source

Réponses:

21

Utilisation de ST_Azimuth

Le relèvement plan peut être calculé en utilisant ST_Azimuth:

SELECT ST_Azimuth(ST_MakePoint(1,2), 
           ST_MakePoint(3,4))/(2*pi())*360 as degAz,
       ST_Azimuth(ST_MakePoint(3,4), 
           ST_MakePoint(1,2))/(2*pi())*360 As degAzrev

degaz   degazrev
------  ---------
45      225

Pour l'azimut sphérique ( groupe Quoting potgis-users ):

La fonction azimut PostGIS semble utiliser une simple fonction arctan pour déterminer l'azimut. Si vous convertissez vos coordonnées en un système de coordonnées projeté puis exécutez la requête, vos résultats seront beaucoup plus proches des résultats du site FCC.
Voici une conversion rapide vers UTM Zone 31:

select degrees(azimuth(
'POINT(634714.442133176 5802006.052402816)',
'POINT(634731.2410598891 5801981.648284801)'
));

ce qui donne un azimut de 145,457858825445. Des points au centre de la zone UTM, ou une projection plus appropriée donneraient de meilleurs résultats.

Utilisation de fonctions trigonométriques et ST_distance_sphere

C'est la solution que j'ai choisie lorsque j'ai dû faire face à ces problèmes, principalement pour des raisons héritées (j'avais une fonction Python qui calcule l'azimut). Tout d'abord, nous devons trouver une fonction qui nous indiquerait la distance exacte entre deux points. Citant le manuel de postgis :

ST_distance_sphere (point, point) Renvoie la distance linéaire en mètres entre deux points lat / lon. Utilise une terre sphérique et un rayon de 6370986 mètres. Plus rapide que distance_spheroid (), mais moins précis. Uniquement implémenté pour les points.

Mesurez la distance en longitude et en latitude entre les points et utilisez la arctanfonction pour récupérer l'angle.

Adam Matan
la source
Je vais essayer de poster le code python plus tard, et peut-être faire des comparaisons entre les méthodes - Si je peux trouver ce code hérité ...
Adam Matan
Pouvez-vous préciser comment vous passez d'une distance à un angle avec atan? Ma trigonmétrie est un peu
floue
11

Pour tous ceux qui rencontrent cette question maintenant - PostGIS prend en charge ST_Azimuth sur la géographie (sphéroïde) à partir de 2.0.0.

EM0
la source