【发布时间】:2012-10-13 03:54:10
【问题描述】:
我正在尝试计算地图上两个位置之间的距离。 我在我的数据中存储了:经度、纬度、X POS、Y POS。
我之前一直在使用下面的sn-p。
DECLARE @orig_lat DECIMAL
DECLARE @orig_lng DECIMAL
SET @orig_lat=53.381538 set @orig_lng=-1.463526
SELECT *,
3956 * 2 * ASIN(
SQRT( POWER(SIN((@orig_lat - abs(dest.Latitude)) * pi()/180 / 2), 2)
+ COS(@orig_lng * pi()/180 ) * COS(abs(dest.Latitude) * pi()/180)
* POWER(SIN((@orig_lng - dest.Longitude) * pi()/180 / 2), 2) ))
AS distance
--INTO #includeDistances
FROM #orig dest
然而,我不相信由此得出的数据,它似乎给出了稍微不准确的结果。
一些示例数据以备不时之需
Latitude Longitude Distance
53.429108 -2.500953 85.2981833133896
有人可以帮我解决我的代码吗
请说明您的结果采用什么计量单位。
【问题讨论】:
-
您不应将参数除以正弦除以附加的 /2。你也可以在地球半径上有更高的精度,以及使用一些 Datum 使用例如通过 GPS 系统 (WGS-84) 通过椭圆体(在赤道和两极具有不同的半径)逼近地球
-
@Waller,你为什么不使用地理/几何(空间)类型来实现这一点?
-
我用 Mathematica 检查了你的计算;它认为法定英里(5280 英尺)的距离是 42.997,这表明您的计算并非略微不准确,而是非常不准确。
标签: sql sql-server tsql math sql-server-2008-r2