FAQ ArcPy (ArcMap): 属性検索と空間検索を同時に行うツール

ナレッジ番号:2715 | 登録日:2023/05/29 | 更新日:2024/03/26

概要

属性検索と空間検索を同時に実行するサンプル ツールをご紹介します。

入力パラメータ

  • [選択レイヤ] : フィーチャ レイヤを設定します。
  • [条件式](オプション) : 属性検索に使用する条件式を設定します。
  • [空間検索対象レイヤ](オプション) : 空間検索に使用するレイヤを設定します。
  • [検索方法](オプション) : 空間検索を行う方法を選択します。 
  • [検索距離] (オプション) : 空間検索で距離を使用する方法を選択した場合は、検索に使用する距離と単位を設定します。

内容

[選択レイヤ] に設定したフィーチャ レイヤを対象に検索を行います。[条件式] に設定した条件式に該当するフィーチャから [空間検索対象レイヤ] に設定したレイヤと [検索方法] の関係にあるフィーチャをさらに、絞り込んで選択します。[検索距離] パラメータは [検索方法] から「空間検索対象レイヤと「交差する」」、「空間検索対象レイヤと「交差する(3D)」」、「空間検索対象レイヤの「一定距離内に存在する」」、「空間検索対象レイヤの「一定距離内に存在する(3D)」」、「空間検索対象レイヤを「含む」」、「空間検索対象レイヤに「含まれる」」、「空間検索対象レイヤ内に「重心が存在する」」がどれかが選択された場合に有効となります。

また、[条件式] パラメータのみを設定した場合は属性検索、[空間検索対象レイヤ] と [検索方法](一部 [検索距離])のみを設定した場合は空間検索として、それぞれのツールを単体で実行することも可能です。

使用手順

  1. zip ファイルをダウンロードし、任意のフォルダに解凍します。
  2. ArcMap を起動し、データを追加します。
  3. [カタログ] ウィンドウで解凍により作成されたフォルダを展開します。
  4. フォルダ内の「SelectFeature」ツールボックスを展開し、[属性+空間検索] ツールをダブルクリックします。
  5. パラメータを入力し、ツールを実行します。

ダウンロード

属性+空間検索

※ ans4941.zip という名前の zip ファイルがダウンロードされます。

Python ソース コード

# coding:cp932
# Purpose : 属性検索と空間検索の同時実行
#
# Author : ESRIジャパン

# ArcPy サイトパッケージのインポート
import arcpy

# パラメータの設定
inLyr = arcpy.GetParameterAsText(0)
whereClause = arcpy.GetParameterAsText(1)
select_features = arcpy.GetParameterAsText(2)
overlap_type = arcpy.GetParameterAsText(3)
search_distance = arcpy.GetParameterAsText(4)

# 選択状態の解除
arcpy.SelectLayerByAttribute_management(inLyr,"CLEAR_SELECTION")

# 属性検索の実行
valsel = arcpy.SelectLayerByAttribute_management(inLyr,"",whereClause)

# 属性検索の結果が0の場合は、処理を終了
if arcpy.GetCount_management(valsel) == 0:
    pass

# 空間検索の実行
if select_features == "":
    arcpy.SelectLayerByLocation_management(valsel,"ARE_IDENTICAL_TO",select_features,search_distance,"SUBSET_SELECTION")
else:
    if overlap_type == u"空間検索対象レイヤと「交差する」":
        overlap = "INTERSECT"
    elif overlap_type == u"空間検索対象レイヤと「交差する(3D)」":
        overlap = "INTERSECT_3D "
    elif overlap_type == u"空間検索対象レイヤの「一定距離内に存在する」":
        overlap = "WITHIN_A_DISTANCE"
    elif overlap_type == u"空間検索対象レイヤの「一定距離内に存在する(3D)」":
        overlap = "WITHIN_A_DISTANCE_3D"
    elif overlap_type == u"空間検索対象レイヤを「含む」":
        overlap = "CONTAINS"
    elif overlap_type == u"空間検索対象レイヤを「完全に含む」":
        overlap = "COMPLETELY_CONTAINS"
    elif overlap_type == u"空間検索対象レイヤを「含む(clementini)」":
        overlap =  "CONTAINS_CLEMENTINI"
    elif overlap_type == u"空間検索対象レイヤに「含まれる」":
        overlap = "WITHIN"
    elif overlap_type == u"空間検索対象レイヤに「完全に含まれる」":
        overlap = "COMPLETELY_WITHIN"
    elif overlap_type == u"空間検索対象レイヤに「含まれる(clementini)」":
        overlap = "WITHIN_CLEMENTINI"
    elif overlap_type == u"空間検索対象レイヤと「正確に一致する」":
        overlap = "ARE_IDENTICAL_TO"
    elif overlap_type == u"空間検索対象レイヤの「境界に接する」":
        overlap = "BOUNDARY_TOUCHES"
    elif overlap_type == u"空間検索対象レイヤと「線分を共有する」":
        overlap = "SHARE_A_LINE_SEGMENT_WITH"
    elif overlap_type == u"空間検索対象レイヤの「アウトラインが横切る」":
        overlap = "CROSSED_BY_THE_OUTLINE_OF"
    elif overlap_type == u"空間検索対象レイヤ内に「重心が存在する」":
        overlap = "HAVE_THEIR_CENTER_IN"
    arcpy.SelectLayerByLocation_management(valsel,overlap,select_features,search_distance,"SUBSET_SELECTION")

# ArcMap の再描画
arcpy.RefreshActiveView()

こちらのサンプルはあくまでもコーディングの見本であり、ツール実行時に発生したエラーの対処方法につきましては、サポート対象外とさせていただきます。また、操作方法やソースコードに関するご質問は別途有償の開発者サポート契約にてご対応させていただきます。新規バージョンに対応したツールを継続的に提供することを保証するものでもないことも予めご承知おきください。なお、ツールを利用して生じたいかなる損害についても弊社では責任を負いかねます。

メタデータ

カテゴリ

製品

バージョン