ArcObjects (идентификация объекта)

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
Аватара пользователя
Шаки
Активный участник
Сообщения: 187
Зарегистрирован: 02 июл 2008, 11:57
Репутация: 1
Контактная информация:

ArcObjects (идентификация объекта)

Сообщение Шаки » 01 окт 2008, 14:00

Помогите, пожалуйста!!! Как при помощи VBA и COM библиотек ArcObjects определить к какому слою относится выбранный объект :cry:

Аватара пользователя
Шаки
Активный участник
Сообщения: 187
Зарегистрирован: 02 июл 2008, 11:57
Репутация: 1
Контактная информация:

Re: ArcObjects (идентификация объекта)

Сообщение Шаки » 01 окт 2008, 16:23

Всем спасибо, кто хоть обратил внимание, я сама разобралась, Я УМНИЧКА :D

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: ArcObjects (идентификация объекта)

Сообщение Максим Дубинин » 02 окт 2008, 00:07

а вы припишите ответ на свой вопрос, это хорошая практика
пристегивайтесь, турбулентность прямо по курсу

Аватара пользователя
Шаки
Активный участник
Сообщения: 187
Зарегистрирован: 02 июл 2008, 11:57
Репутация: 1
Контактная информация:

Re: ArcObjects (идентификация объекта)

Сообщение Шаки » 02 окт 2008, 20:40

Код: Выделить всё

Private Sub tool_selection_MouseDown(ByVal button As Long, _
              ByVal shift As Long, ByVal x As Long, ByVal y As Long)
  Dim pMxApp As IMxApplication
  Dim pDoc As IMxDocument
  Dim pMap As IMap
  Dim pIdentify As IIdentify
  Dim pPoint As IPoint
  Dim pIDArray As IArray
  Dim pFeatIdObj As IFeatureIdentifyObj
  Dim pIdObj As IIdentifyObj
  Dim pFeature As IFeature
  Dim pField As IField
  Dim i As Integer
   Dim pRowObj As IRowIdentifyObject
  Set pMxApp = Application
  Set pDoc = Application.Document
  Set pMap = pDoc.FocusMap
   ' ищет определяемый (нужный) слой
  For i = 0 To pMap.LayerCount - 1
        If pMap.Layer(i).Name = "breach_features" Then
            Set pIdentify = pMap.Layer(i)
        End If
  Next
  Set pPoint = pMxApp.Display.DisplayTransformation.ToMapPoint(x, y)
  Dim searchdistance As Long
  searchdistance = pDoc.ActiveView.Extent.Width * 0.005
  Dim pSegColl As ISegmentCollection
  Set pSegColl = New Polygon
  pSegColl.SetCircle pPoint, searchdistance
  Dim pGeom As IGeometry
  Set pGeom = pSegColl
  Set pIDArray = pIdentify.Identify(pGeom)
  If Not pIDArray Is Nothing Then
    Set pFeatIdObj = pIDArray.Element(0)
    Set pIdObj = pFeatIdObj
    Set pRowObj = pFeatIdObj
    Set pFeature = pRowObj.Row
    pIdObj.Flash pMxApp.Display
  MsgBox "Слой:" & pIdObj.Layer.Name & vbNewLine & "Feature:" & pIdObj.Name
   Else
    MsgBox " НЕ ТУДА Жмешь!!!!"
  End If
End Sub

Аватара пользователя
Шаки
Активный участник
Сообщения: 187
Зарегистрирован: 02 июл 2008, 11:57
Репутация: 1
Контактная информация:

Re: ArcObjects (идентификация объекта)

Сообщение Шаки » 02 окт 2008, 20:42

Ах да, процедура для UIControls

AndreyL
Завсегдатай
Сообщения: 483
Зарегистрирован: 17 авг 2006, 14:04
Репутация: 0
Откуда: Новосибирск

Re: ArcObjects (идентификация объекта)

Сообщение AndreyL » 04 окт 2008, 10:02

Шаки! Прекрасный код, Спасибо! Для полигонов и линий работает "лучше и не надо". Для точечного слоя не работает – не знаете, как быстренько исправить?

AndreyL
Завсегдатай
Сообщения: 483
Зарегистрирован: 17 авг 2006, 14:04
Репутация: 0
Откуда: Новосибирск

Re: ArcObjects (идентификация объекта)

Сообщение AndreyL » 04 окт 2008, 14:41

Разобрался! У меня точечный слой в географической системе, а линейные и полигональные в проекции. Чтобы корректно работало, нужно перепроецировать в проекцию pMap.FocusMap.

Аватара пользователя
Шаки
Активный участник
Сообщения: 187
Зарегистрирован: 02 июл 2008, 11:57
Репутация: 1
Контактная информация:

Re: ArcObjects (идентификация объекта)

Сообщение Шаки » 05 окт 2008, 19:45

Классно, что кому-то ещё пригодилось!!!! Я ведь только второй месяц с ArcObjects работаю, и программирую на VBA, от того так и горжусь :)

Ответить

Вернуться в «ArcGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: Semrush [Bot] и 4 гостя