我想计算在PostGIS中相交的两条线之间的角度。
PostGIS中角度计算的起点似乎是ST_Azimuth-但这需要点作为输入。我的第一个想法是采用相交线的端点,并对这些端点执行方位角计算。这还不够好,因为大多数线要素不是笔直的,而且我对相交处的角度感兴趣。所以我想出了一个嵌套的操作,它通过以下步骤进行:
- 识别两个线要素表之间的所有交点。
- 在相交点周围创建一个非常小的缓冲区
- 确定线要素与缓冲区外部相交的点(如果有多个点,则取第一个点-我真的只对角度是接近0、90或180度感兴趣)
- 计算这两点的ST_Azimuth。
完整的SQL有点想在这里发布,但是如果您有兴趣的话,我可以在这里进行介绍。(顺便说一句,有没有比继承WITH语句下的所有字段更好的方法了?)
结果看起来不正确,所以我显然做错了:
编辑我在EPSG:3785中重新计算,结果有些不同,但仍然不正确:
我的问题是此过程中的缺陷在哪里。我是否误解了ST_Azimuth的功能?是否存在CRS问题?还有其他东西吗?也许有很多简单的方法可以做到这一点?
1
最初的CRS是什么?角度计算应使用保形投影,而不是未投影的经/纬度(SRID = 4326)。
—
Mike T
最初是EPSG:4326坐标,我包括ST_Translate只是为了100%确保所有处理都将在同一CRS中完成。我会尝试保形投影,谢谢。
—
mvexel 2012年
我重新计算的是EPSG:3785,它确实有所作为-我将修改问题以显示新结果-但结果仍未反映实际角度。
—
mvexel 2012年