我正在使用一个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并非完全是线程安全的,同一形状文件的多个线程调用了上述函数,这导致了并发问题。删除并行化解决了目前的问题。Sharpmap v1.1的最新版本似乎已解决了一些并发问题。
在v1.1的发行说明中找到了这一点-“同时读取同一shapefile的已修复问题(shx文件的锁定错误)”
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句