Estoy usando la Consola de Python de QGIS para automatizar algún procesamiento por lotes. Quiero crear una capa de polígonos de Voronoi a partir de datos de puntos (resolví esta parte) y luego, a partir de una carpeta de shapefiles, recortar la capa de polígonos de Voronoi con cualquiera de los shapefiles que la intersecten, pero estoy obteniendo el error: AttributeError: 'str' object has no attribute 'geometry'
Estoy acostumbrado a ArcPy y realmente he estado luchando por entender el Python de QGIS. Siento que el libro de recetas y los recursos de la API son un poco abrumadores para mí (un principiante en Python)
¿Alguna sugerencia?
import os
from qgis.gui import *
from qgis.core import *
import processing
#------------------------------------------------------
# Variables del Usuario:
#ruta a la ubicación de los datos
soil_path = "D:\\suelo\\datosuelo"
shp_path = "D:\\suelo\\límites_campo"
print ("Datos de Suelo: " + soil_path)
print ("Límites de Campo: " + shp_path)
#-------------------------------------------------------
def obtener_datos(ruta, terminacion):
lista_datos = []
for root, dirs, files in os.walk(ruta):
for data in sorted(files):
if data.endswith(terminacion):
lista_datos.append(os.path.join(root, data))
return lista_datos
print (str(len(lista_datos)) + " shapefiles encontrados")
def recortar(vor_poly):
datos_recortados = []
datos_shp = obtener_datos(shp_path, ".shp")
print (str(len(datos_shp)) + " límites de campo encontrados")
for f in datos_shp:
print (f)
print (vor_poly)
if f.geometry().intersects(vor_poly.geometry()):
OUTPUT = os.path.splitext(polinomios)[0] + os.path.basename(f) + ".shp"
processing.runalg('qgis:clip', vor_poly, f, OUTPUT)
print ("recortado " + OUTPUT)
datos_recortados.append(OUTPUT)
return datos_recortados
def procesoqgis(puntosuelo):
#polígonos de Voronoi con buffer de tamaño 0
print("Polígonos de Voronoi")
for f in puntosuelo:
split_path = os.path.splitext(f)[0]
capaentrada = f
capasalida = split_path + "_vor_poly.shp"
processing.run("qgis:voronoipolygons", { 'INPUT':capaentrada, 'BUFFER': 0, 'OUTPUT': capasalida})
poligonosrecortados = recortar(capasalida)
def principal():
#lista de datos
datos_suelo = obtener_datos(soil_path, ".shp")
print("ejecutando procesos de QGIS")
procesoqgis(datos_suelo)
if __name__ == '__console__':
principal()