1

C#に移植されたNetTopolgySuiteを使用しており、特定の座標緯度/経度が、座標緯度/経度値の配列として定義された指定された領域内にあるかどうかを判断する必要があります。

そのため、私はCGAlgorithms.IsPointInRingメソッドを使用しようとしています。これは、ほとんどの場合、完全に機能します。問題は、国際日付変更線にまたがるエリアがある場合に発生します。たとえば、東170から西170で終わる1番目の線です。IsPointInRingを呼び出すと、テスト対象の座標が領域内にある場合でもFALSEが返されます。

IsPointInRingのドキュメントには

リングはどちらの方向にも向けることができます。

これは時計回りまたは反時計回りだと思います。リングが誤って決定されているのは、170Eastから170Westに向かって、IDLを横切っていない1番目の線であると推測できます。私の線は、メジャーアークではなく、マイナーアークである必要があります。

日付変更線と交差する場合と交差しない場合がある座標配列に座標を含めるかどうか、または関数を誤って使用しているかどうかをテストする方法を誰かにアドバイスできますか?NetTopologySuiteを引き続き使用したいと思います。

4

1 に答える 1

1

テスト後、「マイナー」アークが180W / 180E子午線を横切る場合、NetTopologySuiteIsPointInRingプロシージャが「メジャー」アークとして実行されていると見なされることを確認できます。回避策として、リングに対してポイントをテストする場合、関数を呼び出す前に、すべての経度値を180W..0Wの範囲からシフトして180E..360Eを実行します。つまり、170W = 190Eがシフトされ、170E=170Eがシフトされません。技術的には正しくありませんが、IsPointInRingプロシージャを呼び出して、正しい答えを得ることができます。

于 2012-11-29T14:13:10.650 に答える