我建立了一个SQL数据库,其中包含许多字段,其中一个字段是称为Coordinates的地理字段。我需要搜索一定半径内的所有行,并使用查询
来做到这一点。DECLARE @CurrentLocation geography;
SET @CurrentLocation = geography::Point(-84.505562, 39.137706, 4326)
SELECT * , Coordinates.STDistance(@CurrentLocation) AS Distance FROM tParkingLot
WHERE Coordinates.STDistance(@CurrentLocation )<= 200000
第一行按预期返回,因为我使用这些坐标作为中心。但是,在Google地图上测量另外两个批次时,我发现第2行的结果应该更接近1133.246,第3行的结果应该更接近74673.56
我从其他stackoverflow结果中看到,一个常见的错误是将数据插入为lat / lon而不是lon / lat,但是我已经犯了该错误,并已改正了这个错误,因此我无法确定为什么我会得到到目前为止的距离结果偏离实际测量值。
问题的原因是经度和纬度的顺序。地理世界传统上使用(lat, lon)
顺序,SQL世界定义了(x, y)
顺序,这通常表示(lon, lat)
顺序。