Bajo rendimiento al almacenar grandes rásteres en PostGIS y visualizar en QGIS

23

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.

mbcaradima
fuente
¿Los rásteres tienen que estar en PostGIS? ¿Qué beneficios / funcionalidad adicional espera obtener de esto? Descubrí que el vector PostGis era aceptable y ofrecía edición para múltiples usuarios, pero el ráster PostGis no tenía beneficios reales sobre el ráster basado en archivos (almacenado en el servidor). Buena pregunta sin embargo; es muy posible que haya algunos beneficios que me perdí en mi evaluación ...
Michael Stimson
Pensé que los rásteres PostGIS permitían cálculos de ráster más rápidos, así como un mejor rendimiento con operaciones ráster / vectoriales. Esto se suma a los beneficios de una base de datos espacial: confiabilidad, accesibilidad, facilidades de respaldo, almacenamiento más compacto, etc. En cualquier caso, un enfoque de archivo / mosaico no permite funciones de búsqueda, pirámides pre-construidas, mosaico y otras capacidades que mejoran cómo se usa y visualiza el ráster.
mbcaradima
No he visto ninguna métrica que diga que los rásteres PostGIS son más rápidos en los cálculos de ráster ... en cualquier caso, con un SSD de 240 GB (buena opción, por cierto, más rápido que RAID a una fracción del costo / esfuerzo) lo llenará muy rápidamente con los rásteres ... ECW / JP2 para 8 bits o GeoTIFF con compresión LZW / Deflate marca la mayoría de esos cuadros, pirámides preconstruidas, mosaico (a través de VRT), copia de seguridad como archivos, etc. El único beneficio es la función de búsqueda. Me doy cuenta de que me estoy desviando un poco del tema, pero si el ráster PostGIS no está haciendo lo que espera, ¿por qué no seguir con el ráster de archivo para mostrar?
Michael Stimson
3
¿Quién dijo que los rásteres PostGIS eran más rápidos que cualquier otra cosa? Pueden ser más convenientes (API de acceso SQL útil) y pueden ser útiles para el análisis (ráster y vector en el mismo depósito) pero más rápido . Nunca.
Paul Ramsey
1
Estoy trabajando en un libro sobre PostGIS (PostGIS en acción, segunda edición) y parecía natural suponer que los beneficios de almacenar archivos de forma en una base de datos espacial también se extenderían a un ráster. Por supuesto, dados sus diferentes modelos de datos, puedo ver que esta suposición era puramente intuitiva. Aún así, los rásteres se almacenan comúnmente en geodatabases con ArcGIS y permiten construir pirámides, geoprocesamiento más rápido y mosaicos de construcción. En un flujo de trabajo con software de código abierto, ¿cómo se supone que debe trabajar un usuario de SIG con rásteres? Por cierto, me daré un puñetazo en la cara.
mbcaradima

Respuestas:

9

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,16se crearán cuatro niveles de pirámides, como en la capa a continuación:

Pirámides generadas con -l 2,4,8,16

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.

ingrese la descripción de la imagen aquí

Para resumir, la respuesta a esta pregunta es: importe el ráster con la opción -ly use la misma cantidad de niveles de pirámide que usa para el mismo ráster en el sistema de archivos.

Por ejemplo:

raster2pgsql -s 3161 -d -C -I -M -l 2,4,8,16,32,64,128,256 D:\PostGIS_data\dem.img -t 100x100 raster.dem100 | psql -h localhost -U postgres -p 5432 -d postgres
jgrocha
fuente
5

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.

Acantilado
fuente
Gracias por tu comentario, Cliff. He aplicado algunos de sus cambios e informaré cualquier mejora importante en el rendimiento. En general, debo decir que el rendimiento de QGIS es decepcionante para visualizar rásteres de PostGIS y cargar / consultar tablas de atributos. El rendimiento de la trama en PostGIS también es decepcionante. No tengo ninguno de estos problemas con las geodatabases de archivos, así que me pregunto qué está mal.
mbcaradima
1
Exactamente mis sentimientos. Pasé la semana tratando de poner esto en marcha y simplemente no pude hacerlo funcionar. Ahora estoy probando mi VM (Ubuntu Server) con 10 procesadores y 10 GB de RAM. Si eso todavía es lento, debo estar haciendo algo más mal. También estoy perplejo por qué las capas WMS en QGIS son básicamente inutilizables debido a su lenta velocidad de representación. Deberíamos conectar más sobre esto ya que ambos estamos en el mismo barco.
Acantilado
Si se cargan muy bien como un VRT, ¿por qué no te detienes allí? ¿Qué ganancia esperas de este gran viaje de trama?
Paul Ramsey
Supongo que mi respuesta a esto, Paul, es exactamente lo que OP dijo en la siguiente publicación: "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 de trama, datasets de mosaico y otras operaciones ráster facilitadas por la geodatabase. Por lo tanto, tal vez realmente me falta algo o QGIS y PostGIS no satisfacen mis necesidades de SIG. Me resulta difícil creer lo último ".
Acantilado
1
Además, diría que aproximadamente el 70% del análisis que hago está en rásteres, y aproximadamente el 40% de los datos que deseo servir a mi organización a través de QGIS son datos ráster. Simplemente tiene sentido tener todos los datos ráster y vectoriales en una base de datos para que los usuarios puedan configurar una conexión y tener acceso a la base de datos de toda nuestra organización. En cambio, tendría que crear creds para el dbase y creds para el recurso compartido de archivos. Alternativamente, estoy considerando seriamente eliminar QGIS y crear una aplicación web con Geoserver (pd: siempre dispuesto a colaborar en esto con cualquier persona interesada).
Acantilado
4

No estoy seguro de si fue su caso, pero descubrí -Ique no debe usarse junto con los datos adjuntos -a.

Estaba importando muchos archivos TIF a una base de datos, y de -Ihecho, creo el índice nuevamente y lo realizo analyseen la tabla para cada archivo, lo que lleva 10 veces más tiempo.

-Isolo debe usarse al crear la tabla, con -popción.

Raphael Jolivet
fuente