2

シンプルなコンソール アプリで Net Topology Suite (v 1.13.2) を使用して、道路情報を含むシェープ ファイル内のポイントを見つけようとしています。

形状ファイルをロードし、型付きリストにデータを保存し、データが期待どおりに見えることを確認しました..

リストを反復処理するときに、特定のポイントがシェイプ ファイル内のいずれかのシェイプ内にあるかどうかを確認したいと考えています。

簡単に聞こえます!

私のコードは次のようになります。

    private static Feature FindPoint(double lat, double lon)
    {
        Coordinate c = new Coordinate(lat, lon);

        IGeometry g = factory.CreateGeometry(Geometry.DefaultFactory.CreatePoint(c));

        foreach(Feature f in Features)
        {
            if (f.Geometry.Overlaps(g))
                return f;
            if (f.Geometry.EnvelopeInternal.Contains(c))
                return f;
            if (f.Geometry.Boundary.Contains(g))
                return f;
            if (f.Geometry.Contains(g))
                return f;
        }
        return null;
    }

これらのステートメントのいずれも、または私が試した他のステートメントのいずれも、ポイントがいずれかの形状内にあるという兆候を返しません.

ファイル内の形状の 1 つから選んだ緯度と経度を試しています。だからそこにあるはずです。

私がどこで間違っているのかについてのアイデアはありますか?

@Habib、確認しましたが、ジオメトリ タイプは LineString ですが、エンベロープはポリゴンとして定義されています。

あなたが送ったリンク、以下の新しいコードを見ました。

DistanceOp dop = new DistanceOp(f.Geometry,g);
var np = dop.NearestPoints();
var d = dop.Distance();

そこに示されているようにしようとしましたが、選択した点と線の間の距離に対して得られる答えは 71.236662957979718 です。

71.236662957979718 なに?cm、メートル、度???

とにかく奇妙なことに、私は線の 1 つで点を選んだので、答えは 0 であると予想されます。

4

0 に答える 0