gpt4 book ai didi

c# - 为什么 sharpmap 在从点映射到多边形时返回不一致的结果?

转载 作者:太空宇宙 更新时间:2023-11-03 15:50:53 26 4
gpt4 key购买 nike

我正在使用一个 shapefile(shp),它有一个名为“ID”的附加字段。 shapefile 是干净的,没有任何重叠的多边形。当我将此 shapeFile 传递给以下函数时,我不断得到不一致的结果。 (对于同一组纬度经度,返回的 Id 并不总是相同的)。

    public static long? GetIdFromLatLong(IProvider provider, double lat, double lon)
{
var matchingRowIds = new Collection<uint>();
var vertex = new GeoAPI.Geometries.Coordinate(lon, lat);

var ntsPoint = new NetTopologySuite.Geometries.Point(vertex.X, vertex.Y);

var envelop = new GeoAPI.Geometries.Envelope(vertex);
if (!provider.IsOpen)
{
provider.Open();
}
var ids = provider.GetObjectIDsInView(envelop);

foreach (uint id in ids)
{
var geom = provider.GetGeometryByID(id);

if (geom.Contains(ntsPoint))
{
matchingRowIds.Add(id);
}
}
// Get region Id from RowId
var matchedId = matchingRowIds.Count == 0
? null
: matchingRowIds.Select(i => (long?) provider.GetFeature(i)["ID"]).FirstOrDefault(i => i != 0);
return matchedId;
}

我最初怀疑有多个多边形正在匹配,并且 FirstOrDefault 导致我得到不同的结果,但情况似乎并非如此,因为当我在此函数中放置断点时,我总是只有一个matchingRowIds 中的条目。

我做错了什么/是否有更好的方法从 shapefile 中获取包含给定点的多边形?

注意:我使用的是 sharpMap v1.0.4.1

最佳答案

我们在这里解决了这个问题。通过 SharpMap v1.0.4.1 访问 shapefile 并不完全是线程安全的,上述函数被多个线程调用相同的 shape 文件,这导致了并发问题。删除并行化暂时解决了这个问题。最新版本的 sharpmap v1.1 似乎已经修复了一些并发性问题。

在他们的 v1.1 发行说明中找到了这一点——“修复了同时读取同一 shapefile 的问题(shx 文件的锁定错误)”

关于c# - 为什么 sharpmap 在从点映射到多边形时返回不一致的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25877036/

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