ฉันมี MXD มันเชื่อมต่อกับประมาณ 30 เลเยอร์ในหนึ่งในฐานข้อมูล SDE ของเรา ฉันต้องการเปลี่ยนฐานข้อมูล SDE ที่เชื่อมต่ออยู่
มีวิธีในการทำเช่นนี้โดยไม่ต้องคลิกขวาทุกเลเยอร์และเปลี่ยนทีละชั้นหรือไม่?
ฉันมี MXD มันเชื่อมต่อกับประมาณ 30 เลเยอร์ในหนึ่งในฐานข้อมูล SDE ของเรา ฉันต้องการเปลี่ยนฐานข้อมูล SDE ที่เชื่อมต่ออยู่
มีวิธีในการทำเช่นนี้โดยไม่ต้องคลิกขวาทุกเลเยอร์และเปลี่ยนทีละชั้นหรือไม่?
คำตอบ:
คลิกขวาที่ mxd ใน ArcCatalog คลิกที่ตั้งแหล่งข้อมูลและเปลี่ยนเป็นกลุ่มจากที่นั่น อย่างไรก็ตามเครื่องมือนี้เตือน:
หมายเหตุ: ไดอะล็อกนี้มีวัตถุประสงค์เพื่อเตรียมเอกสารแผนที่เป็นหลัก การปรับแต่ง (รหัส VBA, การควบคุม UI และแถบเครื่องมือที่กำหนดเอง), กราฟและคุณสมบัติลักษณะที่ปรากฏของหน้าต่างตารางจะถูกลบออกจากไฟล์. mxd เมื่อคุณอัปเดตแหล่งข้อมูลโดยใช้กล่องโต้ตอบนี้ เพื่อรักษาสิ่งเหล่านี้ให้อัปเดตแหล่งข้อมูลใน ArcMap แทน
คุณสามารถใช้ห้องสมุดไพธ อน arcpy.mapping :
หากคุณใช้ 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
แทน
สิ่งนี้จะลบเครื่องหมายอัศเจรีย์สีแดงทั้งหมดที่มีเลเยอร์ใน MXD และจะชี้ไปที่แหล่งข้อมูลที่สร้างขึ้นใหม่ ในครั้งเดียวคุณสามารถทำได้ ไม่จำเป็นต้องไปและคลิกแต่ละครั้งที่เครื่องหมายอัศเจรีย์สีแดงและคลิกและตั้งค่าแหล่งข้อมูล
http://arcscripts.esri.com/details.asp?dbid=14922
ลิงก์คือ Arcscript แบบเก่าที่เรียกว่าเครื่องมือ GDK ซึ่งสามารถรับได้ในไซต์อื่น โปรแกรมสร้างแถบเครื่องมือใน arcmap ซึ่งคุณสามารถเปลี่ยนแหล่งข้อมูลบนเลเยอร์ที่เลือก (เลเยอร์ใด ๆ ที่คุณต้องการ) ทำงานระหว่างการเชื่อมต่อ SDE หรือ SDE ไปยังฐานข้อมูลไฟล์โลคัลโลคัล (แหล่งการเปลี่ยนแปลงใน Arccatalog ไม่สามารถจัดการได้ ผู้ใช้ SDE แล้วดอท
สิ่งนี้มีประโยชน์มาก แต่อาจเป็นเฉพาะใน arcgis 9.3
หากคุณเปิด. xmd ไว้แล้วให้ทำสิ่งที่ @ blah238 ทำ แต่ใช้'CURRENT'
แทนเส้นทางแบบเต็ม อย่าลืมว่าการค้นหาและแทนที่ไม่จำเป็นต้องเป็นสตริงเต็ม:
import arcpy
mxd = arcpy.mapping.MapDocument('CURRENT')
mxd.findAndReplaceWorkspacePaths(r"scratch",
r"project/draft")
จากนั้นคุณจะต้องบันทึกและเปิดไฟล์. xmd อีกครั้ง
สำหรับหนึ่ง mxd เครื่องมือ ESRI เริ่มต้นสามารถพอเพียงได้ แต่การแก้ไข mxds หลายรายการด้วยการเชื่อมโยงที่ขาดอาจเป็นฝันร้าย ลองใช้เครื่องมือ UpdateLayerRefs ของฉันเพื่อแก้ไข MXDs ไม่ จำกัด ในไม่กี่วินาที: https://github.com/jswagger/UpdateLayerRefs เพียงแค่ระบุชื่อของ MXD อินพุตของคุณเป็นรายการ ["Name1.mxd", "Name2.mxd", "Name3.mxd" "]
ดูเหมือนว่าโพสต์นี้จะเก่า แต่ฉันไม่สามารถใช้งานได้: รหัสมีดังนี้:
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")