7 votos

Crear shapefile de trama de contorno utilizando python

Quiero crear un único polígono shapefile delimitador de píxeles válidos en datos raster (GeoTIFF) usando python.

Necesito algo eficaz ya que necesito hacer esto para cientos de tramas. Yo había pensado en escribir una máscara utilizando numpy simple manipulación, pasando a gdal_polygonize.py, pero que no será lo suficientemente rápido. ¿Alguien sabe de una manera más directa?

4voto

Mat Puntos 196

Si su rásteres son propensos a tener irregulares o girado límites, puede cargar los rásteres en postgres utilizando raster2pgsql, a continuación, ejecutar el sql que genera, algo como esto

raster2pgsql -I -C -s <SRID> <PATH/TO/RASTER FILE> <SCHEMA>.<DBTABLE> | psql -d <DATABASE>

Para hacer esto, usted necesita para asegurarse de que usted cree su primera base de datos, y permitir a la extensión postgis.

por ejemplo,

raster2pgsql -I -C -s 27700 "/path/to/xyz.tif" public.test | psql -d rastertest

Aquí, la base de datos es 'rastertest' y la trama está escrita en su propia mesa, 'prueba'.

Usted puede utilizar ST_ConvexHull para generar un polígono de la geometría del contorno. ST_MinConvexHull hace lo mismo, pero excluye NODATA píxeles.

select ST_AsEWKT(ST_ConvexHull(rast)) from test;

No estoy seguro de cómo la velocidad sería comparar a su propuesta de numpy máscara de solución, pero podría ser vale la pena intentarlo. He encontrado en mi laptop que se generó el convex hull en 142ms para un 2000x2000, 16Mb tiff.

Como vas a estar haciendo esto en un montón de imágenes, usted probablemente querrá script en python (el psycopg2 de la biblioteca es la mejor manera de acceder a postgres desde python)

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