2016-05-26 2 views
0

J'essaie d'obtenir la zone de chaque polygone dans le fichier .shp, puis de l'ajouter à une nouvelle colonne dans la table attributaire.Recherche d'une zone à l'aide de 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  

est ci-dessous une suggestion que je l'ai reçu, mais je ne comprends pas bien

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])) 

Voici mon message d'erreur:

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

Utilisez-vous Arc 10.1 ou plus? (Les curseurs DA sont plus faciles à utiliser, mais pas disponibles dans les versions antérieures.) – Erica

+0

Vos fonctions Describe et UpdateCursor ont besoin du paramètre input_shp et non de votre tableau vide (totarea) param. Vous n'avez pas besoin de la totarea si vous ne voulez que des surfaces par ligne calculées. Cela devrait ajouter une nouvelle colonne à votre input_shp avec la zone pour chacun. Notez que vous pouvez utiliser Calc Field pour cela et tout faire en même temps. – Tom

Répondre

0

Comme il est une base de données de géométrie centrée sur , Arc stocke automatiquement la surface totale d'un polygone en tant qu'attribut. Il n'y a pas besoin de le calculer, ce qui est pourquoi (je suppose) que l'extrait de code vous a été suggéré:

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])) 

Ce effectue les opérations suivantes:

  1. Créer un curseur pour passer par l'entrée shapefile input_shp , en tirant seulement deux attributs (l'ID de l'objet et la superficie totale).
  2. Parcourez le fichier de formes une ligne à la fois.
  3. Pour chaque ligne, imprimez row[0] (l'ID de l'objet) et row[1] (la superficie totale).

Pour en savoir plus, jetez un oeil à this excellent answer on GIS.SE. Il explore certaines des options pour accéder et calculer la géométrie en détail.

(Note finale: l'attribut [email protected] sera in the units of the data's projection Soyez conscient de cela si vous obtenez des numéros inattendus..)