Verwenden Sie Python, um Ebenen zum Inhaltsverzeichnis hinzuzufügen

13

Ich habe seit einiger Zeit mit dem Hinzufügen von Ebenen zum Inhaltsverzeichnis zu kämpfen. Ich habe es geschafft, einzelne Ebenen hinzuzufügen, muss aber einen Ordner durchlaufen und alle Ebenen hinzufügen. Shapefiles kann ich gar nicht hinzufügen. Nur Layer-Dateien. Unten ist der Code, an dem ich mich befinde:

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

Der obige Code fügt jede Ebene zum Inhaltsverzeichnis hinzu, entfernt sie dann wütend und fügt die nächste hinzu. Wenn das gesamte Skript beendet ist, befindet sich nichts mehr im Inhaltsverzeichnis. Ich habe versucht, dieses Skript zu einem Modell hinzuzufügen und einen abgeleiteten Ausgabeparameter zu erstellen, der dann als Modellparameter hinzugefügt wird, wobei "Zur Anzeige hinzufügen" aktiviert ist. Ich habe auch die Geoverarbeitungsoptionen überprüft, um sicherzustellen, dass das Kontrollkästchen zum Hinzufügen zur Anzeige aktiviert ist. Ich verwende Arc 10 (keine Service Packs). Kann jemand helfen?

Oliver Burdekin
quelle

Antworten:

11

Sie müssen die MapDocument- und DataFrame-Objekte außerhalb der Schleife erstellen, die durch Ihre Ebenen verläuft. Andernfalls beginnen Sie jedes Mal mit der Originalkarte.

Also werde ich in diesem Code korrigieren:

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

So können Sie eine Liste von mxd-Dateien im selben Ordner des Skripts einschleifen:

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
quelle
2
Ich habe nach @ geogeeks Bemerkungen gesucht, aber sie scheinen nicht vorhanden zu sein. In jedem Fall müssen Sie, wie der korrigierte Code zeigt, die MapDocument- und DataFrame-Objekte außerhalb der Schleife erstellen, die durch Ihre Ebenen verläuft. Andernfalls beginnen Sie jedes Mal mit der Originalkarte.
PolyGeo
1
Vielen Dank für die Klarstellung PolyGeo. Ich habe die Änderungen implementiert. Jetzt bleibt jedoch nur die letzte Datei in der Liste im Inhaltsverzeichnis. Alle anderen erscheinen dann verschwinden. Flummoxed. :)
Oliver Burdekin
1
Habe es geschafft! Alles in der Einrückung richtig? Die Layernamen, die rauskommen, sind immer noch ein Mees, aber das ist nur Ästhetik. Vielen Dank für Ihre Hilfe guckt!
Oliver Burdekin
1
geogeek, wie geht das bei mehreren mxd's?
newGIS
1
ich habe eine
antwort