เปลี่ยนแหล่งข้อมูลสำหรับเลเยอร์ทั้งหมดใน MXD หรือไม่


25

ฉันมี MXD มันเชื่อมต่อกับประมาณ 30 เลเยอร์ในหนึ่งในฐานข้อมูล SDE ของเรา ฉันต้องการเปลี่ยนฐานข้อมูล SDE ที่เชื่อมต่ออยู่

มีวิธีในการทำเช่นนี้โดยไม่ต้องคลิกขวาทุกเลเยอร์และเปลี่ยนทีละชั้นหรือไม่?

คำตอบ:


37

คลิกขวาที่ mxd ใน ArcCatalog คลิกที่ตั้งแหล่งข้อมูลและเปลี่ยนเป็นกลุ่มจากที่นั่น อย่างไรก็ตามเครื่องมือนี้เตือน:

หมายเหตุ: ไดอะล็อกนี้มีวัตถุประสงค์เพื่อเตรียมเอกสารแผนที่เป็นหลัก การปรับแต่ง (รหัส VBA, การควบคุม UI และแถบเครื่องมือที่กำหนดเอง), กราฟและคุณสมบัติลักษณะที่ปรากฏของหน้าต่างตารางจะถูกลบออกจากไฟล์. mxd เมื่อคุณอัปเดตแหล่งข้อมูลโดยใช้กล่องโต้ตอบนี้ เพื่อรักษาสิ่งเหล่านี้ให้อัปเดตแหล่งข้อมูลใน ArcMap แทน

คุณสามารถใช้ห้องสมุดไพธ อน arcpy.mapping :


ดูเหมือนว่าจะไม่ทำงานใน 10.1 แหล่งข้อมูลมีการเปลี่ยนแปลง แต่ (อย่างน้อยในกรณีของการเชื่อมต่อ SDE) ลิงก์จะถูกเปลี่ยนเป็น "การเชื่อมต่อฐานข้อมูล" นั่นคือเลเยอร์จะไม่ถูกชี้ไปที่เลเยอร์อีกต่อไปซึ่งจะทำลายลิงค์
Michael ทอดด์

16

หากคุณใช้ ArcGIS 10 และสนใจใช้ Python ลองดูวิธีใช้ในการอัปเดตและแก้ไขแหล่งข้อมูลด้วย arcpy.mappingและวิธีการของวัตถุLayer

ตัวอย่าง:

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

หากเลเยอร์ของคุณไม่ได้แหล่งข้อมูลทั้งหมดที่เชื่อมต่อกับไฟล์ต้นฉบับเดียวกันหรือชื่อคลาสคุณลักษณะปลายทางนั้นต่างจาก SDE ใหม่คุณอาจต้องใช้Layer.replaceDataSourceแทน


มันใช้งานได้อย่างสมบูรณ์แบบขอบคุณ! สิ่งหนึ่งที่จะเพิ่มคือ "ฐานข้อมูลการเชื่อมต่อการเชื่อมต่อกับ GISSDE1.sde" สามารถถูกแทนที่ด้วย. gdb ที่ตั้งเช่นกัน
แจ็คแฟร์ฟิลด์

ฉันจะใช้สิ่งนี้จากการสลับแหล่งข้อมูลจาก SAME SDE ได้อย่างไรจากรุ่น 1 เป็นรุ่น 2
NULL.Dude

3
  1. ทำการเชื่อมต่อแหล่งข้อมูลใน ArcCatalog
  2. เปิด MXD และขยายเลเยอร์แล้วคลิกที่เครื่องหมายอัศเจรีย์สีแดงในเลเยอร์ใดก็ได้ จะเป็นการเปิดหน้าต่างป็อปอัพที่มีแหล่งข้อมูลด้วยการเชื่อมต่อฐานข้อมูล
  3. เลือกการเชื่อมต่อฐานข้อมูลที่คุณสร้างขึ้นดับเบิลคลิกที่สิ่งนั้นและเข้าไปข้างในนั้นกับเลเยอร์ที่คุณคลิกแล้วเลือกเลเยอร์นั้นแล้วกดตกลงเปิดหรือเพิ่ม

สิ่งนี้จะลบเครื่องหมายอัศเจรีย์สีแดงทั้งหมดที่มีเลเยอร์ใน MXD และจะชี้ไปที่แหล่งข้อมูลที่สร้างขึ้นใหม่ ในครั้งเดียวคุณสามารถทำได้ ไม่จำเป็นต้องไปและคลิกแต่ละครั้งที่เครื่องหมายอัศเจรีย์สีแดงและคลิกและตั้งค่าแหล่งข้อมูล


มันเป็นประโยชน์อย่างมากกรุณาไปผ่านครั้งนี้
Inderjeet singh bhambra

3
วิธีนี้จะใช้งานได้หากการเชื่อมต่อเสียหายมิฉะนั้นคำตอบอื่นที่เหมาะสมกว่า
blah238

1

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

ลิงก์คือ Arcscript แบบเก่าที่เรียกว่าเครื่องมือ GDK ซึ่งสามารถรับได้ในไซต์อื่น โปรแกรมสร้างแถบเครื่องมือใน arcmap ซึ่งคุณสามารถเปลี่ยนแหล่งข้อมูลบนเลเยอร์ที่เลือก (เลเยอร์ใด ๆ ที่คุณต้องการ) ทำงานระหว่างการเชื่อมต่อ SDE หรือ SDE ไปยังฐานข้อมูลไฟล์โลคัลโลคัล (แหล่งการเปลี่ยนแปลงใน Arccatalog ไม่สามารถจัดการได้ ผู้ใช้ SDE แล้วดอท

สิ่งนี้มีประโยชน์มาก แต่อาจเป็นเฉพาะใน arcgis 9.3


1
แม้ว่าลิงก์นี้อาจตอบคำถามได้ดีกว่าหากรวมส่วนสำคัญของคำตอบไว้ที่นี่และให้ลิงก์สำหรับการอ้างอิง คำตอบสำหรับลิงค์เท่านั้นอาจไม่ถูกต้องหากหน้าเว็บที่เชื่อมโยงนั้นเปลี่ยนแปลง
BradHards

ฉันได้แก้ไข!
jonaktiv

1

หากคุณเปิด. xmd ไว้แล้วให้ทำสิ่งที่ @ blah238 ทำ แต่ใช้'CURRENT'แทนเส้นทางแบบเต็ม อย่าลืมว่าการค้นหาและแทนที่ไม่จำเป็นต้องเป็นสตริงเต็ม:

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

จากนั้นคุณจะต้องบันทึกและเปิดไฟล์. xmd อีกครั้ง


1

สำหรับหนึ่ง mxd เครื่องมือ ESRI เริ่มต้นสามารถพอเพียงได้ แต่การแก้ไข mxds หลายรายการด้วยการเชื่อมโยงที่ขาดอาจเป็นฝันร้าย ลองใช้เครื่องมือ UpdateLayerRefs ของฉันเพื่อแก้ไข MXDs ไม่ จำกัด ในไม่กี่วินาที: https://github.com/jswagger/UpdateLayerRefs เพียงแค่ระบุชื่อของ MXD อินพุตของคุณเป็นรายการ ["Name1.mxd", "Name2.mxd", "Name3.mxd" "]


ดีใจที่ได้แบ่งปันรหัสของคุณ :) คุณสามารถอธิบายเพิ่มเติมเกี่ยวกับวิธีการใช้งานได้หรือไม่?
gisnside

อย่างแน่นอน: 1. กรอกไฟล์กำหนดค่า JSON:
Jeremy Swagger

ขั้นตอนแรกฉันเดา! แต่ฉันสงสัยว่าหลังจาก - ดูเหมือนว่าความคิดเห็นของคุณไม่ได้ตีพื้นสำหรับส่วนที่เหลือของข้อความ คุณอาจจะควรแก้ไขคำตอบของคุณแทน :) :)
gisnside

1
ขออภัยถูกดึงออกมาจากบางสิ่ง กำลังอัปเดตไฟล์ readme ทันที ....
Jeremy Swagger

1
ถูกต้อง. การเรียกใช้ python UpdateLayerRefs.py --config "update_layer_refs.config.json" อนุญาตให้คุณเรียกใช้งานในโฟลเดอร์ใดก็ได้
Jeremy Swagger

0

ดูเหมือนว่าโพสต์นี้จะเก่า แต่ฉันไม่สามารถใช้งานได้: รหัสมีดังนี้:

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 หากคุณยังไม่ได้ดำเนินการโปรดทัวร์ชมเพื่อเรียนรู้เกี่ยวกับรูปแบบคำถาม & คำตอบ คำตอบของคุณอาจถูกโพสต์ใหม่ที่ดีที่สุดเป็นคำถามของตัวเอง ให้แน่ใจว่าได้รวมข้อความผิดพลาดที่คุณได้รับเมื่อคุณเรียกใช้รหัส!
แอนดี้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.