ArcMap 10.6 "schreibt" eine Layer-Datei
Ich möchte eine Gruppenebene (oder eine ähnliche) aus vielen Rasterdateien erstellen, die nur angezeigt werden, wenn ich sie ankreuze. Sie müssen nicht alle angezeigt werden, wenn ich die Ebene erstelle. Andernfalls stürzt mein Standard-Office-Einstiegscomputer ab.
Ich muss diese "Ebene" neu erstellen, wenn Dateien verschoben und neue im Netzwerk gefunden werden.
Also bin ich nach Tricks für
- ein schneller Weg, um sie alle in eine "Ebene" zu bringen
- Aber wenn jedes Raster deaktiviert ist / nicht angezeigt wird, stürzt meine Maschine nicht ab
Ich habe die Liste von 100 ungeraden Rasterdateipfaden in einer Textdatei gesammelt. Kann ich dies einfach in eine Art Textdatei umwandeln, die in ArcMap importiert wird und die Liste der Raster anzeigt, ohne dass diese zur Anzeige angekreuzt sind? Eine Textdatei mit etwas um jede Dateiadresse gewickelt, z. B. XML?
Es spielt keine Rolle, ob es in das ESRI-Binärformat einer Layer-Datei konvertiert. Es ist wichtiger, eine große Ebene ohne Ziehen und Ablegen von Bildern zu erstellen.
Hinzugefügt am 09.10.2020
Folgen Sie dem Vorschlag von Michael Stimson, ich habe Folgendes versucht
import arcpy
mxd_path = arcpy.GetParameterAsText(0)
mxd = arcpy.mapping.MapDocument(mxd_path)
text = arcpy.GetParameterAsText(1)
layer_path = arcpy.GetParameterAsText(2)
lyr = arcpy.mapping.Layer(layer_path)
df = arcpy.mapping.ListDataFrames(mxd)
log = open(text + ".log", "w")
f = open(text, "r").readlines()
for filepath in f:
log.write(filepath)
newlayer = arcpy.mapping.Layer(filepath)
arcpy.mapping.AddLayerToGroup(df, lyr, newlayer)
lyr.save()
Der einzige Fehler ist AddLayerToGroup. Die UNC-Netzwerkadresse erstellt erfolgreich eine Ebene und ich habe sogar isoliert, um zu überprüfen, ob die lyr.save-Zeile von selbst funktioniert.
Error:
Traceback (most recent call last):
File "K:\Tim K\Program Resources\ArcGIS\Arcgis10.1\GridsToLayer.py", line 22, in <module>
arcpy.mapping.AddLayerToGroup(df, lyr, newlayer)
File "c:\program files (x86)\arcgis\desktop10.6\arcpy\arcpy\utils.py", line 182, in fn_
return fn(*args, **kw)
File "c:\program files (x86)\arcgis\desktop10.6\arcpy\arcpy\mapping.py", line 87, in AddLayerToGroup
assert isinstance(data_frame, DataFrame)
AssertionError
Failed to execute (GridsToLayer).
Ich vermute, das Problem liegt in der AddLayerToGroup-Hilfe, in der angegeben ist, dass der Layer, den ich dem Gruppenebene hinzufügen möchte, " eine Ebenendatei auf der Festplatte oder eine Ebenendatei in einem Kartendokument " sein muss. Das würde bedeuten, dass die Rasterdateien an einen neuen Speicherort kopiert und jeweils in eine Ebene konvertiert werden. Ich hatte gehofft, einfach darauf zu verweisen, wo sie jetzt sind. Dieser Speicherort kann sich jede Woche ein wenig ändern. Einige Dateien durchlaufen einen QA / QC- "Prozess" durch andere.
Es sieht so aus, als ob ich einen nicht verwalteten Raster-Katalog möchte, der auf Dateien verweist, anstatt in eine GDB zu kopieren. Kann es jedoch für jedes Raster auf einen Arbeitsbereich verweisen?
Es stellt sich heraus, ja, aber es werden nicht die Raster angezeigt, sondern nur die Polygone, in denen sie sich befinden.
Siehe Antwort unten - geändert, um einen MXD von Rastern zu erstellen.
Antworten
Nach einigem Stöbern stellte ich fest, dass es keine Möglichkeit gibt, eine neue Gruppenebene in arcpy zu erstellen, die eine vorgeschlagene Problemumgehung enthält. Das Zeichnen von ArcMap kann auch nicht von arcpy aus angehalten werden, was eine kleine Enttäuschung darstellt.
Es ist möglich, Ebenen zu laden, die mit Python nicht sichtbar sind, und die Datenpfade aus einer Textdatei zu lesen:
import os, sys, arcpy
FileOfPaths= r'E:\Testing\DataPaths.txt'
OpenDoc = arcpy.mapping.MapDocument('CURRENT') # reference to the current document
FocusFrame = OpenDoc.activeDataFrame # and the active data frame
with open(FileOfPaths,'r') as InFile:
for Line in InFile:
NewLay = arcpy.mapping.Layer(Line) # data path makes new layer
NewLay.visible = False
NewLay.name = os.path.splitext( os.path.basename(Line) )[0] # the name for this data source
#arcpy.mapping.AddLayerToGroup(FocusFrame,NewGL,NewLay)# use this if you have a group layer
arcpy.mapping.AddLayer(FocusFrame,NewLay)# use this if you don't
del NewLay
Da das Ebenenobjekt vor dem Hinzufügen vorhanden ist, können Sie die sichtbare Symbologie deaktivieren und sogar ändern, bevor die Ebene zur Karte hinzugefügt wird. Löschen Sie dann die Referenz, bevor Sie eine neue erstellen. Andernfalls könnte arcpy glauben, dass Sie die erste hinzugefügte Ebene jeweils ändern möchten Nachfolgende Ebene und Sie haben nur die letzte Ebene.
Die Code erwartet aus ArcMap ausgeführt werden, entweder mit der Python - Konsole oder als Script - Tool , sondern würde genauso gut funktionieren , wenn Sie ohne Öffnen sie Ihre Schichten zu einem vorhandenen Kartendokument hinzufügen möchten, ändern Sie einfach OpenDoc = arcpy.mapping.MapDocument('CURRENT')zu , OpenDoc = arcpy.mapping.MapDocument(r'c:\full\path\to\yourMapDocument.mxd')dann können Sie ArcMap Shell zu Öffnen Sie das Fokusdokument. Da das vorhandene Dokument nicht geöffnet ist, wird es nicht neu gezeichnet.