Alterando a fonte de dados para todas as camadas no MXD?

25

Eu tenho um MXD. Ele se conecta a cerca de 30 camadas em um de nossos bancos de dados SDE. Quero alterar o banco de dados SDE ao qual eles se conectam.

Existe uma maneira de fazer isso sem precisar clicar com o botão direito do mouse em todas as camadas e alterá-las individualmente?

brenth
fonte

Respostas:

37

Clique com o botão direito do mouse no mxd no ArcCatalog, clique em Definir fontes de dados e faça alterações em massa a partir daí. No entanto, esta ferramenta alerta:

Nota: esse diálogo é destinado principalmente à preparação de documentos de mapas para publicação. As personalizações (código VBA, controles da interface do usuário e barras de ferramentas personalizadas), gráficos e propriedades de aparência da janela da tabela são removidas dos arquivos .mxd quando você atualiza suas fontes de dados usando esse diálogo. Para preservá-las, atualize as fontes de dados no ArcMap.

Você também pode usar a biblioteca python arcpy.mapping :

MapMan
fonte
Isso parece não funcionar no 10.1. A fonte de dados é alterada, mas (pelo menos no caso de uma conexão SDE), o link é alterado para uma "conexão de banco de dados", ou seja, a camada não está mais sendo apontada, o que interrompe o link.
22812 Michael Todd
16

Se você estiver usando o ArcGIS 10 e estiver interessado em usar o Python, consulte a ajuda em Atualizando e corrigindo fontes de dados com o arcpy.mapping e os métodos do objeto Layer .

Exemplo:

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 todas as suas camadas não tiverem o mesmo arquivo de conexão original, ou o nome da classe do recurso de destino for diferente no novo SDE, talvez seja necessário usá-lo Layer.replaceDataSource.

blah238
fonte
Isso funciona perfeitamente obrigado! Uma coisa a acrescentar é que "Conexões do banco de dados \ Conexão ao GISSDE1.sde" também podem ser substituídas por um local .gdb.
Jack Fairfield
Como eu poderia usar isso alternando a fonte de dados do mesmo SDE, mas da versão 1 para a versão 2?
usar o seguinte comando
3
  1. Faça uma conexão de fonte de dados no ArcCatalog.
  2. Abra o MXD e expanda a camada e clique no ponto de exclamação vermelho em qualquer camada. Isso abrirá uma janela pop-up contendo a fonte de dados com conexão ao banco de dados.
  3. Selecione a conexão do banco de dados que você fez, clique duas vezes nela e entre nela na camada em que você clicou, selecione essa camada e pressione OK, Abrir ou Adicionar.

Isso removerá todo o ponto de exclamação vermelho que contém camadas no MXD e apontará para a nova fonte de dados criada. De uma só vez, você pode fazer isso; não é necessário ir e clicar sempre no ponto de exclamação vermelho e clicar e definir a fonte de dados.

Inderjeet singh bhambra
fonte
É muito útil
Por favor
3
Isso funcionará apenas se as conexões estiverem quebradas, caso contrário, uma das outras respostas é mais apropriada.
blah238
1

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

O link é para um antigo Arcscript chamado GDK tools, que pode ser obtido em outros sites. O Programa cria uma barra de ferramentas no arcmap, na qual você pode alterar a fonte nas camadas selecionadas (qualquer camada que desejar. Isso funciona entre conexões SDE ou SDE no geodatabase de arquivo local (que a fonte de mudança no Arccatalog não pode manipular, porque o nome no SDE começa com o usuário SDE e depois pontue.

isso é muito útil, mas talvez apenas no arcgis 9.3

jonaktiv
fonte
1
Embora esse link possa responder à pergunta, é melhor incluir aqui as partes essenciais da resposta e fornecer o link para referência. As respostas somente para links podem se tornar inválidas se a página vinculada for alterada.
21414 BradHards
Eu modifiquei!
jonaktiv
1

Se você já tem o .mxd aberto, faça o que @ blah238 fez, mas use em 'CURRENT'vez do caminho completo. Não esqueça que a pesquisa e substituição não precisam ser a sequência completa:

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

Em seguida, você precisará salvar e reabrir o arquivo .mxd de qualquer maneira.

jazzabeanie
fonte
1

Para um mxd, as ferramentas ESRI padrão podem ser suficientes. Mas consertar vários mxds com links quebrados pode ser um pesadelo. Experimente minha ferramenta UpdateLayerRefs para corrigir MXDs ilimitados em segundos: https://github.com/jswagger/UpdateLayerRefs Basta fornecer os nomes dos MXDs de entrada como uma lista ["Name1.mxd", "Name2.mxd", "Name3.mxd "]

Jeremy Swagger
fonte
Bom compartilhar seu código :) Você pode elaborar um pouco sobre como usá-lo?
Gisnside 28/08
Absolutamente: 1. Preencha o arquivo de configuração JSON:
Jeremy Swagger
Primeiro passo, eu adivinhei! Mas eu estou pensando sobre depois - Parece que seu comentário não atingiu o chão pelo resto da mensagem. Talvez você deve editar a sua resposta em vez :) :)
gisnside
1
Desculpe, fui puxado para algo. Atualizando o arquivo leia-me agora ....
Jeremy Swagger
1
Está correto. Executando python UpdateLayerRefs.py --config "update_layer_refs.config.json" permite executá-lo em qualquer pasta.
Jeremy Swagger
0

Parece que este post é antigo, mas não consigo fazer isso funcionar: O código é o seguinte:

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")
EgmontDeVos
fonte
Bem-vindo ao GIS SE. Se você ainda não o fez, faça o tour para aprender sobre este formato de perguntas e respostas. Sua resposta pode ser melhor postada novamente como uma pergunta própria. Certifique-se de incluir todas as mensagens de erro que você recebeu ao executar o código!
Andy