Mi pregunta se refiere al uso y el rendimiento de varias herramientas de software en conjunto, a saber, PostgreSQL, PostGIS, QGIS y GDAL.
Soy un usuario de ArcGIS, Python y R desde hace mucho tiempo que está interesado en diversificarse en el ecosistema SIG de código abierto gratuito y Linux también. Recientemente he estado muy interesado en usar QGIS (ver 2.8) junto con PostgreSQL (ver 9.4) y PostGIS (ver 2.1), e instalé el software en una computadora con Windows 8.1 x64 (las especificaciones de la computadora en breve: ThinkPad X200 con un Core 2 de 2.1GHz, 8GB de RAM y un SSD de 240GB). Una vez que aprendo cómo administrar mis datos espaciales (~ 100GB en valor), me gustaría ejecutar Ubuntu en esta máquina.
Por el momento, simplemente estoy tratando de almacenar y recuperar de forma confiable archivos de forma y rásteres. Hasta ahora he tenido éxito al cargar archivos de forma en PostGIS, pero los rásteres están resultando más problemáticos. He completado con éxito las importaciones individuales y por lotes de pequeños archivos geoTIFF y GRID, pero los rásteres más grandes (por ejemplo, un archivo IMG o TIFF de celda de 15619x14655 de 870 MB de tamaño en el disco) tardan una eternidad en cargarse en PostGIS. Leí y configuré la herramienta raster2pgsql para crear índices espaciales y cargar rásteres por mosaicos usando estos parámetros:
raster2pgsql -s 3161 -C -I D:\PostGIS_data\dem.img -t auto raster.dem | psql -h localhost -U postgres -p 5432 -d postgres
El rendimiento en la importación sigue siendo muy pobre, y el hardware no es el problema. La visualización de rásteres PostGIS en QGIS es aún peor, carga lentamente pequeños rásteres en el mejor de los casos o se congela por completo. Los rásters grandes como el que mencioné son imposibles de visualizar en QGIS. De las discusiones de documentación y foros, esta deficiencia parece deberse al controlador ráster PostGIS de GDAL y no a QGIS en sí. Las discusiones del foro mencionan brevemente este problema y algunos incluso sugieren que los rásteres no deberían almacenarse en PostGIS (¿cuál es el punto en una base de datos espacial que no maneja los rásteres sin problemas?). Sin embargo, uso habitualmente la geodatabase de archivos de ESRI para almacenar, visualizar y analizar rásteres bastante grandes (~ 70 GB) de forma rápida y fácil, y ArcGIS 10.1 nunca se congela o ralentiza debido a tales operaciones de rutina.
¿Hay algo que me falta aquí, un cuello de botella que no he abordado? ¿PostgreSQL necesita ajustes para darse cuenta de los beneficios de rendimiento de PostGIS? ¿Me estoy perdiendo una versión de GDAL que necesito buscar y compilar? ¿Cómo mejoro especialmente el rendimiento y la visualización de PostGIS en QGIS de shapefiles y rásteres? ¿Cómo puedo disfrutar de la gloria de la gestión de datos espaciales completa y rápida a través de un terminal Linux? ¡Cualquier ayuda sobre este tema sería bienvenida!
Seguí esta guía por un Duncan Golicher: https://duncanjg.wordpress.com/2012/11/20/the-basics-of-postgis-raster/
Originalmente estaba usando mosaicos con una configuración automática, pero restablecí el mosaico a 100x100 celdas por fila y luego incluí las pirámides como se muestra en la guía de esta manera:
raster2pgsql -s 3161 -d -C -I -M -l 4 D:\PostGIS_data\dem.img -t 100x100 raster.dem100 | psql -h localhost -U postgres -p 5432 -d postgres
Pude importar con éxito el ráster IMG de 870 MB en un buen momento y mostrarlo en QGIS sin ralentizar ni bloquear la aplicación. El tiempo de renderizado no es tan rápido como esperaba, pero es aceptable. Leeré más sobre el parámetro -l para usarlo correctamente.
Por cierto, al importar el archivo dem.img como la tabla dem100 se creó otra tabla ráster llamada "o_4_dem100". Cuando lo importo como una capa en QGIS, tiene un rango de valores entre 201 y 524, mientras que la capa dem100 tiene un rango de 36 a 524. Estoy en lo cierto al suponer que esta tabla adicional es la tabla piramidal que tiene una tabla más estrecha rango de valores como resultado de ser agregado a una resolución menor?
No creo que el problema sea un hardware inadecuado. Aquí hay un breve resumen de lo que he encontrado hasta ahora.
El controlador ráster PostGIS de GDAL ha tenido problemas de rendimiento anteriores ( ver aquí también ). Aunque estos problemas se observaron en 2012, me pregunto si GDAL 1.11.2 encontrado en QGIS 2.8 todavía tiene este problema. ¿Seguramente hay otros que usan QGIS y PostGIS para la visualización y almacenamiento de ráster?
En una posible nota relacionada, también he tenido problemas de rendimiento al abrir tablas de atributos de PostGIS en QGIS con tablas de ~ 4.7m de registros . Después de algunas sugerencias en ese hilo y sin solucionar el problema, finalmente presenté un informe de error con QGIS que finalmente se cerró y se vinculó al siguiente informe de error similar . Aunque el informe de error está cerrado, no parece estar solucionado ...
Para resumir mis esfuerzos hasta ahora:
- He optimizado el servidor PostgreSQL para datos espaciales.
- Construí índices espaciales para tablas de geometría y realicé un VACÍO.
- El comportamiento de QGIS para abrir tablas de atributos grandes (~ 4.7m registros) parece intentar leer todos los registros en lugar de devolver un subconjunto para una visualización instantánea. Esto lleva a un bajo rendimiento.
El rendimiento en la representación de grandes tablas de geometría PostGIS no parece ser un problema.
Con raster2pgsql, los rásteres fueron indexados, en mosaico e importados como tablas ráster con pirámides en PostGIS.
- Los rásteres de cualquier tamaño razonable aún son increíblemente lentos para importar a PostGIS, y mucho menos abrir y desplazarse en QGIS.
También vale la pena señalar que al importar grandes rásteres o abrir grandes tablas de atributos con PostGIS, el consumo de memoria para raster2pgsql y qgis-bin supera los 1 GB. Como @Michael y @Paul han mencionado en respuesta a mi pregunta inicial, parece que PostGIS no está destinado a aportar muchos beneficios, si es que tiene alguno, para almacenar rásteres. Sin embargo, en ese momento me pregunto por qué debería ejecutar QGIS + PostGIS para mis necesidades de SIG, especialmente cuando los archivos ESDGDB habilitan atributos ráster, datasets de mosaico y otras operaciones ráster facilitadas por la geodatabase. Entonces, tal vez o realmente me estoy perdiendo algo o QGIS y PostGIS no satisfacen mis necesidades de SIG. Encuentro esto último difícil de creer.
fuente
Respuestas:
Si desea mostrar grandes rásteres en QGIS, debe construir pirámides, ya sea para una imagen tif en el sistema de archivos o para una imagen registrada en Postgis.
La diferencia de rendimiento en la representación QGIS entre un gran ráster en el sistema de archivos o en Postgis es mínima. Los usuarios no notarán la diferencia. Pero, si y solo si, construye las pirámides con la opción
-l
.Si simplemente importa la imagen sin la opción -l, o simplemente
-l 4
no funcionará .Si usa, por ejemplo,
-l 2,4,8,16
se crearán cuatro niveles de pirámides, como en la capa a continuación:Si desea tener una mejor experiencia de usuario, debe agregar más niveles de pirámides, como
-l 2,4,8,16,32,64,128,256
. Esto creará ocho niveles de pirámides.Para resumir, la respuesta a esta pregunta es: importe el ráster con la opción
-l
y use la misma cantidad de niveles de pirámide que usa para el mismo ráster en el sistema de archivos.Por ejemplo:
fuente
Estoy teniendo exactamente los mismos problemas con la representación de rásteres en QGIS de PostGIS (vea mi pregunta reciente ) Encontré esta publicación útil y aumentó ligeramente la siguiente representación de ráster mejorada:
shared_buffers = 5000MB work_mem = 100MB maintenance_work_mem = 100MB
Sin embargo, dicho esto, estoy totalmente de acuerdo en que el rendimiento de los rásteres PostGIS en QGIS no es excelente. Estoy tratando con 608 geotiffs comprimidos que se cargan muy bien como un VRT pero que son esencialmente inutilizables en PostGIS. Intente aumentar el rendimiento del servidor dbase, pero más allá de eso no puedo ser demasiado útil. Yo también podría tener que confiar en el sistema de archivos para servir rásteres dentro de mi organización.
fuente
No estoy seguro de si fue su caso, pero descubrí
-I
que no debe usarse junto con los datos adjuntos-a
.Estaba importando muchos archivos TIF a una base de datos, y de
-I
hecho, creo el índice nuevamente y lo realizoanalyse
en la tabla para cada archivo, lo que lleva 10 veces más tiempo.-I
solo debe usarse al crear la tabla, con-p
opción.fuente