【发布时间】:2021-08-06 20:52:18
【问题描述】:
使用 PostGis 3.0、Postgres 12.4,我试图找到荷兰两点之间的距离。根据谷歌地图,这应该是大约 5 公里(直线,见下图)。 下面的函数都给出了大约 8 公里,这是相当遥远的。
我在某处找到的 calcDistance 存储过程做得相当不错(5 公里),但在查询包含大量记录的表时,这是一种相当慢的方法,按与某处随机点的最短距离排序。
我试图找到正确的球体,但似乎找不到正确的解决方案。我应该使用其他球体('SPHEROID["WGS 84", 6378137, 298.257223563]' 是我能找到的唯一一个)作为荷兰经线之间的距离(纬度 > 52.0)吗?
SELECT
"calcDistance"(52.2209471, 6.8945723, 52.221687, 6.969117) as calcDistance,
st_distancespheroid('POINT(52.2209471 6.8945723)'::geometry,
'POINT(52.221687 6.969117)'::geometry,
'SPHEROID["WGS 84", 6378137, 298.257223563]')/1000 as distancespheroid,
st_distancesphere('POINT(52.2209471 6.8945723)'::geometry,
'POINT(52.221687 6.969117)'::geometry) as distancesphere,
st_distance(
ST_GeographyFromText('POINT(52.2209471 6.8945723)'),
ST_GeographyFromText('POINT(52.2216870 6.9691170)')
);
这是谷歌地图告诉我的:
【问题讨论】:
-
您是否尝试在点声明中交换坐标? IIRC,它们应该以相反的顺序通过。一些违反直觉的东西......
-
至少当我遇到完全相同的问题时,这有帮助:)
-
确实如此。我的错。多么愚蠢。谢谢!
标签: postgresql postgis distance latitude-longitude