Mengubah sumber data untuk semua lapisan di MXD?

25

Saya punya MXD. Ini terhubung ke sekitar 30 lapisan di salah satu basis data SDE kami. Saya ingin mengubah basis data SDE yang mereka sambungkan.

Apakah ada cara untuk melakukan ini tanpa harus mengklik kanan setiap layer dan mengubahnya secara individual?

brenth
sumber

Jawaban:

37

Klik kanan pada mxd di ArcCatalog, klik Set sumber data, dan ubah massal dari sana. Namun, alat ini memperingatkan:

Catatan: dialog ini dimaksudkan terutama untuk menyiapkan dokumen peta untuk publikasi. Kustomisasi (kode VBA, Kontrol UI, dan bilah alat khusus), grafik, dan properti tampilan jendela tabel dihapus dari file .mxd saat Anda memperbarui sumber data mereka menggunakan dialog ini. Untuk melestarikan ini, perbarui sumber data di ArcMap sebagai gantinya.

Anda juga bisa menggunakan perpustakaan python arcpy.mapping :

MapMan
sumber
Ini sepertinya tidak berhasil di 10.1. Sumber data diubah, tetapi (setidaknya dalam kasus koneksi SDE) tautan diubah menjadi "koneksi basis data", yaitu lapisan tidak diarahkan ke yang lebih lama, yang memecah tautan.
Michael Todd
16

Jika Anda menggunakan ArcGIS 10 dan tertarik menggunakan Python, lihat bantuan tentang Memperbarui dan memperbaiki sumber data dengan arcpy.mapping dan metode objek Layer .

Contoh:

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

Jika layer Anda tidak semua sumber file koneksi asli yang sama, atau nama kelas fitur tujuan berbeda pada SDE baru, Anda mungkin perlu menggunakan Layer.replaceDataSourcesebagai gantinya.

blah238
sumber
Ini bekerja dengan baik, terima kasih! Satu hal yang ditambahkan adalah "Koneksi Database \ Koneksi ke GISSDE1.sde" dapat diganti dengan lokasi .gdb juga.
Jack Fairfield
Bagaimana saya bisa menggunakan ini dari beralih sumber data dari SDE SAMA tetapi dari versi 1 ke versi 2?
NULL. Bung
3
  1. Buat koneksi sumber data di ArcCatalog.
  2. Buka MXD dan perluas layer dan klik pada tanda seru merah di layer apa pun. Ini akan membuka jendela sembulan yang berisi sumber data dengan koneksi database.
  3. Pilih koneksi database yang telah Anda buat, klik dua kali pada itu dan masuk ke dalamnya ke lapisan yang telah Anda klik dan pilih lapisan itu dan tekan OK, Buka atau Tambah.

Ini akan menghapus semua tanda seru merah yang mengandung lapisan di MXD dan akan menunjuk ke sumber data yang baru dibuat. Dalam sekali jalan Anda bisa melakukan ini; tidak perlu pergi dan mengklik setiap kali pada tanda seru merah dan mengklik dan mengatur sumber data.

Inderjeet singh bhambra
sumber
Sangat membantu.
Tolong
3
Ini hanya akan berfungsi jika koneksi terputus, jika tidak salah satu dari jawaban lain lebih tepat.
blah238
1

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

Tautannya adalah ke Arcscript lama yang disebut alat GDK, yang dapat diperoleh di situs lain. Program menciptakan toolbar di arcmap di mana Anda dapat mengubah sumber pada lapisan yang dipilih (setiap lapisan yang Anda inginkan. Ini berfungsi antara koneksi SDE atau SDE ke geodatabase file lokal (yang sumber perubahan di Arccatalog tidak dapat menangani, karena nama di SDE dimulai dengan pengguna SDE dan kemudian dot.

ini sangat membantu, tetapi mungkin hanya di arcgis 9.3

jonaktiv
sumber
1
Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban hanya tautan dapat menjadi tidak valid jika halaman tertaut berubah.
BradHards
Saya telah memodifikasi!
jonaktiv
1

Jika Anda sudah membuka .mxd, lakukan apa yang dilakukan @ blah238, tetapi gunakan 'CURRENT'sebagai ganti path lengkap. Jangan lupa bahwa pencarian dan penggantian tidak harus berupa string lengkap:

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

Maka Anda harus menyimpan dan membuka kembali file .mxd.

jazzabeanie
sumber
1

Untuk satu mxd, alat ESRI standar dapat mencukupi. Tetapi memperbaiki beberapa mxds dengan tautan yang terputus bisa menjadi mimpi buruk. Coba alat UpdateLayerRefs saya untuk memperbaiki MXD tak terbatas dalam hitungan detik: https://github.com/jswagger/UpdateLayerRefs Cukup berikan nama input MXD Anda sebagai daftar ["Name1.mxd", "Name2.mxd", "Name3.mxd "]

Jeremy Swagger
sumber
Senang berbagi kode Anda :) Bisakah Anda menguraikan sedikit tentang bagaimana orang dapat menggunakannya?
gisnside
Benar-benar: 1. Isi file konfigurasi JSON:
Jeremy Swagger
Langkah pertama, saya tebak! Tapi saya bertanya-tanya setelahnya - Sepertinya komentar Anda tidak menyentuh dasar untuk sisa pesan. Anda mungkin harus mengedit jawaban Anda :) :)
gisnside
1
Maaf, tertarik pada sesuatu. Memperbarui file readme sekarang ....
Jeremy Swagger
1
Itu betul. Menjalankan python UpdateLayerRefs.py --config "update_layer_refs.config.json" memungkinkan Anda untuk menjalankannya di folder apa pun.
Jeremy Swagger
0

Sepertinya posting ini sudah lama, tetapi saya tidak bisa mengaktifkannya: Kode adalah sebagai berikut:

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
sumber
Selamat datang di GIS SE. Jika Anda belum melakukannya, silakan ikuti tur untuk mempelajari tentang format Tanya Jawab ini. Jawaban Anda mungkin diposting ulang terbaik sebagai pertanyaan sendiri. Pastikan untuk memasukkan pesan kesalahan yang Anda terima saat Anda menjalankan kode!
Andy