es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El GeoDataFrame está invertido cuando lo convertí de Raster a Vector utilizando RasterIO.

Actualmente estoy usando este código para convertir un archivo de raster a un geodataframe:

import rasterio 
from rasterio.features import shapes
mask = None 

with rasterio.open(#INSERTAR ARCHIVO TIF AQUÍ) as src:
    image = src.read(1) # primer banda, aún no estoy seguro de cómo hacerlo con varias bandas
    results = (
    {'properties': {'raster_val': v}, 'geometry': s}
    for i, (s, v) 
    in enumerate(
        shapes(image, mask=mask))) geoms = list(results)

import geopandas as gpd
gpd_polygonized_raster = gpd.GeoDataFrame.from_features(geoms)

El problema es que el geodataframe se muestra boca abajo en lugar de su orientación esperada.

Cualquier ayuda en esto sería apreciada. ¡Gracias!

Tenga en cuenta que el archivo TIFF ya tiene una proyección de EPSG: 4326.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para solucionar el problema de la orientación invertida de la geodataframe, se puede agregar el siguiente código antes de crear la GeoDataFrame:
    geoms = [gpd.GeoDataFrame.from_features([feature]).set_crs('EPSG:4326').iloc[0].geometry for feature in geoms]
    Este código reorienta las geometrías en la lista geoms para que coincidan con la orientación esperada según la proyección EPSG:4326. Las geometrías reorientadas se utilizan luego para crear la GeoDataFrame final.
    El código actualizado debería verse así:

    import rasterio 
    from rasterio.features import shapes
    mask = None 
    
    with rasterio.open(#INSERTAR ARCHIVO TIF AQUÍ) as src:
        image = src.read(1) # primer banda, todavía no estoy seguro de cómo hacerlo con múltiples bandas
        resultados = (
        {'propiedades': {'valor_raster': v}, 'geometría': s}
        for i, (s, v) 
        in enumerate(
            shapes(image, mask=mask))) 
        geoms = list(resultados)
    
    import geopandas as gpd
    geoms = [gpd.GeoDataFrame.from_features([feature]).set_crs('EPSG:4326').iloc[0].geometry for feature in geoms]
    gpd_polygonized_raster = gpd.GeoDataFrame(geometry=geoms)
    

Comments are closed.