1 votos

ArcPy.da.SearchCursor no se puede cursar

Estoy utilizando ArcMap 10.8.1.

Tengo archivos shape que son una serie de polígonos superpuestos de huellas de imágenes de drones. Quiero hacer un bucle a través de cada shapefile, y para cada shapefile hacer un bucle y rasterizar cada polígono/fila en cada uno de esos shapefiles. Escribí un código que adapté de aquí ( Polígono a trama: Creación de 1 raster por cada polígono en la clase de característica ) donde yo:

  • encontrar una lista de todos los shapefiles que terminan en "*footprints.shp" en un lugar intermedio STEPS carpeta
  • crear una subcarpeta de salida en STEPS\rasterfootprints para que cada archivo que procese contenga las huellas rasterizadas
  • BuscarCursor a través y crear rásteres de cada polígono en el shapefile.

Se ejecuta el siguiente código:

import arcpy
import math
import os

root = r"C:\users\myusername\Desktop\ORTHO_FOOTPRINT_AUTOMATION" #change the filepath here
inputs = root + r"\INPUT_CSVS" #input directory of geotag CSVs
steps = root + r"\STEPS" #location of temporary file storage of intermediate processing steps
rfoots = root + r"\STEPS\rasterfootprints" #subfolder in steps to store the 100's of rasterized individual photo footprints
outputs = root + r"\OUTPUT_SHAPEFILES" #location of final

arcpy.env.workspace = steps
arcpy.env.overwriteOutput = True
shplist = arcpy.ListFiles("*footprints.shp")
for shp in shplist:
    prefix = shp.rsplit('footprints.shp')[0]
    os.makedirs(rfoots + '\\' + prefix)
    outfolder= (rfoots + '\\' + prefix)
    PIDname = "PID" #Sequential PhotoID field
    InFeatures=shp
    with arcpy.da.SearchCursor(shp, PIDname) as sCur:
        for row in sCur:
            out_Raster = "PID{}.tif".format(row[0])
            arcpy.MakeFeatureLayer_management(shp, "Layer")  # make a new layer
            arcpy.PolygonToRaster_conversion(shp, "COUNT", os.path.join(outfolder, out_Raster))
            arcpy.Delete_management("Layer")

Pero parece ignorar el cursor de búsqueda a través del campo "PID" (tipo:Largo) y produce la misma trama de toda el área (es decir, una trama de TODAS las huellas de las fotos) para cada archivo que debería ser de una sola foto.

enter image description here

Cuando debería darme algo como esto (creado a partir de la ejecución manual en QGIS):

enter image description here

Este es el aspecto de mi tabla de atributos:

enter image description here

¿Qué tengo que cambiar en mi script?

3voto

Anton8000 Puntos 165

Usted está creando la misma capa de características para cada fila, y la capa es todo el shapefile. A continuación, rasterizar la forma.

Añadir una cláusula where para hacer sólo una capa de características de la fila actual del cursor y rasterizar "Layer" :

...
with arcpy.da.SearchCursor(shp, PIDname) as sCur:
    for row in sCur:
        out_Raster = "PID{}.tif".format(row[0])
        sql = """{0} = {1}""".format(arcpy.AddFieldDelimiters(datasource=shp, field=PIDname), row[0])
        arcpy.MakeFeatureLayer_management(in_features=shp, out_layer="Layer", where_clause=sql)
        arcpy.PolygonToRaster_conversion("Layer", "COUNT", os.path.join(outfolder, out_Raster))
        arcpy.Delete_management("Layer")
...

0voto

user1965813 Puntos 153

Y si ayuda tengo este código Python que utiliza arcpy 2.7 para crear un nuevo raster a partir de una clase de características de huellas de imágenes de drones. Los valores de la trama son el número de imágenes superpuestas en cada píxel.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X