gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 06:45:07 26 4
gpt4 key购买 nike

我正在尝试在一个简单的控制台应用程序中使用 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,但是Envelope被定义为多边形。

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

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

关于c# - 查找 Lat Long 位置是否在 esri shapefile 中的形状中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25895306/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com