Use python para adicionar camadas ao sumário

13

Estou lutando para adicionar camadas ao sumário há algum tempo. Eu consegui adicionar camadas únicas, mas preciso percorrer uma pasta e adicionar todas as camadas. Shapefiles que não consigo adicionar. Apenas arquivos de camada. Abaixo está o código de onde estou:

for layer in shp_List:
mxd = arcpy.mapping.MapDocument("CURRENT")
dataFrame = arcpy.mapping.ListDataFrames(mxd, "*")[0]

outlayer = lyr
layerfile = os.path.join(base_Folder, lyr + ".lyr")

arcpy.MakeFeatureLayer_management(layer, outlayer)
arcpy.SaveToLayerFile_management(outlayer, layerfile, "ABSOLUTE")
addlayer = arcpy.mapping.Layer(layerfile)
arcpy.mapping.AddLayer(dataFrame, addlayer, "BOTTOM")



#addLayer = arcpy.mapping.Layer(layer)
#arcpy.mapping.AddLayer(dataFrame, addLayer, "BOTTOM")
#arcpy.RefreshTOC()
#arcpy.RefreshActiveView()
del addlayer, mxd

O código acima adicionará cada camada ao sumário, depois o remove irritantemente e adiciona a próxima. Quando o script inteiro termina, não resta mais nada no sumário. Eu tentei adicionar esse script a um modelo e criar um parâmetro de saída derivado que é adicionado como um parâmetro de modelo com a opção "adicionar à exibição" marcada. Também verifiquei as opções de geoprocessamento para garantir que a caixa a ser adicionada à exibição esteja marcada. Estou executando o Arc 10 (sem service packs). Alguém pode ajudar?

Oliver Burdekin
fonte

Respostas:

11

Você precisa criar os objetos MapDocument e DataFrame fora do loop que percorre suas camadas. Caso contrário, você estará começando com o mapa original todas as vezes.

então eu vou corrigir neste código:

mxd = arcpy.mapping.MapDocument("CURRENT")
dataFrame = arcpy.mapping.ListDataFrames(mxd, "*")[0]

for layer in shp_List:

    outlayer = layer + "_lyr" 
    layerfile = os.path.join(base_Folder, layer + ".lyr")

    arcpy.MakeFeatureLayer_management(layer, outlayer)
    arcpy.SaveToLayerFile_management(outlayer, layerfile, "ABSOLUTE")
    addlayer = arcpy.mapping.Layer(layerfile)
    arcpy.mapping.AddLayer(dataFrame, addlayer, "BOTTOM")



    #addLayer = arcpy.mapping.Layer(layer)
    #arcpy.mapping.AddLayer(dataFrame, addLayer, "BOTTOM")
arcpy.RefreshTOC()
arcpy.RefreshActiveView()
    #del addlayer, mxd

Para fazer um loop em uma lista de arquivos mxd na mesma pasta do script, você pode fazer o seguinte:

for mxd_name in mxd_names:
    mxd = arcpy.mapping.MapDocument(os.path.dirname(os.path.realpath(__file__))+"\\"+mxd_name+".mxd")
   dataFrame = arcpy.mapping.ListDataFrames(mxd, "*")[0]
geogeek
fonte
2
Eu estava procurando os comentários de @ geogeek, mas eles parecem estar ausentes. De qualquer forma, como mostra o código corrigido, você precisa criar os objetos MapDocument e DataFrame fora do loop que percorre suas camadas. Caso contrário, você estará começando com o mapa original todas as vezes.
PolyGeo
1
Obrigado pelo esclarecimento PolyGeo. Eu implementei as mudanças. No entanto, agora apenas o último arquivo da lista permanece no sumário. Todos os outros aparecem e desaparecem. Confuso. :)
Oliver Burdekin
1
Entendi trabalhando! Tudo no recuo certo? Os nomes das camadas que saem ainda são um pouco, mas isso é apenas estética. Muito obrigado pela sua ajuda espreitadelas!
Oliver Burdekin
1
geogeek, como fazer isso para vários mxd's?
newGIS
1
eu fiz uma resposta em minha edição
geogeek