ArcMap 10.6 “scrive” un file layer
Voglio creare un livello di gruppo (o simile) di molti file raster che vengono visualizzati solo quando li spendo. Non devono essere visualizzati tutti quando creo il livello, altrimenti la mia macchina entry level standard per ufficio andrà in crash.
Avrò bisogno di ricreare questo "livello" quando i file vengono spostati e se ne trovano di nuovi sulla rete.
Quindi cerco trucchi per
- un modo rapido per riunirli tutti in un "livello"
- ma con ogni raster deselezionato / non visualizzato in modo che la mia macchina non si blocchi
Ho raccolto l'elenco di 100 percorsi di file raster dispari in un file di testo. Posso facilmente trasformarlo in una sorta di file di testo che importa in ArcMap e mostra l'elenco delle griglie senza che sia spuntato per visualizzarlo? Un file di testo con qualcosa avvolto attorno a ciascun indirizzo di file, come XML?
Non importa se viene convertito nel formato binario ESRI di un file di livello. Creare un livello di grandi dimensioni senza trascinare e rilasciare le immagini è più importante.
Aggiunto il 10/9/2020
Segui il suggerimento di Michael Stimson, ho provato quanto segue
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()
L'unico errore è AddLayerToGroup. L'indirizzo di rete UNC crea con successo un livello e ho persino isolato per verificare che la riga lyr.save funzioni da sola.
Errore:
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).
Ho il sospetto che il problema sia nell'help di AddLayerToGroup dove si afferma che il layer che voglio aggiungere al layer del gruppo deve essere " un file layer su disco o un file layer in un documento mappa ". Ciò significherebbe copiare i file raster nella nuova posizione del disco e convertirli in un livello. Speravo semplicemente di fare riferimento a dove sono ora. Quella posizione può cambiare un po 'ogni settimana alcuni file passano attraverso un "processo" QA / QC da parte di altri.
Sembra che io voglia un catalogo raster non gestito, che faccia riferimento ai file invece di copiarli in un gdb. Ma può fare riferimento a uno spazio di lavoro per ogni raster?
Risulta di sì, ma non mostra i raster, solo i poligoni dove si trovano.
Vedi la risposta sotto - modificata per creare un mxd di raster.
Risposte
Dopo aver cercato un po 'ho scoperto che non c'è modo di creare un nuovo livello di gruppo in arcpy che viene fornito con una soluzione alternativa suggerita. Né è possibile mettere in pausa il disegno di ArcMap da arcpy, il che è un po 'una delusione.
È possibile caricare layer come non visibili con python, leggendo i percorsi dati da un file di testo:
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
Poiché l'oggetto layer esiste prima di essere aggiunto puoi disattivare il visibile e persino cambiare la simbologia prima che il layer venga aggiunto alla mappa quindi eliminare il riferimento prima di crearne uno nuovo altrimenti arcpy potrebbe pensare che tu voglia modificare il primo layer aggiunto da ciascuno livello successivo e avrai solo l'ultimo livello.
Il codice si aspetta di essere eseguito dall'interno di ArcMap, con la console python o come uno strumento di script, ma funzionerebbe ugualmente bene se si desidera aggiungere i layer a un documento di mappa esistente senza aprirlo, basta passare OpenDoc = arcpy.mapping.MapDocument('CURRENT')a, OpenDoc = arcpy.mapping.MapDocument(r'c:\full\path\to\yourMapDocument.mxd')quindi è possibile shell ArcMap in apri il documento attivo .. poiché il documento esistente non è aperto non verrà ridisegnato.