我正在使用一个 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 导致我得到不同的结果,但似乎也不是这样,因为当我在这个函数中放置一个断点时,我总是在 matchRowIds 中只有一个条目.
我做错了什么/有没有更好的方法来从 shapefile 中获取包含给定点的多边形?
注意:我使用的是 sharpMap v1.0.4.1