FAQ
ArcPy (ArcMap): ドーナツ ポリゴンを作成する方法

ナレッジ番号:2928 | 登録日:2023/05/29 | 更新日:2024/10/09

概要

Python スクリプトを使用して、ドーナツ ポリゴンを作成する方法をご紹介します。

ドーナツ ポリゴンは複数のパートを組み合わせて作成します。一つのパートのみで作成されたジオメトリのことをシングルパート ジオメトリといい、それに対して複数のパートを一つのジオメトリとして作成されたものをマルチパート ジオメトリといいます。ここでは、ドーナツ ポリゴンを構成する外側のパートと内側の穴を開けるパートの二つを使用してマルチパート ジオメトリとして一つのドーナツ ポリゴンを作成しています。ポリゴン ジオメトリ内では、外側境界が常に時計回りの方向に格納されます。ポリゴンに穴がある場合、穴(つまり、内側)の境界は常に反時計回りの方向に格納されます。

Image

サンプル コード

# coding:cp932

# ArcPy サイトパッケージをインポートします。
import arcpy

# ワークスペースを設定します。
arcpy.env.workspace = r"D:\FAQ\database.gdb"

# ドーナツ ポリゴンの外側部分のポリゴンを作成します。
# Polygon オブジェクトを作成するには、ポリゴンの頂点となる Point オブジェクトと、ポイントを配列する Array オブジェクトを作成する必要があります。
# まず、Point コンストラクタに座標値を設定して Point オブジェクトを作成します。
pointObject1 = arcpy.Point(0, 0)
pointObject2 = arcpy.Point(0, 20)
pointObject3 = arcpy.Point(20, 20)
pointObject4 = arcpy.Point(20, 0)

# 作成した Point オブジェクトを、Array オブジェクトに追加します。
# Point オブジェクトは時計回りの順番で追加します。
arrayObject = arcpy.Array()
arrayObject.add(pointObject1)
arrayObject.add(pointObject2)
arrayObject.add(pointObject3)
arrayObject.add(pointObject4)
arrayObject.add(pointObject1)    # ポリゴンを閉じるために始点の座標値を再度追加して、ポリゴンを作成します。


# 次に、ドーナツ ポリゴンの内側部分のポリゴンを作成します。
pointObject5 = arcpy.Point(15, 5)
pointObject6 = arcpy.Point(15,15)
pointObject7 = arcpy.Point(5, 15)
pointObject8 = arcpy.Point(5, 5)

# 作成した Point オブジェクトを、Array オブジェクトに追加します。
# Point オブジェクトは逆時計回りの順番で追加します。
holeArray = arcpy.Array()
holeArray.add(pointObject8)
holeArray.add(pointObject7)
holeArray.add(pointObject6)
holeArray.add(pointObject5)
holeArray.add(pointObject8)    # ポリゴンを閉じるために始点の座標値を再度追加して、ポリゴンを作成します。

# 作成した 2 つの Array オブジェクトを、さらに Array オブジェクトに追加します。
donutArray = arcpy.Array([arrayObject, holeArray])

# Array オブジェクトを使用して、Polygon オブジェクトを作成します。
donutPolygon = arcpy.Polygon(donutArray)

# Polygon オブジェクトをフィーチャクラスとして出力します。
resultDonutPolygon = arcpy.CopyFeatures_management(donutPolygon, "DonutPolygon").getOutput(0)

# 出力した「DountPolygon」フィーチャクラスに座標系を定義します。
arcpy.DefineProjection_management(resultDonutPolygon, arcpy.SpatialReference(4612))

免責事項

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

メタデータ

機能

種類

製品