Arcpyで注釈レイヤーを処理する


10

arcpyを使用して注釈レイヤーにアクセスしたい(目的は、テキスト注釈内のいくつかのテキスト文字列を確認することです)。注釈とは、動的なラベルではなく、描画ツールの注釈を意味します。これらの注釈レイヤーは、「デフォルト」という名前のグループレイヤーの下にあります。

Esriのドキュメント層そのものであるとしてドロー注釈の会談:

マップドキュメントには、本質的に3つのカテゴリのレイヤーがあります。フィーチャレイヤー、グループレイヤー、およびラスターレイヤーです。isFeatureLayer、isGroupLayer、isRasterLayerプロパティを使用すると、すべてのレイヤータイプではなく、大半のレイヤータイプを識別または分離できます。アノテーションサブクラス、ディメンションフィーチャ、ネットワークデータセット、テレインデータセット、トポロジデータセットなど、これら3つのカテゴリのいずれにも該当しないいくつかの特殊なレイヤーとデータセットがあります。これらの場合、何かを行う前に、他のプロパティをテストして対象のレイヤーを分離する必要がある場合があります。

注意すべきことの1つは、ArcGISが描画アノテーションを処理する方法です。2つの平均構成が可能です。

ArcGISは、ジオデータベースとマップドキュメントの2種類のアノテーションを完全にサポートしています。

私の場合、それはマップドキュメントです。


このすべてのドキュメントを考慮すると、ドローアノテーションは単なるレイヤーのように見えるため、次のような単純なコードが機能しているはずです。

mxd = arcpy.mapping.MapDocument("some\mxdpath\here")
df = arcpy.mapping.ListDataFrames(mxd,"Layers")
lyr = arcpy.mapping.ListLayers(mxd,"current_annotation_layer",df) 

しかし問題は、アノテーションがデータフレーム経由で取得できないように見えることです(これは、各アノテーションレイヤーがフィーチャレイヤーに関連付けられていることを考えると奇妙です)。


アノテーションにアクセスするための特定のarcpyクラス(ArcObject SDKのIAnnotationFeature2に相当するもの)?回避策はありますか?

よろしくお願いします!


comptypesとArcObjectsを介してマップドキュメントアノテーショングループを変更できましたか?詳細情報へのポインタはありますか?どうもありがとう!!
エレーヌ

回答:


3

ArcPyはすべてのArcObjectsを公開するわけではありません。私の知る限りでは、これはArcPyで公開されていない多くのインターフェイスの1つです。ページレイアウト要素のみがarcpyで公開されています:ListLayoutElements(arcpy.mapping)

これを行う必要がある場合、唯一の選択肢はArcObjectsです。Pythonを使用する場合は、PythonからArcObjectsにアクセスする方法を参照してください

それ以外の場合は、これに関するArcGISのアイデアを探したり作成したりする必要があるかもしれません(私が見つけた唯一の関連する既存のアイデアはこれです)。


こんにちは、私はこの答えを期待していたのですが、リンクに+1してくれてありがとう。これが役立つかもしれません。
Akheloes 14年

@Akheloes comptypesとArcObjectsを介してマップドキュメントアノテーショングループを変更できましたか?
エレーヌ

0

他の人がこれに遭遇した場合に備えて、応答を追加しています。アノテーションはarcpy経由でアクセスでき、レイヤーとして扱うことができます。このコードは、注釈がアクセスできないためではなく、インデックスがないために機能しませんでした。これらの関数はリストを毎回返すため、ワイルドカード(この場合は「Layers」と「current_annotation_layer」)を使用している場合でも、インデックスを指定してそれを取得し、オブジェクトに割り当てる必要があります(それぞれdflyr))。

コードは:

df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
lyr = arcpy.mapping.ListDataFrames(mxd, "current_annotation_layer", df)[0]

これは、arcpyを使用して注釈レイヤーにアクセスする例です。私のマップでは、関心のある領域の外にある場合、注釈を透明度20%のマスクの下に移動したかったのです。

my_annotation_lyr = arcpy.mapping.Layer("Long_ProjectsAnno")
reference_lyr = arcpy.mapping.Layer("counties_mask")
arcpy.mapping.MoveLayer(df, reference_lyr, my_annotation_lyr, "AFTER")
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.