查找Lat Long位置是否在esri shapefile中的形状

时间:2014-09-17 16:01:56

标签: c# shapefile esri nettopologysuite

我正在尝试在一个简单的控制台应用程序中使用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;
    }

这些陈述或我试过的任何其他陈述均未返回任何迹象表明该点在任何形状内。

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

关于我哪里出错的任何想法?

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

我查看了您发送的链接,下面是新代码;

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

试图按照那里的指示去做,但我得到的点与我所选择的点之间的距离是71.236662957979718。

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

奇怪无论如何,因为我在其中一条线上选了一个点,所以我希望答案为0。

0 个答案:

没有答案