さて、GWも終わり憂鬱な気分となっておりますが、本日もArcPyレシピを書いてみたいと思います。
本日のお題
- ワークスペースのフィーチャクラス名とジオメトリタイプの取得方法
おそらく業務で使用するワークスペース(FGDBなど)には多数のフィーチャクラスが存在しているのではないでしょうか。状況によってはそれらの名称とジオメトリタイプを取得したい場合があるかと思います。今回はこれを題材にしたいと思います。
対象のワークスペースとフィーチャクラス
以下のようなサンプルデータを作成しました。
②フィーチャクラス
・HOUSE・・・ポリゴン
・HOUSE_ANO・・・アノテーション
・ROAD・・・ライン
・SHOP・・・ポイント
これらをディクショナリで取得しようと思います。{'ROAD': 'Polyline', 'SHOP': 'Point'}のような感じですね。
環境
ArcGIS10.2
Python2.7.3
サンプル
今回も簡単ですね。
# -*- coding: utf-8 -*- import arcpy def get_all_featureclass_type(): geo_type_dict = {} fc_list = arcpy.ListFeatureClasses() for fc in fc_list: geo_type_dict[fc] = get_featureclass_type(fc) return geo_type_dict def get_featureclass_type(fc): fc_type = arcpy.Describe(fc).FeatureType #アノテーションのジオメトリタイプはポリゴンになってしまうのでこの処理を追加 if fc_type == "Annotation": geo_type = "Annotation" else: geo_type = arcpy.Describe(fc).shapeType return geo_type arcpy.env.workspace = "" #gdbを指定 print get_all_featureclass_type()
以下のような結果になりました。
解説
①まず、「ListFeatureClasses()」で「arcpy.env.workspace」で指定したワークスペースに存在するフィーチャクラスのリストを取得します(上記「②フィーチャクラス」参照)。
②取得したフィーチャクラスごとにループして「get_featureclass_type」を呼び出しています。
③「get_featureclass_type」内でジオメトリタイプを取得しています。
※1.アノテーションのジオメトリタイプはポリゴンとして認識されてしまうので、「Annotation」という文字列を代入しています。
※2.「Describe」とは、地理データのプロパティにアクセスする手段です。例えばフィーチャクラスの「Describe」は以下です。
「Describe」はけっこう使える関数なので、ぜひ積極的に使ってみてください!簡単ですが、本日は以上です。