2013-10-15 22 views
10

ポイントのリスト(実際にはショップの座標)があり、特定の境界内にあるかどうかを判断する必要があります。 C#のでGeoCoordinateポイントが境界内にあるかどうかを見つける方法

私は& 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ポイントの緯度/経度と<=そのneポイントの緯度/経度であることを確認できませんか? –

+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でも、コーナーケースは1つしかないと言っていました。あなたの緯度/経度の包含ボックスが極の1つをカバーする場合、それはさらに別のチェックが必要です。しかし興味深いことに、そのケースは2つのコーナーを通過するだけでは表現できないため、あなたがそれを考慮する必要があることがわかっていない限り大きな問題ではありません。極を含むことができるボックスが必要な場合は、2つの点をクラスに集めて、ブールspansPoleを追加する必要があります。メンバー。 – philologon

関連する問題