Tengo dos archivos shape. Uno contiene muchos puntos del estado. El otro es el de todos los condados en el estado. Me gustaría hacer dos cosas:
- utilizar un cursor de contar cuántos puntos hay en cada condado y, a continuación, rellenar un campo nuevo con esos datos; y
- crear un tipo verdadero/falso, campo en el cual la verdadera = el condado contiene más de dos puntos.
Empecé el primero pero no tuvo éxito, por lo que la segunda no estoy seguro de cómo llevar a cabo. Esto es lo que tengo hasta ahora...
import arcpy
points = r"C:\Users\points"
counties = r"C:\Users\counties"
#create new fields
arcpy.AddField_management(counties, "numOfPoints", "LONG", field_length = 10)
arcpy.AddField_management(counties, "hasTwoPoints", "LONG", field_length = 10)
points_lyr = arcpy.MakeFeatureLayer_management(points,r'in_memory\points_lyr')
counties_lyr = arcpy.MakeFeatureLayer_management(counties,r'in_memory\counties_lyr')
# Create an update cursor to access and update states features
#NAME has names of counties and numPoints will be populated with number of points
fields = ['NAME','numOfPoints','hasTwoPoints']
with arcpy.da.UpdateCursor(counties_lyr,fields) as cur:
for row in cur:
county = row[0]
where = '"NAME" = \'{}\''.format(county)
arcpy.SelectLayerByAttribute_management(counties_lyr,'NEW_SELECTION',where)
arcpy.SelectLayerByLocation_management(points_lyr,'INTERSECT',counties_lyr)
number_of_points = int(arcpy.GetCount_management(counties_lyr).getOutput(0))
row[1] = number_of_points
cur.updateRow(row)
print('Operation complete.')
La secuencia de comandos actual funciona, pero se rellena el campo "numOfPoints' con todos los valores 1 lo cual no es correcto.
luego, al final agregar el verdadero/falso basado en la salida de un solo script,
fields2 = ['numOfPoints','hasTwoPoints']
with arcpy.da.UpdateCursor(counties_lyr,fields2) as cur:
for row in cur:
if row[0] > 1: row[1] = 'TRUE'
else: row[1] = 'FALSE'
cur.updateRow(row)
Me sale este error: StopIteration: iteración no se inicia