2 votos

Convirtiendo un polígono de entrada a GeoDataFrame en Python

Estoy en proceso de desarrollar un plugin para QGIS y necesito convertir una capa vectorial de entrada (que contiene un polígono) en GeoDataFrame. La capa de entrada se importa de la siguiente manera:

input_Area = self.dlg.ui.Area.currentLayer()

Y necesito usarla para la siguiente función (que usa un GeoDataFrame como entrada):

def create_grid_from_polygon(polygon, tamaño_grid):
    geometría_polígono = polygon['geometry']
    bbox = geometría_polígono.bounds
    xmin, ymin, xmax, ymax = bbox.minx[0], bbox.miny[0], bbox.maxx[0], bbox.maxy[0]
    #Calcular número de filas y columnas
    fila = int((ymax-ymin) / tamaño_grid)
    col = int((xmax-xmin) / tamaño_grid)

    #Inicializar la cuadrícula de puntos
    capa_grid = []

    for i in range(fila):
        for j in range(col):
            #Calcular coordenadas x e y del punto actual
            x = xmin + j * tamaño_grid
            y = ymin + i * tamaño_grid

            #Crear un objeto QgsPointXY para el punto
            punto = QgsPointXY(x,y)

            #Comprobar si está dentro del polígono y agregar los puntos dentro del área
            if polygon.contains(punto):
                capa_grid.append(punto)

    return capa_grid

He estado intentando algo así:

features = []
for feature in input_Area.getFeatures():
    features.append(feature)

columna_geometría = input_Area.geometry.name()
if columna_geometría:
    gdf = gpd.GeoDataFrame(features, geometry=columna_geometría)
else:
    print("Columna de geometría no encontrada")

Pero realmente no logro que funcione. Parece tener problemas para encontrar el nombre de la columna de geometría, y aquí es importante señalar que dado que el código es para un plugin, el código necesita encontrar este nombre por sí mismo.

Si este método no es posible, me encantaría recibir sugerencias para otra solución.

2voto

Jakub P. Puntos 126

GeoPandas puede crear la instancia GeoDataFrame directamente desde el iterador de características de QGIS, utilizando el from_features() método de clase. Reconocerá correctamente los atributos y la geometría.

¡Todo lo que necesitas hacer es:

gdf = gpd.GeoDataFrame.from_features(input_Area.getFeatures())

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