ArcPyを使用して複数のMXDのデータソースを修復しますか?


14

約50のmxdがあり、すべての壊れたレイヤーを通過し、手動でリセットしました。

データは別のコンピューターから移動され、フォルダー構造が変更されたため、単なる変更プロセスではありません(例)。

「F:\ Data \ Rivers.shp」から「C:\ Data \ Rivers.shp」

それは次のようなものです:

「F:\ Data \ Rivers.shp」からC:\ Data \ Park \ Water \ Rivers.shpへ

すべての種類のデータ(境界、野菜の覆い、道路など)について、それぞれ独自のサブフォルダーに保存します。

私は、これらのmxdのいずれかを開くたびに繰り返し実行できるスクリプトを作成します。これにより、少なくともほとんどのmxdで見られる一般的なレイヤーのいくつかが修復され、残りは手動で修復できます。私は、少なくとも私自身保存することができ、そのよういくつかの時間を。

私は次のラインに沿って何かを使用しています:

import arcpy
mxd = arcpy.mapping.MapDocument("CURRENT")

for lyr in arcpy.mapping.ListLayers(mxd):
    if lyr == "Rivers": #Should this be the layner name in TOC or FC name?
        lyr.replaceDataSource(r"C:\Data\Park\Water", "SHAPEFILE_WORKSPACE", "Rivers")

このアイデアは、私のmxdにある他の一般的なレイヤーの上記の複数の「置換」スクリプトを何らかの方法で追加することです。

ただし、上記のスクリプトではRiversレイヤーも修正されません。

どうすればそれを機能させることができますか?また、異なるファイルパスを持つ他の修復するレイヤーを追加できますか?

回答:


14

スクリプトは正しい方向に進んでいます。それはあなたが比較される方法に問題が嘘のように見えるLayerには、オブジェクトの名前Layer中に目次

ListLayers関数を使用すると、返されるのはLayerオブジェクトです。あなたは、その後にこれを比較することはできませんtext string彼らが等しい場合、あなたがアクセスする必要が見るために名前をLayer代わりに。

import arcpy
mxd = arcpy.mapping.MapDocument("CURRENT")

for lyr in arcpy.mapping.ListLayers(mxd):
    if lyr.name.lower() == "rivers": #This should be the Layer name in the TOC?
        lyr.replaceDataSource(r"C:\Data\Park\Water", "SHAPEFILE_WORKSPACE", "Rivers")

さらにセレクターを追加するにif/thenは、コードの一部を展開して、異なるレイヤー名を探します。

for lyr in arcpy.mapping.ListLayers(mxd):
    if lyr.name.lower() == "rivers": #This should be the Layer name in the TOC?
        lyr.replaceDataSource(r"C:\Data\Park\Water", "SHAPEFILE_WORKSPACE", "Rivers")
    elif lyr.name.lower() == "streets":
        lyr.replaceDataSource(r"C:\Data\Facilities\Streets", "SHAPEFILE WORKSPACE", "Streets")

nameセレクターの変更を続けて、内の特定の一意のレイヤーを見つけ、それを処理.mxdするreplaceDataSource関数を追加します。lower名前をテストするときに関数を使用したことに注意してください。これはESRIのヘルプドキュメントでも使用されていますが、大文字と小文字の不一致の可能性を取り除き、レイヤー名の不一致を引き起こす可能性が高いと考えられます。

Arcpyマッピングを使用したデータソースの更新と修正に関するESRIヘルプ記事を次に示します。

ArcGISの一般的なヘルプファイルは、明確な説明と、特定のニーズに合わせて簡単にコピー/貼り付けおよび変更できる多くのPythonコードサンプルが含まれているため、非常に便利です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.