Pythonスクリプト内でポリゴンの面積を計算しようとしています。2つのポリゴンをマージして新しいポリゴンを作成し、結果のポリゴンの領域を出力ファイルのフィールドに追加します。ポリゴンは通常のシェープファイルに保存され、投影されます。できればマップ単位の面積。
これは非常に一般的で簡単な作業だと思っていましたが、Googleの多くにもかかわらず、今のところ有効なソリューションを見つけることができませんでした。
arcpy.updateCursor
値を計算したら挿入することを計画していました(この段階ではFCに機能は1つしかありません)ので、変数として返すことができるのが最も簡単です。同じタスクを実行する(面積値を正しいフィールドに取得する)代替ソリューションも機能します。
Pythonのフィールド計算機も試しました。ヘルプページから変更したものは、次のように動作すると思いましたが、これまでのところ運はありません。
arcpy.AddField_management(tempPgs, "Shape_area", 'DOUBLE')
exp = "float(!SHAPE.AREA!.split())"
arcpy.CalculateField_management(tempPgs, "Shape_area", exp)
Windows 7でPython 2.7を使用してArcGIS Basic 10.1 SP1を実行する。
現在のコードの関連部分は次のようになります。
#/.../
arcpy.Copy_management(inpgs, outpgs)
arcpy.AddField_management(outpgs, 'Shape_area', 'LONG')
fields = AM.FieldLst(outpgs)
#/.../
# Identify and search for shapes smaller than minimum area
where1 = '"' + 'Shape_Area' + '" < ' + str(msz)
polyrows = arcpy.SearchCursor(inpgs, where1)
for prow in polyrows:
grd1 = prow.GridID # GridID on the current polygon
grd2 = nDD.get(grd1) # GridID on the polygon downstream
# Update features
if grd2
geometry1 = prow.Shape
geometry2 = geometryDictionary[grd2]
# Update temporary features
arcpy.Merge_management([geometry1, geometry2], tempMerged)
arcpy.Dissolve_management(tempMerged, tempPgs)
fds = AM.FieldLst(tempPgs)
for field in fields[2:]:
arcpy.AddField_management(tempPgs, field, 'DOUBLE')
for fd in fds[2:]:
arcpy.DeleteField_management(tempPgs, fd)
exp = "float(!SHAPE.AREA!.split())"
arcpy.CalculateField_management(tempPgs, "Shape_area", exp)
# Append them to output FC
try:
arcpy.Append_management(tempPgs, outpgs, "TEST")
except arcgisscripting.ExecuteError:
arcpy.Append_management(tempPgs, outpgs, "NO_TEST")
elif ...
else ...
SHAPE@AREA
、カーソルの一部としてを使用して領域を読み取ることで、目的を達成できます。ただし、コードの構造は、エリアが書き出すものと同じユニットにあるかどうかによって異なります。