
ArcObjects (идентификация объекта)
- Шаки
- Активный участник
- Сообщения: 187
- Зарегистрирован: 02 июл 2008, 11:57
- Репутация: 1
- Контактная информация:
ArcObjects (идентификация объекта)
Помогите, пожалуйста!!! Как при помощи VBA и COM библиотек ArcObjects определить к какому слою относится выбранный объект 

- Шаки
- Активный участник
- Сообщения: 187
- Зарегистрирован: 02 июл 2008, 11:57
- Репутация: 1
- Контактная информация:
Re: ArcObjects (идентификация объекта)
Всем спасибо, кто хоть обратил внимание, я сама разобралась, Я УМНИЧКА 

- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: ArcObjects (идентификация объекта)
а вы припишите ответ на свой вопрос, это хорошая практика
пристегивайтесь, турбулентность прямо по курсу
- Шаки
- Активный участник
- Сообщения: 187
- Зарегистрирован: 02 июл 2008, 11:57
- Репутация: 1
- Контактная информация:
Re: ArcObjects (идентификация объекта)
Код: Выделить всё
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 (идентификация объекта)
Ах да, процедура для UIControls
-
- Завсегдатай
- Сообщения: 483
- Зарегистрирован: 17 авг 2006, 14:04
- Репутация: 0
- Откуда: Новосибирск
Re: ArcObjects (идентификация объекта)
Шаки! Прекрасный код, Спасибо! Для полигонов и линий работает "лучше и не надо". Для точечного слоя не работает – не знаете, как быстренько исправить?
-
- Завсегдатай
- Сообщения: 483
- Зарегистрирован: 17 авг 2006, 14:04
- Репутация: 0
- Откуда: Новосибирск
Re: ArcObjects (идентификация объекта)
Разобрался! У меня точечный слой в географической системе, а линейные и полигональные в проекции. Чтобы корректно работало, нужно перепроецировать в проекцию pMap.FocusMap.
- Шаки
- Активный участник
- Сообщения: 187
- Зарегистрирован: 02 июл 2008, 11:57
- Репутация: 1
- Контактная информация:
Re: ArcObjects (идентификация объекта)
Классно, что кому-то ещё пригодилось!!!! Я ведь только второй месяц с ArcObjects работаю, и программирую на VBA, от того так и горжусь 

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