Processing math: 100%

15 votos

Hacer un shapefile a partir de límites rasterizados en Python

Tengo una trama que abrí con rasterio . Cuando lo hago raster.bounds Me sale BoundingBox(left=399960.0, bottom=-3309780.0, right=609780.0, top=-3099960.0) . Mi pregunta es ahora, si hay alguna manera sencilla de hacer un shapefile de la misma?

21voto

GreyCat Puntos 146

Con caja con forma y GeoPandas

import rasterio as rio
ra = rio.open("raster.tif")
bounds  = ra.bounds

Convertir los límites en una geometría con forma

from shapely.geometry import box
geom = box(*bounds)
print(geom.wkt)
POLYGON ((205625.4144070312 88411.04799999669, 205625.4144070312 90534.35044407193, 202086.5770002506 90534.35044407193, 202086.5770002506 88411.04799999669, 205625.4144070312 88411.04799999669))

Crear un shapefile con GeoPandas

df = gpd.GeoDataFrame({"id":1,"geometry":[geom]})
df.to_file("boundary.shp")

En una línea:

df = gpd.GeoDataFrame({"id":1,"geometry":[box(*bounds)]})

Resultado:

enter image description here

6voto

BWW Puntos 302

Para el scripting, otras respuestas hacen el trabajo. Si necesita generar shp desde la línea de comandos, le recomiendo que utilice la utilidad de línea de comandos rasterio rio con

rio bounds /tmp/RGBA.byte.tif > tmp.geojson
ogr2ogr RGBA.shp tmp.geojson
rm tmp.geojson

También puede utilizar gdaltindex Por ejemplo

gdaltindex RGBA.shp RGBA.byte.tif

5voto

tranjeeshan Puntos 228

Esta es una solución que utiliza shapely y fiona que tiene en cuenta la referencia espacial del raster y se asegura de que el nuevo shapefile la tenga:

# imports
from shapely.geometry import box, mapping
import fiona
import rasterio

# create a Polygon from the raster bounds
bbox = box(*raster.bounds)

# create a schema with no properties
schema = {'geometry': 'Polygon', 'properties': {}}

# create shapefile
with fiona.open('bbox.shp', 'w', driver='ESRI Shapefile',
                crs=raster.crs.to_dict(), schema=schema) as c:
    c.write({'geometry': mapping(bbox), 'properties': {}})

3voto

Joe Puntos 16

También existe el programa GDAL gdaltindex https://gdal.org/programs/gdaltindex.html para este fin.

Descripción

Este programa construye un shapefile con un registro para cada trama de entrada de entrada, un atributo que contiene el nombre del archivo y una geometría poligonal que delimita el ráster.

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