Идентификация объекта в VB

0 голосов
спросил 24 Фев, 05 от Гость (210,080 баллов) в категории Программные продукты Esri

Объясните, пожалуйста, почему 

 Set pIDArray = pIdentify.Identify(pPoint)

идентифицирует только полигоны, а точки и линии - нет?

4 Ответы

0 голосов
ответил 16 Март, 05 от Ulukbek (6,020 баллов)

прежде чем вызвать Set pIDArray = pIdentify.Identify(pPoint) обычно на pIdentify передается слой, в каком надо произвести идентификацию, так что какой слой укажешь на pIdentify - с того слоя и будет идентификация.

например:

set pIdentify = точешный слой
Set pIDArray = pIdentify.Identify(pPoint)

image

0 голосов
ответил 16 Март, 05 от Гость (210,080 баллов)

Спасибо.

В pIdentify.Identify(pPoint) вместо pPoint  надо указывать pPoligon.

Дальше тоже есть проблемы: что возвращает IIdentifyObj.Name, у меня почему разные поля таблицы на разных картах.

0 голосов
ответил 17 Март, 05 от Ulukbek (6,020 баллов)

А какая необходимость в использований IIdentifyObj.Name?

Вот пример кода, к-ый просматривает все слои и значения всех полей под точкой, к точке применяется буфер, тогда нет необходимости в полигоне...

Sub VBIdentify(mMap As IMap, pp As IPoint)
   Dim pIdentify As IIdentify
   Dim pIDArray As IArray
   Dim pLayer As ILayer
   Dim pFeatIdObj As IFeatureIdentifyObj
   Dim pIdObj As IIdentifyObj
   Dim pRowObj As IRowIdentifyObject
   Dim pFeature As IFeature
   Dim i As Long, l As Long, nl As Long
   Dim pGeo As IGeometry
   Dim pTOPO As ITopologicalOperator
  
   Set pTOPO = pp
   Set pGeo = pTOPO.Buffer(10)
  
   For nl = 0 To mMap.LayerCount - 1
      Set pLayer = mMap.Layer(nl)
      If pLayer Is Nothing Then Exit Sub
      Set pIdentify = pLayer
      Set pIDArray = pIdentify.Identify(pGeo)
      If Not pIDArray Is Nothing Then
     
         For l = 0 To pIDArray.Count - 1
            Set pFeatIdObj = pIDArray.Element(l)
            Set pIdObj = pFeatIdObj
            Debug.Print "LAyer Name = " & pIdObj.Layer.Name
            Set pRowObj = pFeatIdObj
            Set pFeature = pRowObj.Row
            For i = 0 To pFeature.Fields.FieldCount - 1
               If pFeature.Fields.Field(i).Type < 7 Then
                  Debug.Print "Field Name = " & pFeature.Fields.Field(i).Name
                  Debug.Print "     Value = " & pFeature.Value(i)
               End If
            Next
         Next
      End If
   Next
    
End Sub

 

0 голосов
ответил 18 Март, 05 от Гость (210,080 баллов)
*** Спасибо! ***
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...