2014-09-16 2 views
2

Я использую шейп-файл (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

+0

В любом случае, вы можете поделиться файлом SHP? –

ответ

0

Мы полагали, что вопрос здесь. Доступ к шейп-файлам через SharpMap v1.0.4.1 не является полностью потокобезопасным, вышеупомянутая функция вызывается несколькими потоками для того же файла формы, что вызывает проблемы с параллелизмом. На данный момент устранение распараллеливания устранило проблему. Последняя версия sharpmap v1.1, похоже, устраняет некоторые проблемы с совпадением.

Нашел в их выпуске в версии 1.1 - «Исправлена ​​проблема с одновременными читателей одного и того же шейп (блокировка ошибки SHX-файл)»