2013-10-15 85 views
10

我有一個點列表(實際上是商店座標),我需要確定它們是否位於特定邊界內。如何查找地理座標點是否在邊界內

在C#中我知道如何從緯度& LNG

var point = new GeoCoordinate(latitude, longitude); 

創建一個點,但我怎麼能檢查,如果該點被包含在那些其他兩個點定義的矩形:

var swPoint = new GeoCoordinate(bounds.swlat, bounds.swlng); 
    var nePoint = new GeoCoordinate(bounds.nelat, bounds.nelng); 

有沒有我可以使用的任何類方法?

+0

難道你不能只檢查你的點的緯度/經度是> = sw點的緯度/經度和<=新點的緯度/經度? –

+0

我們需要更多細節。您是否使用http://msdn.microsoft.com/en-us/library/windows/apps/windows.devices.geolocation.geocoordinate或http://msdn.microsoft.com/en-us/library/system.device .location.geocoordinate.aspx? – philologon

+0

是的,我正在使用System.Device.Location.GeoCoordinate,但如果這不是正確的解決方案,我可以使用其他的東西。 –

回答

10

如果您正在使用 http://msdn.microsoft.com/en-us/library/system.device.location.geocoordinate.aspx

您必須編寫自己的方法做這項檢查。你可能希望把它的擴展方法(在擴展方法可用資源的地塊在線)

然後,它幾乎是一樣簡單

public static Boolean isWithin(this GeoCoordinate pt, GeoCoordinate sw, GeoCoordinate ne) 
{ 
    return pt.Latitude >= sw.Latitude && 
      pt.Latitude <= ne.Latitude && 
      pt.Longitude >= sw.Longitude && 
      pt.Longitude <= ne.Longitude 
} 

有一個角落的情況下考慮。如果由sw,ne定義的方框超過180度經度,上述方法將失敗。因此必須編寫額外的代碼來涵蓋這種情況,從而降低了方法的性能。

+0

您的解決方案不考慮穿越赤道時,我認爲,如果跨越赤道的邊界不起作用。 –

+0

實際上越過赤道對於給定的解決方案並不是問題,因爲赤道以南的緯度僅僅是負數。只有穿過180經線需要更多的代碼。 – philologon

+0

@Max Favilli但是我說/只有一個角落案件。如果你的緯器/長包裝盒覆蓋其中一個杆,那麼需要再次檢查。但是,有趣的是,這種情況不能僅僅通過兩個角落來表示,所以它不是一個大問題,除非你知道你需要解釋它。如果你需要一個可以包含極點的框,你需要將這兩個點聚集到一個類中並添加一個布爾spansPole;會員。 – philologon

相關問題