Sql-Server

PostgreSQL (PostGIS) 和 SQL Server (Spatial) 的結果差異

  • May 23, 2016

我有兩點,我必須計算它們之間的差異。

我在 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  ; 

引用自:https://dba.stackexchange.com/questions/139249