2016-03-29 30 views
0

我正在嘗試使用SQL Server 2014函數來確定地理曲面上兩點之間的距離。我在表格中有三個字段(經緯度,座標)。 [緯度]和[龍]是現有的價值觀和我店使用下面的[座標]字段地理點的座標:SQL Server空間功能:.STDistance是否返回英里或米?

UPDATE dbo.[MyTable] 
SET [Coordinates] = geography::STPointFromText('POINT(' + CAST([Lon] AS VARCHAR(20)) + ' ' + CAST([Lat] AS VARCHAR(20)) + ')', 4326) ; 

所以現在我有一個完整的具有地理座標記錄表預在[座標]字段中計算。現在我想確定Point_A和Point_B之間的距離(英里)。我用下面的:

- 計算點A:

DECLARE @g geography = (SELECT [Coordinates] FROM [MyTable] WHERE [Id] = 68); 

- 計算點B:

DECLARE @h geography = (SELECT [Coordinates] FROM [MyTable] WHERE [Id] = 1439); 

- 計算距離:

SELECT ROUND(@g.STDistance(@h)) AS [Distance]; 

的實際距離約爲20英里,但是這個計算給了我一個比20英里大幾千倍的數字。

是.STDistance返回米而不是英里?

相關提示:任何人都可以指向我,其中一個用含點的一千另一個表的地理位置最近點匹配上千個地點的表在網絡上的例子嗎?如果我找不到縮短過程的方法,我可以看到這個計算需要很長時間。

+1

可能的重複[SQL Server 2008 GEOGRAPHY STDistance()value](http://stackoverflow.com/questions/3335773/sql-server-2008-geography-stdistance-value) – GSerg

+0

至於速度,我相信你想要一個[空間索引](https://msdn.microsoft.com/en-us/library/bb934196%28v=sql.120%29.aspx)([限制可能適用](https://msdn.microsoft。 COM/EN-US /庫/ bb895265%28V = sql.120%29.aspx#地理))。 – GSerg

+0

我相信它是以米爲單位 – mattias

回答

0

實際的返回值取決於你的地理列的SRID(空間參考標識符) - 此項設定,當您創建的地理項目。如果未指定SRID,則假定默認值爲4326,其對應於WGS 84數據。

就性能而言,您可以索引地理欄目,繼承人鏈接,讓您走上正確的道路。

https://technet.microsoft.com/en-us/library/bb964712(v=sql.105).aspx

+0

沒有回答問題。湯姆C自己發現了它。 – KeyOfJ

0

我用的4326

默認SRID值經過反覆試驗,我發現它返回米主場迎戰英里。

這本來是很好,如果微軟會作出自己的文檔更清晰。

+0

湯姆米也是使用PostGIS時的默認返回值,我們必須將其轉換爲英里。看來這是地理系統的標準。 – KeyOfJ

相關問題