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?
Respuestas
¿Demasiados anuncios?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:
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
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': {}})
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.