मैं डायरेक्टरी ट्री को क्रॉल कैसे कर सकता हूं और एमएक्सडी रिश्तेदारपैथ्स को सच में बदल सकता हूं?


9

मेरे पास बड़ी संख्या में प्रोजेक्ट फ़ोल्डर हैं जहां प्रत्येक प्रोजेक्ट फ़ोल्डर में कई सबफ़ोल्डर हो सकते हैं। इन सबफोल्डर्स में एमएक्सडी, शेपफाइल्स, पर्सनल जीडीबी और एफजीडीबी हो सकते हैं। कई मामलों में उपयोगकर्ता mxds को बचाने से पहले "रिलेटिव पाथ्स का उपयोग करें" की जांच करना भूल जाता है, इसलिए जब फ़ोल्डर कॉपी हो जाता है, तो डेटा स्रोत लिंक टूट जाते हैं।

मैं एक स्टैंडअलोन आर्कपी स्क्रिप्ट लिखना चाहूंगा जो निर्देशिकाओं के माध्यम से क्रॉल करता है, प्रत्येक एमएक्सडी को खोलता है, सापेक्षपैथ को सच करता है, फिर एमएक्सडी को बचाता है। क्या कोई स्क्रिप्ट है जो कहीं ऐसा करती है?

MapDocument ऑब्जेक्ट पर सापेक्ष Paths गुण आसानी से है। क्या इसे बदलने का कोई और तरीका है?


मैं इस बारे में अनिश्चित हूं कि उस वर्कफ़्लो का उपयोग करना संभव है या नहीं। लेकिन मुझे क्या लगता है कि काम कर सकता है यदि आप प्रत्येक को स्वचालित रूप से खोलते हैं। एमएक्सडी, उस डेटा से सभी डेटा स्रोतों और सूचनाओं को एक नए रिक्त में कॉपी करें। एमएक्सडी जिसमें रिश्तेदार पथों की जांच की गई है, और फिर नए को फिर से सहेजें। काम के इर्द-गिर्द एक विचार के रूप में यदि आपका पहला तरीका समाप्त हो रहा है तो संभव नहीं है।
विधिवत् जूल 7'11

मुझे नहीं लगता कि यह संभव है। आप पूर्ण पथ और उनके लेखकों का उपयोग करके सभी दस्तावेजों की एक सूची प्राप्त कर सकते हैं और उन्हें कड़े ई-मेल के साथ स्पैम कर सकते हैं, हालांकि।
सीन

जवाबों:


6

यह निम्नलिखित पायथन लिपि ( ESRI मंच पर नील क्लेमन के लिए धन्यवाद के साथ) का उपयोग करके संभव है । आप की आवश्यकता होगी comtypes पुस्तकालय और स्निपेट्स Pierssen परामर्श से मॉड्यूल।

from Snippets import GetLibPath, InitStandalone
from comtypes.client import GetModule, CreateObject
import os

m = GetModule(GetLibPath() + 'esriCarto.olb')
InitStandalone()
file_dir = r'C:\dir'
for filename in os.listdir(file_dir):
   fullpath = os.path.join(file_dir, filename)
   p = CreateObject(m.MapDocument, interface=m.MapDocument)
   p.Open(fullpath)
   newpath = os.path.join(file_dir,'Changed_' + filename)
   p.SaveAs(newpath,True,False)
   del p

पाइरसेन के स्निपेट्स मॉड्यूल का उपयोग करने के लिए स्थानीय विहित धागा भी देखें कि मैं पायथन से आर्कोबजेक्ट्स का उपयोग कैसे करूं?
मैट विल्की

2

10.0 में संभव नहीं है , लेकिन मुझे इस तरह के अपेक्षाकृत सरल कार्यों के लिए पायथन में आर्कोबजेक्ट्स का उपयोग करके कुछ सफलता मिली है, जहां एक .NET एप्लिकेशन लिखना ओवरकिल होगा, लेकिन आर्कपी / आर्कगिसस्क्रिप्टिंग मॉड्यूल में आवश्यक कार्यक्षमता उजागर नहीं की गई थी। निर्देशिका ट्री भाग को क्रॉल करने के लिए os.walk का उपयोग करें ।

ArcObjects बिट के लिए, IMapDocument.Open()MXD खोलने के लिए उपयोग करें (बिना आर्कब्यू में खुले होने के लिए), इसे कास्ट करें IMxDocumentऔर RelativePathsइसे सही पर सेट करें, और IMapDocument.Save()इसे सहेजने के लिए उपयोग करें।


क्या आपने सत्यापित किया है कि यह वास्तव में रिश्तेदार के लिए मार्ग तय करता है?
४er पर जेसन शहीर

मैंने इसे स्वयं नहीं आजमाया है, नहीं, लेकिन इस सूत्र से यह पता चलता है कि इसे काम करना चाहिए: forum.esri.com/Thread.asp?c=93&f=1154&t=260812
blah238

इसके अलावा, मुझे यकीन है कि कर्क पहले से ही जानता है कि यह कैसे करना है: forum.esri.com/Thread.asp?c=93&f=992&t=64946 :)
blah238

@ blah238 यह वीबीए है, जो मुझे चाहिए वह स्टैंडअलोन आर्कपी स्क्रिप्ट है।
किर्क कुएकेन्डल

1
प्रश्न आर्कफी के साथ ऐसा करने के संदर्भ में था। न कि .NET, और जैसा कि मैं समझता हूं कि 10.0 पर आर्कपी के साथ ऐसा करना संभव नहीं है (मेरे उत्तर में पहला लिंक देखें)।
blah238
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.