3

我計算兩個緯度長值之間米的距離很大的區別 - 40.1844441 -77.2252771和
40.319166 -76.7880552SQL服務器地理STDistance函數返回比其他測試結果

我測試了這兩者之間的距離點在兩個以下網站 - http://www.nhc.noaa.gov/gccalc.shtmlhttp://www.movable-type.co.uk/scripts/latlong.html
這兩個網站返回大約40014米。

因此,我使用SQL Server的GEOGRAPHY數據類型來計算這兩個點之間的距離,並返回48927米。這對我來說是一個巨大的差異。
下面是我的代碼和任何建議表示讚賞。

declare @latlong1 GEOGRAPHY 
declare @latlong2 GEOGRAPHY 
DECLARE @distance float 

set @latlong1 = GEOGRAPHY::STGeomFromText('POINT(40.1844441 -77.2252771)', 4326) 
set @latlong2 = GEOGRAPHY::STGeomFromText('POINT(40.319166 -76.7880552)', 4326) 

SET @distance = @latlong1.STDistance(@latlong2) 
SELECT @distance -- this returns 48927 meters 

回答

1

我也注意到一些奇怪的結果,所以我傾向於使用地理::點()這似乎產生清潔效果。即使如此,選項2距離UDF有80米遠,似乎正在發揮作用。

declare @latlong1 GEOGRAPHY 
declare @latlong2 GEOGRAPHY 

Set @latlong1 = GEOGRAPHY::STGeomFromText('POINT(40.1844441 -77.2252771)',4326) 
Set @latlong2 = GEOGRAPHY::STGeomFromText('POINT(40.319166 -76.7880552)',4326) 

Select VeryOdd = @latlong1.STDistance(@latlong2) 
     ,SQLGeo = geography::Point(40.1844441, -77.2252771, 4326).STDistance(geography::Point(40.319166,-76.7880552, 4326)) 
     ,UDFGeo = [dbo].[udf-Geo-Meters](40.1844441,-77.2252771,40.319166,-76.7880552) 

返回

VeryOdd    SQLGeo    UDFGeo 
48927.1485292471 40093.8055001913 40014.8833526855 

的UDF如果有意

CREATE Function [dbo].[udf-Geo-Meters](@Lat1 FLOAT, @Lng1 FLOAT, @Lat2 FLOAT, @Lng2 FLOAT) 
Returns Float as 
Begin 
    Return ACOS(SIN(PI()*@Lat1/180.0)*SIN(PI()*@Lat2/180.0)+COS(PI()*@Lat1/180.0)*COS(PI()*@Lat2/180.0)*COS(PI()*@Lng2/180.0-PI()*@Lng1/180.0)) * 6371008.8 
    -- 6.371 mean radius of earth in meters 
End 
+0

約翰·C:我可以證實你的UDFGE O的結果對12位有效數字是正確的,基於地球半徑爲6371008.8米的球體。 –

+0

@JohnMachin感謝您的額外努力和確認 –

+0

@JohnCappelletti - 謝謝。 我也確認使用「Cosines的球形法」,這正是你計算出來的,它返回40014.8833526855米。是。我用地球的半徑爲6371008.8。 – Shwe

0

嘗試轉在「VeryOdd」情況下解析經緯度,即使用POINT(-77.2252771 40.1844441)POINT(-76.7880552 40.319166)

我的離線「餘弦球形法」結果是48733米,與原來的VeryOdd 48927米僅有約0.4%的差異。

我建議嘗試使用不同的lats和lons進行更多的測試,並檢查相關函數/方法的文檔。

最新新聞:STGeomFromText( 'POINT(經緯度)'等 - 與更頻繁的協議相比:第一個緯度經度然後

看到所選的這個問題的答案: Create Geometry/Geography Field from Latitude & Longitude fields (SQL Server)

要清理剩餘的差異,有人需要搜索什麼半徑/半徑是由4326魔法調用/ ...