San*_*mar 1 postgresql sql-server spatial postgis
我有两点,我必须计算它们之间的差异。
我在 SQL Server 中使用以下查询。
SELECT geography::Point(27.185425, 88.124582, 4326)
.STDistance(geography::Point(27.1854258, 88.124500, 4326));
Run Code Online (Sandbox Code Playgroud)
它运行良好,结果是:
8.12599260290125
Run Code Online (Sandbox Code Playgroud)
现在,当我在 PostgreSQL 中运行以下查询时,同样的情况。
SELECT ST_Distance(ST_GeomFromText('POINT(27.185425 88.124582)',4326),
ST_GeomFromText('POINT(27.1854258 88.124500)', 4326));
Run Code Online (Sandbox Code Playgroud)
现在结果是:
8.20039023523232
Run Code Online (Sandbox Code Playgroud)
谁能告诉我为什么计算两点之间的距离时结果存在差异?
有几件事让你知道了。
在使用 Point 的 SQL Server 版本中,坐标的顺序是 Lat Lon,例如 Y X。OGC 点构造是 XY 或 Lon Lat。
接下来是您发布的 PostGIS 查询实际上返回8.20039023523232e-005,虽然看起来与 SQL Server 结果相似,但要小得多。
最后一个问题是 PostGIS 查询将对象视为几何图形并对它们进行笛卡尔距离。您需要明确地使它们成为地理。
以下是执行 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)'));
-- Adapted from the PostGIS Manual
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 ;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
259 次 |
| 最近记录: |