2016-05-26 6 views
0

.shpファイル内の各ポリゴンの領域を取得し、それを属性テーブルの新しい列に追加しようとしています。以下はSHAPE @ AREAを使用して領域を検索しようとしています

import os 
import arcpy 
import math 
folderpath = 'C:\Users\Michaelf\Desktop\GEOG M173' 
arcpy.env.workspace = folderpath 
arcpy.env.overwriteOutput = True 
input_shp = folderpath + r'\lower48_county_2012_election.shp' 
equal_shape = folderpath + r'\project_lower48.shp' 
out_point = folderpath + r'\lower_48_centroid.shp' 
out_shp = folderpath + r'\48_State_Centroids.shp' 
totarea = [] 
arcpy.AddField_management(input_shp, "totarea") 
geometryField = arcpy.Describe(totarea).shapeFieldName 
cursor = arcpy.UpdateCursor(totarea) 
for row in cursor: 
    AreaValue = row.getValue(geometryField).area 
    row.setValue("total_area",AreaValue) 
    cursor.updateRow(row) 
del row, cursor 
print AreaValue  

は、私が受け取った1つの提案ですが、私はかなり理解していないこと。ここ

with arcpy.da.SearchCursor(input_shp, ("[email protected]", "[email protected]")) as cursor: 
for row in cursor: 
    print("Feature {0} has an area of {1}".format(row[0], row[1])) 

は私のエラーメッセージです:それは幾何学中心のデータベースがありますので

Traceback (most recent call last): 
File "C:/Users/Michaelf/Desktop/GEOG M173/test2.py", line 16, in <module> 
geometryField = arcpy.Describe(totarea).shapeFieldName 
File "C:\Program Files (x86)\ArcGIS\Desktop10.3\ArcPy\arcpy\__init__.py", line 1246, in Describe 
return gp.describe(value) 
File "C:\Program Files (x86)\ArcGIS\Desktop10.3\ArcPy\arcpy\geoprocessing\_base.py", line 374, in describe 
self._gp.Describe(*gp_fixargs(args, True))) 
RuntimeError: Object: Describe input value is not valid type 
+0

あなたはアーク10.1以上を使用していますか? (DAカーソルは使いやすく、以前のバージョンでは利用できませんでした。) – Erica

+0

Describe関数とUpdateCursor関数には空の配列(totarea)paramではなくinput_shpパラメータが必要です。計算された行の領域のみを必要とする場合は、totareaは必要ありません。これはそれぞれの領域を持つinput_shpに新しい列を追加するはずです。 Calcフィールドを使用してこれを一度に行うことができます。 – Tom

答えて

0

Arcは自動的にポリゴンの総面積を属性として保存します。

  1. は、入力シェープファイルinput_shp通過するカーソルを作成します。
    with arcpy.da.SearchCursor(input_shp, ("[email protected]", "[email protected]")) as cursor: 
        for row in cursor: 
         print("Feature {0} has an area of {1}".format(row[0], row[1])) 
    

    この

    は、次の操作を実行します。そのコードスニペットがあなたに示唆された(私は仮定)理由は、それを計算する必要は、ありません(オブジェクトIDと総面積)を2つだけ引き出します。
  2. シェイプファイルを一度に1行ずつループします。
  3. 各行に対して、row[0](オブジェクトID)とrow[1](合計領域)を出力します。

さらに詳しくは、this excellent answer on GIS.SEを参照してください。ジオメトリにアクセスして計算するためのオプションのいくつかを詳しく解説します。

(最後の注意:[email protected]属性はin the units of the data's projectionになりますあなたが予想外の数字を取得している場合、この注意してください。)

関連する問題