MXDのすべてのレイヤーのデータソースを変更しますか?


25

MXDを持っています。SDEデータベースの1つの約30層に接続します。接続先のSDEデータベースを変更したい。

すべてのレイヤーを右クリックして個別に変更することなく、これを行う方法はありますか?

回答:


37

ArcCatalogでmxdを右クリックし、[データソースの設定]をクリックして、そこから一括変更します。ただし、このツールは警告します:

注:このダイアログの主な目的は、公開するマップドキュメントを準備することです。このダイアログを使用してデータソースを更新すると、カスタマイズ(VBAコード、UIコントロール、カスタムツールバー)、グラフ、およびテーブルウィンドウの外観プロパティが.mxdファイルから削除されます。これらを保持するには、代わりにArcMapのデータソースを更新します。

また、arcpy.mapping pythonライブラリを使用することもできます。


これは10.1では機能しないようです。データソースは変更されますが、(少なくともSDE接続の場合)リンクは「データベース接続」に変更されます。つまり、レイヤーがそれ以上ポイントされず、リンクが切断されます。
マイケルトッド

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代わりに使用する必要があります。


これは完璧に機能します!追加することの1つは、「Database Connections \ Connection to GISSDE1.sde」を.gdbの場所に置き換えることもできます。
ジャックフェアフィールド

データソースを同じSDEからバージョン1からバージョン2に切り替える場合、これをどのように使用できますか?
-NULL。デュード

3
  1. ArcCatalogでデータソース接続を作成します。
  2. MXDを開き、レイヤーを展開して、任意のレイヤーの赤い感嘆符をクリックします。これにより、データベース接続のあるデータソースを含むポップアップウィンドウが開きます。
  3. 作成したデータベース接続を選択し、それをダブルクリックして、クリックしたレイヤーに移動し、そのレイヤーを選択して、OK、開く、または追加を押します。

これにより、MXD内のレイヤーを含むすべての赤い感嘆符が削除され、新しく作成されたデータソースがポイントされます。一度にこれを行うことができます。毎回赤い感嘆符をクリックして、データソースをクリックして設定する必要はありません。


この度througその非常にhelpfull.Pleaseゴー
インデジート・シンbhambra

3
これは、接続が切断された場合にのみ機能します。それ以外の場合、他の回答のいずれかがより適切です。
blah238

1

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

リンクは、GDKツールと呼ばれる古いArcscriptへのリンクであり、他のサイトから入手できます。プログラムは、選択したレイヤー(必要な任意のレイヤー。これはSDE接続またはSDEからローカルファイルジオデータベースへのソース間で変更可能)のソースを変更できるツールバーを作成します(SDEの名前はSDEユーザー、そしてドット。

これは非常に便利ですが、おそらくarcgis 9.3のみで可能です


1
このリンクは質問に回答するかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供する方が良いでしょう。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。
BradHards

変更しました!
jonaktiv

1

.mxdを既に開いている場合は、@ blah238が行ったことを実行し'CURRENT'ますが、フルパスの代わりに使用します。検索と置換が完全な文字列である必要はないことを忘れないでください:

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

その後、.mxdファイルを保存して再度開く必要があります。


1

1つのmxdでは、デフォルトのESRIツールで十分です。しかし、リンクが壊れている複数のmxdを修正するのは悪夢です。UpdateLayerRefsツールを試して、無制限のMXDを数秒で修正します: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"を実行すると、任意のフォルダーで実行できます。
ジェレミースワガー

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へようこそ。まだ行っていない場合は、ツアーに参加してこのQ&A形式について学んでください。あなたの答えは、それ自体の質問として再投稿するのが最適です。コードを実行したときに受け取ったエラーメッセージを必ず含めてください。
アンディ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.