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.
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.
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 arctan
fonction pour récupérer l'angle.
atan
? Ma trigonmétrie est un peuPour 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.
la source