ディレクトリツリーをクロールしてMxd relativePathsをtrueに変更するにはどうすればよいですか?


9

各プロジェクトフォルダーに多数のサブフォルダーを含めることができる多数のプロジェクトフォルダーがあります。これらのサブフォルダーには、mxds、シェープファイル、個人のgdb、fgdbを含めることができます。多くの場合、ユーザーはmxdsを保存する前に「相対パスを使用」をチェックするのを忘れていたため、フォルダーがコピーされると、データソースリンクが壊れます。

ディレクトリをクロールし、各mxdを開き、relativePathsをtrueに設定して、mxdを保存するスタンドアロンのarcpyスクリプトを記述したいと思います。これをどこかで行うスクリプトはありますか?

MapDocumentオブジェクトのrelativePathsプロパティは読み取り専用です。これを変更する他の方法はありますか?


これが可能かどうか、またはそのワークフローを使用していないかどうかはわかりません。しかし、私がうまくいくと思うのは、各.mxdを自動的に開き、すべてのデータソースと情報を元の.mxdから相対パスがチェックされた新しい空の.mxdにコピーしてから、新しいものを再保存する場合です。最初の方法が不可能な場合の回避策としてのアイデア。
MLowry

それは可能ではないと思います。ただし、絶対パスを使用してすべてのドキュメントとその作成者のリストを取得し、厳しい電子メールでそれらをスパムすることができます。
Sean、

回答:


6

これは、次のpythonスクリプトを使用して可能です(ESRIフォーラムの Neil Clemmonsに感謝します)。ピアセンコンサルティングのcomtypesライブラリとSnippetsモジュールが必要です。

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

また、PierssenのSnippetsモジュールを使用するためのローカルの正規スレッドを参照してください。Python からArcObjectsにアクセスするに
マットウィルキー2015年

2

10.0では不可能ですが、.NETアプリケーションを作成するのはやり過ぎであるような比較的単純なタスクでPythonArcObjectsを使用することにある程度成功しましたが、必要な機能がarcpy / arcgisscriptingモジュールで公開されていませんでした。os.walkを使用して、ディレクトリツリー部分をクロールします。

ArcObjectsビットの場合、を使用IMapDocument.Open()してMXDを開き(ArcMapで開く必要はありません)、キャストしてtrueにIMxDocument設定RelativePathsし、を使用IMapDocument.Save()して保存します。


これが実際に相対パスを修正することを確認しましたか?
Jason Scheirer、2011

私は自分で試したことはありませんが、このスレッドは機能することを示唆しています:forums.esri.com/Thread.asp?c
93&

また、カークはすでにこれを行う方法を知っていると確信しています:forums.esri.com/Thread.asp?c
93&f

@ blah238これはVBAです。スタンドアロンのarcpyスクリプトが必要です。
カークカイケンダル2011

1
質問は、これを.NETではなくarcpyで行うことに関するものであり、私が理解しているように、10.0でarcpyを使用することは不可能です(私の回答の最初のリンクを参照)。
blah238 '26年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.