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将获得直线上最近的距离。