Modifica dell'origine dati per tutti i livelli in MXD?


25

Ho un MXD. Si collega a circa 30 livelli in uno dei nostri database SDE. Voglio cambiare il database SDE a cui si connettono.

C'è un modo per farlo senza dover fare clic con il pulsante destro del mouse su ogni livello e modificarlo singolarmente?

Risposte:


37

Fare clic con il tasto destro del mouse su mxd in ArcCatalog, fare clic su Imposta origini dati e apportare modifiche in blocco da lì. Tuttavia, questo strumento avverte:

Nota: questa finestra di dialogo è destinata principalmente alla preparazione di documenti cartografici per la pubblicazione. Le personalizzazioni (codice VBA, controlli dell'interfaccia utente e barre degli strumenti personalizzate), i grafici e le proprietà dell'aspetto della finestra della tabella vengono rimosse dai file .mxd quando si aggiornano le loro origini dati utilizzando questa finestra di dialogo. Per preservarli, aggiornare invece le origini dati in ArcMap.

Puoi anche usare la libreria python arcpy.mapping :


Questo sembra non funzionare in 10.1. L'origine dati viene modificata, ma (almeno nel caso di una connessione SDE) il collegamento viene modificato in una "connessione al database", ovvero il layer non viene più puntato, il che interrompe il collegamento.
Michael Todd,

16

Se si utilizza ArcGIS 10 e si è interessati all'utilizzo di Python, consultare la guida su Aggiornamento e correzione delle origini dati con arcpy.mapping e i metodi dell'oggetto Layer .

Esempio:

import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project_SDE1.mxd")
mxd.findAndReplaceWorkspacePaths(r"Database Connections\Connection to GISSDE1.sde", 
                                r"Database Connections\Connection to GISSDE2.sde")
mxd.saveACopy(r"C:\Project\Project_SDE2.mxd")
del mxd

Se i layer non generano tutti lo stesso file di connessione originale o il nome della classe di caratteristiche di destinazione è diverso sul nuovo SDE, potrebbe essere necessario utilizzare Layer.replaceDataSourceinvece.


Funziona perfettamente grazie! Una cosa da aggiungere è "Connessioni database \ Connessione a GISSDE1.sde" può essere sostituita anche con una posizione .gdb.
Jack Fairfield,

Come potrei usarlo dal passaggio dell'origine dati dallo SAME SDE ma dalla versione 1 alla versione 2?
NULL.Dude

3
  1. Effettuare una connessione all'origine dati in ArcCatalog.
  2. Apri MXD ed espandi il livello e fai clic sul punto esclamativo rosso in qualsiasi livello. Si aprirà una finestra popup contenente l'origine dati con connessione al database.
  3. Seleziona la connessione al database che hai effettuato, fai doppio clic su quella e vai all'interno di essa fino al livello su cui hai fatto clic, seleziona quel livello e premi OK, Apri o Aggiungi.

Ciò rimuoverà tutti i punti esclamativi rossi contenenti i livelli nell'MXD e punterà alla nuova origine dati creata. In una sola volta puoi farlo; non c'è bisogno di andare e fare clic ogni volta sul punto esclamativo rosso e fare clic e impostare l'origine dati.


È molto utile
favore

3
Funzionerà solo se le connessioni sono interrotte, altrimenti una delle altre risposte è più appropriata.
blah238,

1

http://arcscripts.esri.com/details.asp?dbid=14922

Il link è a un vecchio arcscript chiamato strumenti GDK, che può essere ottenuto su altri siti. Il Programma crea una barra degli strumenti in arcmap in cui è possibile modificare l'origine sui livelli selezionati (qualsiasi livello desiderato. Funziona tra connessioni SDE o SDE in geodatabase di file locale (che non è in grado di gestire l'origine in Arccatalog, poiché il nome in SDE inizia con l'utente SDE e quindi punto.

questo è molto utile, ma forse solo in arcgis 9.3


1
Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il collegamento come riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia.
BradHards,

Ho modificato!
jonaktiv,

1

Se hai già aperto il .mxd, fai quello che ha fatto @ blah238, ma usa 'CURRENT'invece il percorso completo. Non dimenticare che la ricerca e la sostituzione non devono essere la stringa completa:

import arcpy
mxd = arcpy.mapping.MapDocument('CURRENT')
mxd.findAndReplaceWorkspacePaths(r"scratch", 
                                r"project/draft")

Quindi dovrai salvare e riaprire il file .mxd comunque.


1

Per un mxd, possono essere sufficienti strumenti ESRI predefiniti. Ma riparare più mxds con collegamenti interrotti può essere un incubo. Prova il mio strumento UpdateLayerRefs per correggere un numero illimitato di MXD in pochi secondi: https://github.com/jswagger/UpdateLayerRefs Fornisci semplicemente i nomi dei tuoi MXD di input come elenco ["Name1.mxd", "Name2.mxd", "Name3.mxd "]


Bello condividere il tuo codice :) Puoi spiegarci un po 'come si può usare?
gisnside,

Assolutamente: 1. Compila il file di configurazione JSON:
Jeremy Swagger,

Primo passo, ho indovinato! Ma mi chiedo dopo: sembra che il tuo commento non abbia toccato il terreno per il resto del messaggio. Dovresti forse modificare la tua risposta invece :) :)
gisnside,

1
Mi dispiace, mi sono preso qualcosa. Aggiornamento del file Leggimi ora ....
Jeremy Swagger,

1
È corretto. L'esecuzione di python UpdateLayerRefs.py --config "update_layer_refs.config.json" consente di eseguirlo in qualsiasi cartella.
Jeremy Swagger,

0

Sembra che questo post sia vecchio, ma non riesco a farlo funzionare: il codice è il seguente:

import arcpy, glob

#specify MXD location to change source data
mxd = arcpy.mapping.MapDocument(r"C:\\Users\\jrender\\Documents\\LandbaseEditing PreProd Pub Check.mxd")
workspaceCurrent = r"Database Connections\Connection to PP_GISLand_Landbase.sde"
workspaceTarget = r"Database Connections\Connection to PP_Publication_GISLand.sde" 

mxd.findAndReplaceWorkspacePaths(workspaceCurrent, workspaceTarget)

#save a new copy of MXD
mxd.saveACopy(r"C:\Users\jrender\Documents\LandbaseEditing PreProd Pub Check Repathed.mxd")

Benvenuti in GIS SE. Se non l'hai ancora fatto, partecipa al tour per conoscere questo formato di domande e risposte. La tua risposta potrebbe essere ripubblicata meglio come domanda a sé stante. Assicurati di includere eventuali messaggi di errore che hai ricevuto quando hai eseguito il codice!
Andy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.