2016-05-26 37 views
-2

Ich versuche, den gesamten Bereich an die Attributtabelle anzufügen, und es wird ohne jede Fehlermeldung ausgeführt. Ich bin nicht sicher, was ich falsch mache:Ich kann meine Daten nicht an eine Liste anhängen

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' 

projection = arcpy.SpatialReference('USA Contiguous Albers Equal Area Conic USGS') 
arcpy.Project_management(input_shp, equal_shape, projection) 
print 'step 1' 

arcpy.CopyFeatures_management (input_shp, equal_shape) 
tot_area = [] 

print "step 2" 
fields = [ 
    ("totarea", "FLOAT"), 
] 

for field in fields: 
    arcpy.AddField_management(equal_shape, "totarea") 
print "step 3" 

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

a_cursor = arcpy.SearchCursor(equal_shape) 
for area in a_cursor: 
    tot_area.append(area.totarea,) 
print "step 5" 

Update: wnnmaw wenn ich laufe den Code läuft und druckt eine Liste der Funktionen/Polygonbereich, aber wenn ich das öffnen SHP die neue Spalte Datei ist da, und keine der Daten hängt an die Liste an. ZWiki Wenn ich die Liste drucke, gibt es eine riesige Liste von Nullen zurück, wie sie in der Attributtabelle aufgelistet sind. Im Code klassifiziere ich es als ein FLOAT, aber in arcmap Attributtabelle Eigenschaften identifiziert es immer noch als LANG, könnte dies das Problem sein, da die Antworten Dezimalzahlen sind?

+5

Was ist * * spezifische Problem, das Sie stoßen? Bitte fügen Sie die Liste, die Sie anhängen möchten, eine relevante Ausgabe hinzu und was Sie bisher versucht haben, um das Problem zu lösen – wnnmaw

+0

Nun meine Vermutung wäre, dass 'arcpy.SearchCursor' dann eine leere Liste zurückgibt oder etwas zurückgibt du erwartest nicht. Können Sie das ausdrucken und uns sagen, was es zurückgibt? Auch sollten Sie entweder die Backslashes in 'folderpath' entziehen oder als rohen String angeben, wie Sie' input_shp' und 'equal_shape' haben. – ZWiki

Antwort

0

Erstens: Sie haben ein Problem mit dem Datentyp, wenn Sie diese Liste von Feldern hinzufügen.

Dieser Code fügt einfach ein Feld mit dem Namen totarea hinzu und macht nichts mit den Daten in der fields-Liste.

for field in fields: 
    arcpy.AddField_management(equal_shape, "totarea") 

Statt:

fields = [("totarea", "FLOAT")] 
for field in fields: 
    arcpy.AddField_management(equal_shape, field[0], field[1]) 

Zweitens: Use an UpdateCursor. Suchcursor haben keine Möglichkeit, die Daten der Tabelle zu ändern.

Wenn Sie mit dieser Liste von Gebieten halten wollen:

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

sum_area = sum(tot_area) 
with arcpy.da.UpdateCursor(equal_shape, ["TOTAREA"]) as cursor: 
    for row in cursor: 
     row[0] = sum_area 
     cursor.updateRow(row) 
print "step 5" 

Oder einfach zusammenzufassen, wie Sie die SearchCursor durchlaufen:

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

with arcpy.da.UpdateCursor(equal_shape, ["TOTAREA"]) as cursor: 
    for row in cursor: 
     row[0] = tot_area 
     cursor.updateRow(row) 
print "step 5" 
+0

Danke für die Hilfe, ich habe versucht, die erste und die Summe zu verwenden, aber jedes Polygon hat einen Wert von 0, 1 oder 2. Der Bereich ist jedoch 0.300735193692 Gibt es eine Möglichkeit, die Dezimalwerte an die Attributtabelle anzuhängen? –

+0

Solange das Feld 'TOTAREA' vom Typ float ist, sollten Sie in der Lage sein, Dezimalzahlen anzuhängen. – Erica

+0

Danke für die Hilfe, ich habe sichergestellt, dass es ein Float ist und es füllt immer das Feld mit dem gleichen Wert 817.129. Jede Rückmeldung würde sehr geschätzt werden –