【发布时间】:2017-08-19 23:43:04
【问题描述】:
我有一个 PostGIS 地理点,我想在理想球体(不是球体)上旋转一定距离。我看到了 ST_Project() 函数,但它似乎在旋转球体上的点。比如我把(0,10)向北旋转1度,结果就比1度略大
select ST_AsText(ST_Project(ST_Point(0,10), 111194.68229846345*1,radians(0.0)));
st_astext
---------------------------
POINT(0 11.0052750273178)
(1 row)
将 (0,60) 旋转相同的距离会得到略小于 1 度的结果。
POINT(0 60.9979713953998)
我还可以使用球体计算点之间的距离
select ST_Distance(ST_Project(ST_Point(60,89.9)::geography, 111194.68229846345*1,radians(0.0)),ST_Point(60,89.9),'t');
st_distance
------------------
111194.682298475
(1 row)
和完美的球体
select ST_Distance(ST_Project(ST_Point(60,89.9)::geography, 111194.68229846345*1,radians(0.0)),ST_Point(60,89.9),'f');
st_distance
-----------------
110698.09475313
(1 row)
所以并不是我把地球的周长弄错了。
对于许多对地理对象进行操作的函数,例如ST_DWithin,可以选择使用球体或完美球体。我没有看到ST_Project 的选项。
一般来说,我的方位角将是 0、90、180 和 270 之一,并且它必须在极点周围正常工作。
【问题讨论】:
标签: postgresql postgis