MXD'deki tüm katmanlar için veri kaynağı değiştiriliyor mu?


25

Bir MXD’m var. SDE veritabanlarımızdan birinde yaklaşık 30 katmana bağlanır. Bağlandıkları SDE veritabanını değiştirmek istiyorum.

Her katmanı sağ tıklayıp ayrı ayrı değiştirmek zorunda kalmadan bunu yapmanın bir yolu var mı?

Yanıtlar:


37

ArcCatalog'da mxd'ye sağ tıklayın, Veri kaynaklarını ayarla'ya tıklayın ve oradan toplu değişiklik yapın. Ancak, bu araç uyarır:

Not: Bu iletişim kutusu öncelikle yayın için harita belgeleri hazırlamak içindir. Bu iletişim kutusunu kullanarak veri kaynaklarını güncellediğinizde özelleştirmeler (VBA kodu, UI Denetimleri ve özel araç çubukları), grafikler ve tablo penceresi görünüm özellikleri .mxd dosyalarından kaldırılır. Bunları korumak için, bunun yerine ArcMap’teki veri kaynaklarını güncelleyin.

Arcpy.mapping python kütüphanesini de kullanabilirsiniz :


Bu 10.1'de çalışmıyor gibi görünüyor. Veri kaynağı değiştirildi, ancak (en azından bir SDE bağlantısı durumunda), bağlantı bir "veritabanı bağlantısı" olarak değiştirildi, yani katman artık işaret etmiyor, bu da bağlantıyı kesiyor.
Michael Todd

16

ArcGIS 10 kullanıyorsanız ve Python kullanmak ilginizi çekiyorsa, arcpy.mapping ve Layer nesnesinin yöntemleri ile veri kaynaklarını güncelleme ve düzeltme konusundaki yardımı inceleyin .

Örnek:

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

Katmanlarınızın tümü aynı orijinal bağlantı dosyasını sağlamazsa veya hedef özellik sınıfı adı yeni SDE'de farklıysa, Layer.replaceDataSourcebunun yerine kullanmanız gerekebilir .


Bu mükemmel çalışıyor teşekkürler! Eklenecek bir şey "Veritabanı Bağlantıları \ GISSDE1.sde \ Connection" de bir .gdb konumu ile değiştirilebilir.
Jack Fairfield,

Bunu veri kaynağını SAME SDE'den ancak sürüm 1'den sürüm 2'ye değiştirmekten nasıl kullanabilirim?
NULL.Dude

3
  1. ArcCatalog'da bir veri kaynağı bağlantısı yapın.
  2. MXD'yi açın ve katmanı genişletin ve herhangi bir katmanda kırmızı ünlem işaretini tıklayın. Bu veritabanı bağlantısı ile veri kaynağını içeren bir açılır pencere açacaktır.
  3. Yaptığınız veritabanı bağlantısını seçin, üzerine çift tıklayın ve tıkladığınız katmanın içine gidin ve o katmanı seçin ve Tamam, Aç veya Ekle'ye basın.

Bu, MXD'deki katmanları içeren tüm kırmızı ünlem işaretini kaldıracak ve yeni oluşturulan veri kaynağını gösterecektir. Bir defasında bunu yapabilirsiniz; Kırmızı ünlem işareti üzerine her defasında gidip tıklayıp veri kaynağını tıklayıp ayarlamaya gerek yoktur.


Onun çok yararlı.Lütfen bir kez
bunun içine girelim

3
Bu sadece bağlantılar koptuğunda işe yarayacak, aksi halde diğer cevaplardan biri daha uygun olacaktır.
blah238

1

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

Bu bağlantı, GDK araçları adı verilen eski bir Arcscript'e aittir, diğer sitelerden elde edilebilir. Program arcmap'ta seçilen katmanlardaki kaynağı (istediğiniz herhangi bir katmanı değiştirebileceğiniz bir araç çubuğu oluşturur. İstediğiniz herhangi bir katman. SDE bağlantıları veya SDE arasında yerel dosya coğrafi veritabanına çalışır (Arccatalog'daki değişiklik kaynağı ile başlayamaz, SDE'deki ad ile başlar) SDE kullanıcısı ve sonra nokta.

Bu çok yararlı, ama belki sadece 9.3 arcgis


1
Bu bağlantı soruyu cevaplayabilse de, cevabın temel kısımlarını buraya eklemek ve referans için bağlantıyı sağlamak daha iyidir. Bağlantılı sayfa değişirse, yalnızca bağlantı yanıtları geçersiz olabilir.
BradHards

Ben değiştim!
jonaktiv

1

.Mxd'yi zaten açtıysanız, @ blah238'in yaptığını yapın, ancak 'CURRENT'tam yol yerine kullanın . Arama ve değiştirme işleminin tam dize olması gerekmediğini unutmayın:

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

O zaman yine de .mxd dosyasını kaydetmeniz ve yeniden açmanız gerekir.


1

Bir mxd için, varsayılan ESRI araçları yeterli olabilir. Ancak çoklu bağlantıların kopuk linklerle sabitlenmesi bir kabus olabilir. Saniyede sınırsız MXD'leri düzeltmek için UpdateLayerRefs aracımı deneyin: https://github.com/jswagger/UpdateLayerRefs Girdiğiniz MXD'lerin adlarını bir liste olarak verin ["Name1.mxd", "Name2.mxd", "Name3.mxd" "]


Kodunuzu paylaşmak çok hoş :) Birini nasıl kullanabileceğini biraz açıklayabilir misiniz?
gisnside,

Kesinlikle: 1. JSON config dosyasını doldurun:
Jeremy Swagger

İlk adım, sanırım! Ama sonra merak ediyorum - Görünüşe göre mesajın geri kalanı için yorumunuzu yere çarpmadı. Cevabınızı belki de düzenlemelisiniz :) :)
gisnside 20

1
Üzgünüm, bir şey çıkarıldı. Benioku dosyasını şimdi güncelleniyor ....
Jeremy Swagger

1
Bu doğru. Çalışan python UpdateLayerRefs.py --config "update_layer_refs.config.json" herhangi bir klasörde çalıştırmanıza izin verir.
Jeremy Swagger

0

Görünüşe göre bu yazı eski, ancak çalışmasını alamıyorum: Kod şu şekilde:

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

GIS SE'ye hoş geldiniz. Bunu yapmadıysanız, lütfen bu soru ve cevap formatını öğrenmek için tura katılın. Cevabınız en iyi şekilde kendi başına bir soru olarak gönderilebilir. Kodu çalıştırdığınızda aldığınız tüm hata mesajlarını eklediğinizden emin olun!
Andy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.