Sql-Server
PostgreSQL (PostGIS) 和 SQL Server (Spatial) 的結果差異
我有兩點,我必須計算它們之間的差異。
我在 SQL Server 中使用以下查詢。
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
誰能告訴我為什麼在計算兩點之間的距離時結果會有所不同?
有幾件事讓你在這裡。
在使用Point 的SQL Server 版本中,座標的順序是Lat Lon,例如Y X。OGC Point 構造是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 ;