概要
Python を使用して、マルチ パート ポリゴンからシングル パート ポリゴンを作成し新規フィーチャクラスとして出力します。
このサンプルでは、マルチ パート ポリゴンの各パートからシングル パート ポリゴンを新規に作成する処理を行っています。
サンプル コード
# coding:cp932
# ArcPy サイト パッケージをインポートします。
import arcpy
# ワークスペースを設定します。
path = r"D:FAQdatabase.gdb"
arcpy.env.workspace = path
arcpy.env.overwriteOutput = True
# 変数を設定します。
inputFc = "TestPolygonMultiPart"
createFc = "TestPolygonSinglePart"
# シングル パート ポリゴンを格納するフィーチャクラスを作成します。
spRef = arcpy.Describe(inputFc).spatialReference
arcpy.CreateFeatureclass_management(path, createFc, "POLYGON", "", "", "", spRef)
# 作成したフィーチャクラスにマルチ パート ポリゴン フィーチャクラスと同じフィールドを追加します。
fieldList = arcpy.ListFields(inputFc)
fieldNameList = []
for field in fieldList:
# OBJECT ID と SHAPE フィールドは既に追加されているので、追加対象から除きます。
if field.type != "OID" and field.type != "Geometry" and field.name.lower() != "shape_length" and field.name.lower() != "shape_area":
arcpy.AddField_management(createFc, field.name, field.type)
fieldNameList.append(field.name.encode("cp932"))
# マルチパート ポリゴンから座標値を取得します。
fieldNameList.insert(0, "SHAPE@")
sCursor = arcpy.da.SearchCursor(inputFc, fieldNameList)
# データアクセス モジュールの InserCursor を取得します。
iCursor = arcpy.da.InsertCursor(createFc, fieldNameList)
# マルチパート ポリゴンの各パートに対して処理を行います。
for sRow in sCursor:
shape = sRow[0]
i = 0
while i < shape.partCount:
rowValues = []
# パートの Array オブジェクトを取得します。
array = shape.getPart(i)
# Array オブジェクトから Polygon オブジェクト(パート)を作成します。
polygon = arcpy.Polygon(array, spRef)
rowValues.append(polygon)
# Polygon オブジェクトを作成したフィーチャクラスに挿入します。
for j in xrange(1, len(sRow)):
rowValues.append(sRow[j])
iCursor.insertRow(rowValues)
i += 1
# オブジェクトを削除して参照を開放します。
del sCursor, iCursor
免責事項
こちらのサンプルはあくまでもコーディングの見本であり、実行時に発生したエラーの対処方法につきましては、サポート対象外とさせていただきます。また、操作方法やソースコードに関するご質問は別途有償の開発者サポート契約にてご対応させていただきます。なお、コードを実行して生じたいかなる損害についても弊社では責任を負いかねます。
このナレッジはお役に立ちましたか?
フィードバックをいただきありがとうございます!