2014-03-04 25 views
1

MSDN documentation只定義的返回值爲:DbGeometry.Distance返回哪些單位?

雙值,指定在該幾何形狀值和其他兩個最接近 點之間的距離。

返回哪些單位?當測試值與我認識的任何東西都不匹配時,並且在WHERE子句中不起作用。

var results = db.Locations.Where(t => t.ItemPoint.Distance(targetPoint) <= 100); // 100km 

注:我使用MySQL與使用.NET連接器,它不利用SRID值支持實體框架。

回答

1

雖然MSDN文檔可以做更多的信息,但它並沒有指定值的度量,因爲它的變化取決於SRID(或缺少)。

沒有SRID,幾何只是在平面網格(或平面)系統上工作(想想老派的方形紙)。因此你的距離的答案是

A2 + B2 = C2 >>>>>>C = SQRT(A2 + B2)的簡單畢達哥拉斯結果。

例如:

using System.Data.Entity.Spatial; 

DbGeometry geom1 = DbGeometry.FromText("POINT(0 0)"); 
DbGeometry geom2 = DbGeometry.FromText("POINT(50 50)"); 

Console.WriteLine(geom1.Distance(geom2)); 

//Returns 70.71067811 (the square root of (50 sq'd + 50 sq'd)). 

你會發現這blog一個有趣的閱讀,跳到一半時頁面,你會發現如何創建一個用戶自定義半正矢計算方法,這將讓你將結果轉換爲距離。

儘管如此,如果您不能在EF for MySQL中映射Stored Procedures,那麼您需要使用老式的ADO來獲得結果。請確保您使用st_distance超過mbr_distance,因爲st_distance將是準確的,並且mbr_distance將包含誤報。您將需要MySQL 5.6.1 for st_distance。

最後,如果可能的話,如果空間數據很重要,則考慮另一個數據庫。