¿Cambiar la fuente de datos para todas las capas en MXD?


25

Tengo un MXD Se conecta a aproximadamente 30 capas en una de nuestras bases de datos SDE. Quiero cambiar la base de datos SDE a la que se conectan.

¿Hay alguna manera de hacer esto sin tener que hacer clic derecho en cada capa y cambiarla individualmente?

Respuestas:


37

Haga clic derecho en el mxd en ArcCatalog, haga clic en Establecer orígenes de datos y haga un cambio masivo desde allí. Sin embargo, esta herramienta advierte:

Nota: este diálogo está destinado principalmente a preparar documentos de mapa para su publicación. Las personalizaciones (código VBA, controles de IU y barras de herramientas personalizadas), gráficos y propiedades de apariencia de la ventana de la tabla se eliminan de los archivos .mxd cuando actualiza sus fuentes de datos mediante este cuadro de diálogo. Para preservarlos, actualice las fuentes de datos en ArcMap.

También puede usar la biblioteca de python arcpy.mapping :


Esto parece no funcionar en 10.1. La fuente de datos se cambia, pero (al menos en el caso de una conexión SDE) el enlace se cambia a una "conexión de base de datos", es decir, ya no se apunta a la capa, lo que rompe el enlace.
Michael Todd

16

Si está utilizando ArcGIS 10 y está interesado en utilizar Python, consulte la ayuda sobre Actualización y reparación de orígenes de datos con arcpy.mapping y los métodos del objeto Layer .

Ejemplo:

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

Si todas sus capas no obtienen el mismo archivo de conexión original, o el nombre de la clase de entidad de destino es diferente en el nuevo SDE, es posible que deba usarlo Layer.replaceDataSource.


Esto funciona perfectamente gracias! Una cosa para agregar es "Conexiones de base de datos \ Conexión a GISSDE1.sde" también se puede reemplazar con una ubicación .gdb.
Jack Fairfield

¿Cómo podría usar esto al cambiar la fuente de datos de SAME SDE pero de la versión 1 a la versión 2?
NULL.Dude

3
  1. Realice una conexión de origen de datos en ArcCatalog.
  2. Abra el MXD y expanda la capa y haga clic en el signo de exclamación rojo en cualquier capa. Esto abrirá una ventana emergente que contiene la fuente de datos con conexión a la base de datos.
  3. Seleccione la conexión de la base de datos que había hecho, haga doble clic en ella y vaya a la capa en la que ha hecho clic, seleccione esa capa y presione OK, Abrir o Agregar.

Esto eliminará todos los signos de exclamación rojos que contienen capas en el MXD y apuntará a la nueva fuente de datos creada. De una vez puedes hacer esto; no es necesario ir y hacer clic cada vez en el signo de exclamación rojo y hacer clic y configurar la fuente de datos.


Es muy útil
favor

3
Esto solo funcionará si las conexiones están rotas, de lo contrario, una de las otras respuestas es más apropiada.
blah238

1

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

El enlace es a un antiguo Arcscript llamado herramientas GDK, que se puede obtener en otros sitios. El programa crea una barra de herramientas en arcmap donde puede cambiar la fuente en las capas seleccionadas (cualquier capa que desee. Esto funciona entre conexiones SDE o SDE a la geodatabase de archivos local (que la fuente de cambio en Arccatalog no puede manejar, debido a que el nombre en SDE comienza con el usuario SDE y luego punto.

esto es muy útil, pero tal vez solo en arcgis 9.3


1
Si bien este enlace puede responder la pregunta, es mejor incluir aquí las partes esenciales de la respuesta y proporcionar el enlace como referencia. Las respuestas de solo enlace pueden volverse inválidas si la página vinculada cambia.
BradHards

¡He modificado!
jonaktiv

1

Si ya tiene el .mxd abierto, haga lo que hizo @ blah238, pero use en 'CURRENT'lugar de la ruta completa. No olvide que la búsqueda y el reemplazo no tienen que ser la cadena completa:

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

Luego tendrá que guardar y volver a abrir el archivo .mxd de todos modos.


1

Para un mxd, las herramientas ESRI predeterminadas pueden ser suficientes. Pero arreglar múltiples mxds con enlaces rotos puede ser una pesadilla. Pruebe mi herramienta UpdateLayerRefs para reparar MXD ilimitados en segundos: https://github.com/jswagger/UpdateLayerRefs Solo proporcione los nombres de sus MXD de entrada como una lista ["Name1.mxd", "Name2.mxd", "Name3.mxd "]


Agradable compartir tu código :) ¿Puedes explicar un poco cómo se puede usar?
Gisnside

Absolutamente: 1. Complete el archivo de configuración JSON:
Jeremy Swagger

¡Primer paso, supuse! Pero me pregunto después: parece que su comentario no llegó al suelo por el resto del mensaje. Quizás deberías editar tu respuesta :) :)
gisnside

1
Lo siento, me detuvieron en algo. Actualizando el archivo Léame ahora ...
Jeremy Swagger

1
Eso es correcto. Ejecutar python UpdateLayerRefs.py --config "update_layer_refs.config.json" le permite ejecutarlo en cualquier carpeta.
Jeremy Swagger

0

Parece que esta publicación es antigua, pero no puedo hacer que funcione: el código es el siguiente:

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")

Bienvenido a GIS SE. Si no lo ha hecho, realice el recorrido para conocer este formato de preguntas y respuestas. Su respuesta se puede publicar mejor como una pregunta propia. ¡Asegúrese de incluir los mensajes de error que recibió cuando ejecutó el código!
Andy
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.