Я использую шейп-файл (shp), который имеет поле добавления, называемое «ID». Файл формы чист и не имеет перекрывающихся полигонов. Когда я передаю этот shapeFile для следующей функции, я продолжаю получать непоследовательные результаты. (Идентификатор возвращается не всегда одинаково для одного и того же набора долготы широты).Почему sharpmap возвращает непоследовательные результаты при отображении из точки в полигон?
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.
Я делаю что-то неправильно/Есть ли лучший способ получить многоугольник, содержащий данную точку из шейп-файла?
Примечание: Я использую SharpMap v1.0.4.1
В любом случае, вы можете поделиться файлом SHP? –