Проверка на наличие атрибута

0 голосов
спросил 21 Июль, 08 от Scrama (880 баллов) в категории Программные продукты Esri
Доброе время суток.
Вот есть такой пример в DevKit'e VBA "Find a Feature Programmatically" - показывает ID элемента и имя слоя по клику мышки, а вот как можно проверить, имеет ли таблица атрибутов слоя определенные поля и получить их значение?

Т.е. цель - проверить слои карты на наличие слоя с определенным набором атрибутов и использовать их значения дальше.

5 Ответы

0 голосов
ответил 21 Июль, 08 от Scrama (880 баллов)
Так, с этим уже разобрался. Выглядит примерно так:

Do While Not pFeatureLayer Is Nothing
    'Only search the selectable layers
    If pFeatureLayer.Selectable Then
      ShapeFieldName = pFeatureLayer.FeatureClass.ShapeFieldName
      Set pSpatialFilter.OutputSpatialReference(ShapeFieldName) = pMap.SpatialReference
      pSpatialFilter.GeometryField = pFeatureLayer.FeatureClass.ShapeFieldName
      Set pFeatureClass = pFeatureLayer.FeatureClass
      Set pFeatureCursor = pFeatureClass.Search(pSpatialFilter, False) 'Do the search
      Set pFeature = pFeatureCursor.NextFeature 'Get the first feature
      If Not pFeature Is Nothing Then
      'Ищем слой с нужным полем в таблице
        If pFeature.Fields.FindFieldByAliasName("SubZoneCode") > -1 Then
            Set FindFeature = pFeature 'Exit if feature is valid
            Exit Do
        End If
      End If
    End If
    Set pFeatureLayer = pEnumLayer.Next
Loop

Находит нужный слой (или возвращает nothing), но дальше мне нужно прочитать значения полей для выбранного объекта, не нашел пока ничего лучше, чем

iKadastrZone = pFeature.Fields.FindFieldByAliasName("KadastrNum")
iSubZoneCode = pFeature.Fields.FindFieldByAliasName("SubZoneCode")
Set pRow = pFeature.Table.GetRow(pFeature.OID)
    
If Not pFeature Is Nothing Then MsgBox " [ " & pRow.Value(iKadastrNum) & " x " & pRow.Value(iSubZoneCode) & " ] на " & pFeature.Class.AliasName

KadastrNum - это строковое поле, содержащее примерное такие значения: "01:06:01", но в MsgBox'e появляется совершенно иное значение (для данного примера - "74"). Как это понять и побороть?
0 голосов
ответил 21 Июль, 08 от Scrama (880 баллов)
Ох, нашел опечатку! Странно, что VBA не ругнулся на необъявленную переменную о_О

Какой полезный форум, однако...
0 голосов
ответил 21 Июль, 08 от Grigoriy (127,020 баллов)
Always use Option Explicit (or turn on Require Variable Declaration in the VB Options dialog box). This forces all variables to be declared before use and, thereby, prevents careless mistakes

http://resources.esri.com/help/9.3/arcgisdesktop/com/vba_start.htm

ArcMap->(вызываем басик)alt+F11->(у басика)VBA->Tools->Options->Requiry Variable Declaration (включить галочку)

Будет требовать обьявление переменной.
Auto Check Syntax - лучше отключить - не будет ругаться, а будет показывать красным цветом ошибки.
0 голосов
ответил 22 Июль, 08 от Scrama (880 баллов)
Спасибо - очень полезная информация!
0 голосов
ответил 22 Сен, 08 от Aleksa (200 баллов)
А можно тоже самое, но только на С#
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...