FAQ
ArcPy (ArcMap): 面積按分を行うツール

ナレッジ番号:2921 | 登録日:2023/05/29 | 更新日:2024/11/21

概要

面積按分を行うサンプル ツールをご紹介します。

入力パラメータ

  • [入力ポリゴン] : 面積按分に使用する形状を持ったポリゴン データ、もしくはポリゴン レイヤを設定します。
  • [参照ポリゴン] :面積按分を行いたい数値が格納されているポリゴン データ、もしくはポリゴン レイヤを設定します。
  • [対象フィールド] : 面積按分に使用する数値フィールドにチェックを入れます。
  • [出力ポリゴン] : 処理結果を格納したポリゴンの出力先、出力名を設定します。

内容

入力ポリゴンに対して参照ポリゴンと重なる面積比率を計算し、参照ポリゴン内の属性について、その比率を考慮した数値を取得します。 出力ポリゴンの属性には対象フィールドにチェックをしたフィールドのみ受け継がれます。 出力ポリゴンの属性には入力ポリゴンのオブジェクト ID がフィールド名 【Ori_OID】 として受け継がれます。

使用手順

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

ダウンロード

面積按分ツール

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

Python ソース コード

# coding:cp932
# Purpose : 面積按分を行うツール
#
# Author : ESRIジャパン


# ArcPy サイト パッケージ、os.path モジュールのインポート
import arcpy,os.path
arcpy.env.overwriteOutput = True

# パラメータの設定
inFC = arcpy.GetParameterAsText(0)
refFC = arcpy.GetParameterAsText(1)
Fields = arcpy.GetParameterAsText(2)
outFC = arcpy.GetParameterAsText(3)

# テンポラリ データの作成
arcpy.CopyFeatures_management(refFC,r"in_memory\Copy")
arcpy.AddField_management(r"in_memory\Copy","areaaaaaa","DOUBLE")
arcpy.CalculateField_management("in_memory\Copy","areaaaaaa",'!Shape!.area',"PYTHON_9.3")

sr = arcpy.Describe(inFC).spatialReference
arcpy.CreateFeatureclass_management(os.path.dirname(outFC),os.path.basename(outFC),"POLYGON","","","",sr)

for field in Fields.split(";"):
    arcpy.AddField_management(outFC,field,"DOUBLE")

StaCount = len(Fields.split(";"))
FieldList = ["SHAPE@"] + Fields.split(";")


Cur = arcpy.da.SearchCursor(inFC,["SHAPE@"])
InCur = arcpy.da.InsertCursor(outFC,FieldList)

# 面積按分の実行
for row in Cur:
    geom = row[0]
    arcpy.Clip_analysis("in_memory\Copy",geom,r"in_memory\Clip")
    i = 1
    NewValList = []
    while i < StaCount+1:
        NewVal = 0
        ClipCur = arcpy.da.SearchCursor(r"in_memory\Clip",FieldList + ["areaaaaaa"])
        for ClipRow in ClipCur:
            if ClipRow[i] == None:
                pass
            else:
                NewVal += ClipRow[i] * ClipRow[0].area / ClipRow[-1]
        NewValList.append(NewVal)
        i += 1
    InCur.insertRow([geom] + NewValList)

# テンポラリ データの削除
arcpy.Delete_management(r"in_memory")
del InCur,ClipCur,Cur

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

メタデータ

種類

製品

バージョン