簡體   English   中英

查找 Lat Long position 是否在 esri shapefile 中

[英]Find if Lat Long position is in a shape in an esri shapefile

我正在嘗試在一個簡單的控制台應用程序中使用 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;
    }

這些陳述或我嘗試過的任何其他陳述都沒有返回任何指示該點位於任何形狀內的指示。

我正在嘗試從文件中的一個形狀中挑選的經緯度。 所以它應該在那里。

關於我哪里出錯的任何想法?

@Habib,我已經檢查過了,幾何類型是 LineString,但是信封被定義為多邊形。

我查看了您發送的鏈接,下面是新代碼;

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

嘗試按照那里的指示進行操作,但我得到的關於我選擇的點與線之間的距離的答案是 71.236662957979718。

71.236662957979718 什么? 厘米,米,度???

無論如何,很奇怪,因為我在其中一條線上選擇了一個點,所以我希望答案為 0。

在創建坐標時將經度放在緯度之前讓它對我有用。

更正的代碼:

private static Feature FindPoint(double lat, double lon)
{
    Coordinate c = new Coordinate(lon, lat);
    Geometry g = Geometry.DefaultFactory.CreatePoint(c);

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

我正在使用 NetTopologySuite.IO.Esri 在這里找到: https://github.com/NetTopologySuite/NetTopologySuite.IO

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM