Sql server postgresql(PostGIS)和SQL(Sptial)结果的差异

Sql server postgresql(PostGIS)和SQL(Sptial)结果的差异,sql-server,postgresql,sql-server-2008,Sql Server,Postgresql,Sql Server 2008,我有两点,我必须计算它们之间的差值 我在SQL中使用下面的查询 SELECT geography::Point(27.185425, 88.124582, 4326).STDistance(geography::Point(27.1854258, 88.124500, 4326)); 其运行良好,结果如下: 8.12599260290125 8.20039023523232 现在,当我在postgresql中运行下面的查询时,情况也是如此 SELECT ST_Distance(ST_Geo

我有两点,我必须计算它们之间的差值

我在SQL中使用下面的查询

SELECT geography::Point(27.185425, 88.124582, 4326).STDistance(geography::Point(27.1854258, 88.124500, 4326));
其运行良好,结果如下:

8.12599260290125
8.20039023523232
现在,当我在postgresql中运行下面的查询时,情况也是如此

SELECT ST_Distance(ST_GeomFromText('POINT(27.185425 88.124582)',4326),ST_GeomFromText('POINT(27.1854258 88.124500)', 4326));
现在的结果是:

8.12599260290125
8.20039023523232

有人能告诉我为什么在计算两点之间的距离时,结果会有差异吗?

这里有几件事让你大吃一惊

在使用点的SQL Server版本中,坐标顺序为Lat-Lon,例如yx。OGC点构造为xy或Lon-Lat

最后一个问题是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)'));


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版本中,坐标顺序为Lat-Lon,例如yx。OGC点构造为xy或Lon-Lat

最后一个问题是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)'));


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  ; 

可以使用球形几何体吗?vs或甚至?我已经检查了你所有的链接,但没有帮助我。我正在存储数据类型地理(点4326)的纬度和经度值。我找不到有关此计算的内部工作的任何细节,我怀疑差异在于基础数据类型/计算逻辑,特别是舍入。我建议你找到一个独立的方法来达到这个结果。注意:我以前在Sybase和SQL Server之间使用过数值数据类型的计算差异。是否可以使用球形几何体?vs或甚至?我已经检查了你所有的链接,但没有帮助我。我正在存储数据类型地理(点4326)的纬度和经度值。我找不到有关此计算的内部工作的任何细节,我怀疑差异在于基础数据类型/计算逻辑,特别是舍入。我建议你找到一个独立的方法来达到这个结果。注意:我以前没有计算Sybase和SQL Server之间数值数据类型的差异。