Created
October 24, 2017 09:47
-
-
Save AlexArcPy/7ef5c5832ce76c4a23e5ca932a175f9e to your computer and use it in GitHub Desktop.
Python and comtypes: read map document layers and .lyr files with ArcObjects
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from comtypes.client import GetModule, CreateObject | |
from snippets102 import GetStandaloneModules, InitStandalone | |
GetStandaloneModules() | |
InitStandalone() | |
esriCarto = GetModule(r"C:\Program Files (x86)\ArcGIS\Desktop10.4\com\esriCarto.olb") | |
layerFile = CreateObject(esriCarto.LayerFile,interface=esriCarto.ILayerFile) | |
lyrs = ["C:\GIS\Temp\lyrs_remote_sde_many_features\c123.lyr", | |
r"C:\GIS\Temp\lyrs_local_sde\Park_boundary.lyr", | |
"C:\GIS\Temp\lyrs_remote_sde_few_features\Data.lyr"] | |
for lyr_file in lyrs: | |
layerFile.Open(lyr_file) | |
lyr = layerFile.Layer | |
desc = lyr.QueryInterface(esriCarto.IFeatureLayer) | |
print desc.DataSourceType | |
#u'SDE Feature Class' | |
print desc.FeatureClass.AliasName |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pMapDocument = snippetarcgis102.NewObj(esriCarto.MapDocument,esriCarto.IMapDocument) | |
pMapDocument.open(path) #like pDoc | |
pMap = pMapDocument.Map(0) | |
pEnumLayer = pMap.Layers(None,True) | |
#key = name of layer from gdb (en UPPER CASE) value =ptr to IGeoFeatureLayer layers (not group layers) | |
layer_ptr_dict={} | |
pLayer = pEnumLayer.Next() | |
while pLayer: | |
pGeoFeatureLayer = snippetarcgis102.CType(pLayer,esriCarto.IGeoFeatureLayer) | |
if pGeoFeatureLayer: # list of IGeofeature layers (not group layers) | |
en_name = pGeoFeatureLayer.FeatureClass.AliasName.encode('utf-8') # name in GDB, not in TOC | |
layer_ptr_dict [en_name] = pGeoFeatureLayer | |
else: # else it is group layer and we collapse it | |
group_layer = snippetarcgis102.CType(pLayer,esriCarto.IGroupLayer) | |
group_layer.Expanded = False #collapse group layers | |
pLayer = pEnumLayer.Next() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment