2013-11-19 2 views
0

Итак, у меня есть код, который выполняет пространственный выбор на сайте, используя пространственный фильтр. Это отлично работает для обычных слоев классного класса, но сбой при запуске в классе свойств SDE. Мне интересно, может ли кто-нибудь пролить свет на то, что может быть проблемой? Ошибка, которую я получаю, - это HRESULT 0x80041515, который дает мне код ошибки, который я могу найти любую информацию в любом месте. Моя функция принимает полилинию и строку уровня и выбирает многоугольник в слое на основе центральной точки линии. Вот пример кода:Ошибка пространственного запроса ArcObjects в объектном классе SDE (vb.net)

 ' Creates centerpoint of line envelope 
     Dim pCenterPoint As IPoint = New Point 
     pCenterPoint.SpatialReference = pPolyline.SpatialReference 
     pCenterPoint.PutCoords((pPolyline.Envelope.XMin + pPolyline.Envelope.XMax)/2, (pPolyline.Envelope.YMin + pPolyline.Envelope.YMax)/2) 

     ' Expands envelope 
     Dim eCenterEnvelope As IEnvelope 
     eCenterEnvelope = pCenterPoint.Envelope 
     eCenterEnvelope.Expand(pMxDoc.SearchTolerance, pMxDoc.SearchTolerance, False) 

     ' Get layer of interest 
     Dim pLayer As IFeatureLayer = FindLayerByName(strSelect, layerType.FeatureLayer, False, False) 
     pLayer.Selectable = True 

     ' Create spatial filter 
     Dim spatialFilter As ISpatialFilter = New SpatialFilterClass() 
     spatialFilter.Geometry = eCenterEnvelope 
     spatialFilter.GeometryField = pLayer.Name 
     spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects 
     Dim queryFilter As IQueryFilter = New QueryFilterClass() 
     queryFilter = CType(spatialFilter, IQueryFilter) 

     ' Select features 
     Dim pFeatureSelection As IFeatureSelection = pLayer 
     pFeatureSelection.Clear() 'clear any current selections in the layer first 
     pFeatureSelection.SelectFeatures(queryFilter, esriSelectionResultEnum.esriSelectionResultAdd, True) 
     If pFeatureSelection.SelectionSet.Count = 0 Then 
      Return False 
     Else 
      Return True 
     End If 

код терпит неудачу, когда я называю pFeatureSelection.SelectFeatures(), но только тогда, когда featurelayer принадлежит featureclass SDE. Есть идеи?

Спасибо,

Люк

ответ

0

Так что я, наконец, решить эту проблему путем корректировки поля ввода геометрии в пространственный фильтр, который я создал.

Я изменил это: spatialFilter.GeometryField = pLayer.Name

к этому: spatialFilter.GeometryField = pLayer.FeatureClass.ShapeFieldName

Успех!

Смежные вопросы