查找Lat-Long位置是否在esri形状文件中的形状中

本文关键字:文件 esri Lat-Long 位置 是否 查找 | 更新日期: 2023-09-27 18:22:17

我正试图在一个简单的控制台应用程序中使用Net Topology Suite(v1.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;
    }

这些语句或我尝试过的任何其他语句都没有返回任何指示,表明该点位于中的任何形状内

我正在尝试从文件中的一个形状中挑选的Lat和Long!所以它应该在那里。

关于我哪里出了问题,有什么想法吗?

@Habib,我已经检查过了,几何体类型是LineString,但信封被定义为多边形。

我已经看了你发送的链接,下面是新代码;

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

我试着按照上面的指示去做,但我得到的答案是我选择的点和直线之间的距离是71.236662957979718。

71.2366629579718什么?厘米、米、度???

不管怎么说都很奇怪,因为我在其中一条线上选了一个点,所以我希望答案是0。

查找Lat-Long位置是否在esri形状文件中的形状中

在创建坐标时将经度放在纬度之前,这对我来说很有用。

更正代码:

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.Esri.