MXD में सभी परतों के लिए डेटा स्रोत बदलना?


25

मेरे पास एक MXD है। यह हमारे एसडीई डेटाबेस में से एक में लगभग 30 परतों से जुड़ता है। मैं एसडीई डेटाबेस को बदलना चाहता हूं जो वे कनेक्ट करते हैं।

क्या हर परत को राइट-क्लिक करने और इसे व्यक्तिगत रूप से बदलने के बिना ऐसा करने का कोई तरीका है?

जवाबों:


37

ArcCatalog में mxd पर राइट क्लिक करें, सेट डेटा स्रोतों पर क्लिक करें, और वहां से थोक परिवर्तन करें। हालाँकि, यह उपकरण चेतावनी देता है:

नोट: यह संवाद मुख्य रूप से प्रकाशन के लिए मानचित्र दस्तावेज तैयार करने के लिए है। अनुकूलन (VBA कोड, UI नियंत्रण और कस्टम टूलबार), ग्राफ़, और टेबल विंडो उपस्थिति गुण .mxd फ़ाइलों से हटा दिए जाते हैं जब आप इस संवाद का उपयोग करके अपने डेटा स्रोतों को अपडेट करते हैं। इन्हें संरक्षित करने के लिए, इसके बजाय आर्कपॉइंट में डेटा स्रोतों को अपडेट करें।

तुम भी python पुस्तकालय arcpy.mapping उपयोग कर सकते हैं :


यह 10.1 में काम नहीं करता है। डेटा स्रोत को बदल दिया जाता है, लेकिन (कम से कम एक एसडीई कनेक्शन के मामले में) लिंक को "डेटाबेस कनेक्शन" में बदल दिया जाता है, अर्थात परत को किसी भी लंबे समय तक इंगित नहीं किया जाता है, जो लिंक को तोड़ता है।
माइकल टॉड

16

यदि आप आर्कगिस 10 का उपयोग कर रहे हैं और पाइथन का उपयोग करने में रुचि रखते हैं, तो आर्कियोलॉपरिंग और लेयर ऑब्जेक्ट के तरीकों के साथ डेटा स्रोतों को अपडेट करने और ठीक करने में मदद देखें ।

उदाहरण:

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

यदि आपकी परतें एक ही मूल कनेक्शन फ़ाइल का स्रोत नहीं बनाती हैं, या नए एसडीई पर गंतव्य सुविधा वर्ग का नाम अलग है, तो आपको Layer.replaceDataSourceइसके बजाय उपयोग करने की आवश्यकता हो सकती है ।


यह पूरी तरह से धन्यवाद काम करता है! जोड़ने के लिए एक चीज "डेटाबेस कनेक्शंस \ कनेक्शन GISSDE1.sde" को एक .gdb स्थान के साथ भी बदला जा सकता है।
जैक फेयरफ़ील्ड

मैं SAME SDE से संस्करण 1 से संस्करण 2 तक डेटा स्रोत को स्विच करने से इसका उपयोग कैसे कर पाऊंगा?
NULL.Dude

3
  1. ArcCatalog में डेटा स्रोत कनेक्शन बनाएं।
  2. एमएक्सडी खोलें और परत का विस्तार करें और किसी भी परत में लाल विस्मयादिबोधक चिह्न पर क्लिक करें। यह एक पॉपअप विंडो खोलेगा जिसमें डेटाबेस कनेक्शन के साथ डेटा स्रोत होगा।
  3. आपके द्वारा बनाए गए डेटाबेस कनेक्शन का चयन करें, उस पर डबल-क्लिक करें और उस परत के अंदर जाएं जो आपने क्लिक किया है और उस परत का चयन करें और ओके, खोलें या जोड़ें दबाएं।

यह MXD में परतों वाले सभी लाल विस्मयादिबोधक चिह्न को हटा देगा और नए बनाए गए डेटा स्रोत को इंगित करेगा। एक बार में आप ऐसा कर सकते हैं; लाल विस्मयादिबोधक चिह्न पर हर बार जाने और क्लिक करने और डेटा स्रोत को क्लिक करने और सेट करने की आवश्यकता नहीं है।


इसका बहुत ही उपयोगी है। कृपया एक बार इस पर ध्यान दें
इंद्रजीत सिंह भांबरा

3
यह केवल तभी काम करेगा जब कनेक्शन टूट गए हों, अन्यथा अन्य उत्तरों में से एक अधिक उपयुक्त है।
blah238

1

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

लिंक जीडीके टूल्स नामक एक पुराने आर्कस्क्रिप्ट के लिए है, जो अन्य साइटों पर प्राप्त किया जा सकता है। कार्यक्रम arcmap में एक टूलबार बनाता है जहाँ आप चयनित परतों पर स्रोत को बदल सकते हैं (किसी भी परत को आप चाहें। यह SDE कनेक्शन या SDE के बीच स्थानीय फ़ाइल जियोडेटाबेस के बीच काम करता है (Arccatalog में wich परिवर्तन स्रोत संभाल नहीं सकता है, क्योंकि SDE में नाम के साथ शुरू होता है) एसडीई उपयोगकर्ता और फिर डॉट।

यह बहुत मददगार है, लेकिन शायद केवल आर्कगिस 9.3 में


1
हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक-केवल उत्तर अमान्य हो सकते हैं यदि लिंक किए गए पृष्ठ बदल जाते हैं।
ब्रैडहार्ड्स

मैंने संशोधित किया है!
जोंकटिव

1

यदि आपको .mxd पहले से खुला मिला है, तो वही करें जो @ blah238 ने किया था, लेकिन 'CURRENT'पूर्ण पथ के बजाय उपयोग करें । यह मत भूलो कि खोज और प्रतिस्थापित करने के लिए पूर्ण स्ट्रिंग नहीं है:

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

फिर आपको वैसे भी .mxd फ़ाइल को सहेजना और फिर से खोलना होगा।


1

एक mxd के लिए, डिफ़ॉल्ट ESRI उपकरण पर्याप्त हो सकते हैं। लेकिन टूटे हुए लिंक के साथ कई mxds को ठीक करना एक बुरा सपना हो सकता है। सेकंड में असीमित MXDs को ठीक करने के लिए मेरा UpdateLayerRefs टूल आज़माएं: https://github.com/jswagger/UpdateLayerRefs अपने इनपुट MXD के नाम सूची के रूप में प्रदान करें ["Name1.mxd," Name2.mxd "," Name3.mxdx "]


अपना कोड साझा करना अच्छा है :) क्या आप इस पर थोड़ा विस्तार कर सकते हैं कि कोई इसका उपयोग कैसे कर सकता है?
गिस्नेसाइड

बिल्कुल: 1. JSON कॉन्फ़िग फ़ाइल भरें:
जेरेमी स्वैगर

पहला कदम, मैंने अनुमान लगाया! लेकिन मैं बाद के बारे में सोच रहा हूँ - लगता है कि आपकी टिप्पणी शेष संदेश के लिए जमीन पर हिट नहीं हुई। आपको शायद इसके बजाय अपने जवाब को संपादित करना चाहिए :) :)
gisnside

1
क्षमा करें, किसी चीज़ पर खींच लिया गया। अब रीडमी फ़ाइल को अपडेट कर रहा है ....
जेरेमी स्वैगर

1
वह सही है। पायथन अपडेटलेयरराइफ़सेस्पी --config "update_layer_refs.config.json" चलाने से आप इसे किसी भी फ़ोल्डर में चला सकते हैं।
जेरेमी स्वैगर

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 में आपका स्वागत है। यदि आपने ऐसा नहीं किया है, तो कृपया इस प्रश्नोत्तर प्रारूप के बारे में जानने के लिए भ्रमण करें। आपका जवाब अपने स्वयं के प्रश्न के रूप में सबसे अच्छा फिर से पोस्ट किया जा सकता है। कोड चलाने पर आपको प्राप्त होने वाले किसी भी त्रुटि संदेश को शामिल करना सुनिश्चित करें!
एंडी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.