如何计算PostGIS中两点之间的方位?


19

如何在PostGIS中找到两点之间的方位?

请在您的答案中指定是在球体上产生轴承还是在平面轴承上产生轴承。

Answers:


21

使用ST_Azimuth

平面轴承可以使用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

对于球形方位角(引用potgis-users组):

PostGIS方位角函数似乎使用了一个简单的反正切函数来确定方位角。如果将坐标转换为投影坐标系,然后运行查询,则结果将更接近FCC站点的结果。
这是到UTM Zone 31的快速转换:

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

产生的方位角为145.457858825445。UTM区域中心的点或更合适的投影将提供更好的结果。

使用三角函数和ST_distance_sphere

这是我不得不处理此问题时选择的解决方案,主要是出于遗留原因(我有一个计算方位角的Python函数)。首先,我们需要找到一个函数来告诉我们两点之间的确切距离。引用postgis手册

ST_distance_sphere(point,point)返回两个纬度/经度点之间的线性距离,以米为单位。使用球形地球,半径为6370986米。比distance_spheroid()快,但准确性较低。仅针对积分实施。

测量点之间的经度和纬度距离,然后使用该arctan功能检索角度。


我将稍后尝试发布python代码,并可能在方法之间进行一些比较-如果我可以找到该旧代码...
Adam Matan 2010年

您能说明一下如何从远处转向某个角度atan吗?我的三角学有点朦胧...
fmark

11

对于现在遇到此问题的任何人-PostGIS从2.0.0开始支持地理(椭球体)上的ST_Azimuth。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.