2010-06-02 67 views
1

假設我有在以下位置的一個點:確定點是否與另一點的35km半徑相交?可能在Linq?

緯度:47°36'N 經度:122°19'W

圍繞上述觀點,我繪製35公里半徑。我現在還有另外一點,我想看看他們是否落在35公里範圍內?我怎樣才能做到這一點?給Linq給定兩點的座標(lat,long)是否可能?

回答

4

當然。假定您有一個函數計算兩個位置之間的Haversine距離(由經度和緯度座標組成)。如果你不能找到一個here。然後只需使用該函數作爲Where子句中的選擇器。如果使用LINQ to SQL,則需要將它們實現爲Position對象,以便您可以將它們上的Haversine函數用作LINQ to對象;沒有對SQL的翻譯,儘管如果你真的不想先返回所有的點,你可能會創建一個表值函數來做同樣的事情。

var origin = new Position(47.6, 122.3); 
var close = positions.Where(p => Haversine.Distance(origin, p, DistanceType.Km) <= 35); 
+0

我會給你一個鏡頭,讓你知道。 – Xaisoft 2010-06-02 03:50:21

+0

嗨。我有它的一部分工作,但我有點困惑你的意思把它們物化到位置對象?你能幫我解決這個問題嗎? – Xaisoft 2010-06-02 05:56:17

+0

@ Xaisoft,因爲LINQ無法將對Haversine函數的調用轉換爲SQL,所以需要將它們作爲對象使用。這意味着,如果您從數據庫中獲取點數,則需要在Where子句之前將它們提取到內存中。最簡單的方法是在它之前的鏈中插入一個ToList()。這將導致查詢被實現(執行並帶入內存),您可以將它們作爲對象使用。 (續) – tvanfosson 2010-06-02 11:29:51

相關問題