2013-10-15 83 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

相关问题