gpt4 book ai didi

sql-server - postgresql(PostGRES) 和 SQL (Spatial) 结果的差异

转载 作者:行者123 更新时间:2023-11-29 13:53:03 24 4
gpt4 key购买 nike

我有两个点,我必须计算它们之间的差异。

我在 SQL 中使用以下查询。

SELECT geography::Point(27.185425, 88.124582, 4326).STDistance(geography::Point(27.1854258, 88.124500, 4326));

它运行良好,结果是:

8.12599260290125

当我在 postgresql 中运行下面的查询时,现在有同样的观点。

SELECT ST_Distance(ST_GeomFromText('POINT(27.185425 88.124582)',4326),ST_GeomFromText('POINT(27.1854258 88.124500)', 4326));

现在结果是:

8.20039023523232

谁能告诉我为什么在计算两点之间的距离时结果会有所不同?

最佳答案

这里有几件事让您着迷。

在使用点的 SQL Server 版本中,坐标的顺序是 Lat Lon,例如 Y X。OGC Point 构造是 X Y 或 Lon Lat。

最后一个问题是 PostGIS 查询将对象视为几何图形并对它们执行笛卡尔距离。您需要明确地将它们设为 Geographies。

以下是执行 PostGIS 查询的几种方法。我调换了坐标顺序

SELECT ST_Distance(ST_GeomFromText('POINT(88.124582 27.185425)',4326)::geography,
ST_GeomFromText('POINT(88.124500 27.1854258)',4326)::geography);

SELECT ST_Distance(ST_GeogFromText('SRID=4326;POINT(88.124582 27.185425)'),
ST_GeogFromText('SRID=4326;POINT(88.124500 27.1854258)'));


SELECT ST_Distance(gg1, gg2) As spheroid_dist, ST_Distance(gg1, gg2, false) As sphere_dist
FROM (SELECT
ST_GeogFromText('SRID=4326;POINT(88.124582 27.185425)') As gg1,
ST_GeogFromText('SRID=4326;POINT(88.124500 27.1854258)') As gg2
) As foo ;

关于sql-server - postgresql(PostGRES) 和 SQL (Spatial) 结果的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37386405/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com