Список слоев из АrcMap в ComboBox
-
- Новоприбывший
- Сообщения: 5
- Зарегистрирован: 02 апр 2012, 11:48
- Репутация: 0
Список слоев из АrcMap в ComboBox
Подскажите, как вывести из таблицы содержания ArcMap все слои (их названия) с точечными объектами в выпадающий список ComboBox на созданной форме. Форма открывается в ArcMap при нажатии на пользовательскую кнопку на ToolBox'e.
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Список слоев из АrcMap в ComboBox
Получаете интерфейс IMap с помощью IMxDocument::FocusMap
Получаем список слоев get_LayerCount
обходим все слои от 0 до LayerCount
и получаем интерфейс ILayer при помощи get_Layer
Приводим ILayer к IFeatureLayer.
Если не NULL, то вызываем get_FeatureClass
Получаем IFeatureClass
У него вызываем get_ShapeType и получаем тип геометерии.
Если esriGeometryPoint или esriGeometryMultipoint то получаем имя слоя get_Name у интерфейса ILayer и имя пихаем в комбо.
Вкратце, как-то так.
Получаем список слоев get_LayerCount
обходим все слои от 0 до LayerCount
и получаем интерфейс ILayer при помощи get_Layer
Приводим ILayer к IFeatureLayer.
Если не NULL, то вызываем get_FeatureClass
Получаем IFeatureClass
У него вызываем get_ShapeType и получаем тип геометерии.
Если esriGeometryPoint или esriGeometryMultipoint то получаем имя слоя get_Name у интерфейса ILayer и имя пихаем в комбо.
Вкратце, как-то так.
-
- Новоприбывший
- Сообщения: 5
- Зарегистрирован: 02 апр 2012, 11:48
- Репутация: 0
Re: Список слоев из АrcMap в ComboBox
спасибо, буду пробовать.
-
- Активный участник
- Сообщения: 184
- Зарегистрирован: 15 сен 2006, 16:15
- Репутация: 10
- Откуда: Москва
Re: Список слоев из АrcMap в ComboBox
мои 5 копеек
тут рекурсивный вызов для групповых слоев, иначе только слои верхнего уровня попадут в сети
тут рекурсивный вызов для групповых слоев, иначе только слои верхнего уровня попадут в сети
Код: Выделить всё
Function GetMapLayers(Optional OnlyPointLayers As Boolean = False) As Collection
On Error GoTo errHandle
Dim pLayer As esriCarto.ILayer
2277: Set GetMapLayers = New Collection
Dim i As Integer
2280: For i = 0 To pMap.LayerCount - 1
2281: Set pLayer = pMap.Layer(i)
2282: AddLayerToCollection pLayer, GetMapLayers, OnlyPointLayers
2283: Next i
Exit Function
errHandle:
HandleError True, "GetMapLayers " & c_sModuleFileName & " " & GetErrorLineNumberString(Erl), Err.Number, Err.Source, Err.Description, 4
End Function
Private Sub AddLayerToCollection(pLayer As esriCarto.ILayer, ByRef Coll As Collection, Optional OnlyPointLayers As Boolean = False)
Dim i As Long
Dim pGroup As esriCarto.IGroupLayer
Dim pComp As esriCarto.ICompositeLayer
Dim addLayer As Boolean
2298: If (TypeOf pLayer Is IGroupLayer) Then
2299: Set pGroup = pLayer
2300: Set pComp = pLayer
2301: For i = 0 To pComp.Count - 1
2302: AddLayerToCollection pComp.Layer(i), Coll, OnlyPointLayers
2303: Next i
2304: Else
2305: addLayer = True
2306: If (TypeOf pLayer Is IGeoFeatureLayer) Then
2307: If OnlyPointLayers Then
Dim pGFL As esriCarto.IGeoFeatureLayer
2310: Set pGFL = pLayer
2311: addLayer = False
2312: If pGFL.FeatureClass.ShapeType = esriGeometryPoint Then
2313: addLayer = True
2314: End If
2315: End If
2316: If addLayer Then
2317: Coll.Add pLayer
2318: End If
2319: End If
2320: End If
Exit Sub
errHandle:
HandleError True, "AddLayerToCollection " & c_sModuleFileName & " " & GetErrorLineNumberString(Erl), Err.Number, Err.Source, Err.Description, 4
End Sub
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
-
- Новоприбывший
- Сообщения: 5
- Зарегистрирован: 02 апр 2012, 11:48
- Репутация: 0
Re: Список слоев из АrcMap в ComboBox
Правильно я понимаю, что в свой проект надо добавить интерфейсы IMap, ImxDocument, ILayer, IFeatureCLass? Просто добавив ImxDocument и добавив все его методы в файл.cpp, все собиралось нормально, но при добавлении интерфейса IMap и добавлении его методов при сборке появляется критическая ошибка
Подскажите пожалуйста, а то впервые разрабатываю для ArcGIS.
Код: Выделить всё
fatal error C1001: An internal error has occurred in the compiler.(compiler file 'msc1.cpp', line 1393)
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Список слоев из АrcMap в ComboBox
Вы на чем пишете и в какой среде и под какую версию ArcGIS?
Возьмите исходники http://gis-lab.info/qa/agetools.html и посмотрите как там сделано подключение интерфейсов.
Возьмите исходники http://gis-lab.info/qa/agetools.html и посмотрите как там сделано подключение интерфейсов.
-
- Новоприбывший
- Сообщения: 5
- Зарегистрирован: 02 апр 2012, 11:48
- Репутация: 0
Re: Список слоев из АrcMap в ComboBox
в Visual studio 2005 на Visual C++. Версия ArcGIS 9.3
Спасибо за ссылку
Спасибо за ссылку
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя