Google Map中两点的SQL Server空间距离

SQL Server Spatial Distance of Two Points from Google Map

我正在了解SQL Server空间数据类型。作为一个简单的测试,我在谷歌地图上选择了两个点,并记下了距离。确切地说:

1
2
3
lat = 35.701657, long = 51.419479
lat = 35.701737, long = 51.425934
Distance = 587.18 m

好的,但是在SQL Server 2012中运行以下查询会产生不同的(老实说,毫无意义)结果:

1
2
3
4
5
6
7
DECLARE @g geometry;
DECLARE @h geometry;
SET @g = geometry::STGeomFromText('POINT(51.425934 35.701737)', 4326);
SET @h = geometry::STGeomFromText('POINT(51.419479 35.701657)', 4326);
SELECT @g.STDistance(@h)

Result = 0.00645549572069735

我知道空间数据类型的经度比纬度高(在我的例子中),并且我使用4326作为srid(似乎被Google和其他地图服务使用),并且应该返回米。

谷歌地图计算的是正确的。如何在SQL Server中计算相同的数字?


您需要使用地理空间数据类型而不是几何图形。试试这个。

1
2
3
4
5
DECLARE @g geography;
DECLARE @h geography;
SET @g = geography::STGeomFromText('POINT(51.425934 35.701737)', 4326);
SET @h = geography::STGeomFromText('POINT(51.419479 35.701657)', 4326);
SELECT @g.STDistance(@h)

结果:584.257975718466

编辑:3M的差异可能归因于谷歌地图捕捉道路的方式来计算距离(路段上有一个小弯),而SQL Server将获得直线上最近的距离。