我的问题是与PostgreSQL,PostGIS,QGIS和GDAL一起使用的几种软件工具的使用和性能有关。
我是ArcGIS,Python和R的长期用户,他对使免费开源GIS生态系统和Linux多样化感兴趣。最近,我对将QGIS(版本2.8)与PostgreSQL(版本9.4)和PostGIS(版本2.1)一起使用非常感兴趣,并且我已在装有Windows 8.1 x64的计算机上安装了该软件(简要的计算机规格:ThinkPad配备2.1GHz核心2、8GB RAM和240GB SSD的X200)。学习了如何管理空间数据(价值约100GB)后,我想在此计算机上运行Ubuntu。
目前,我只是试图可靠地存储和检索shapefile和栅格。到目前为止,我已经成功地将shapefile加载到PostGIS中,但是栅格被证明存在更多问题。我已经成功完成了小的geoTIFF和GRID文件的单次和批量导入,但是较大的栅格(例如,磁盘上大小为870MB的15619x14655单元IMG或TIFF文件)需要永久加载到PostGIS中。我已经阅读并配置了raster2pgsql工具,以使用以下参数构建空间索引并通过图块加载栅格:
raster2pgsql -s 3161 -C -I D:\PostGIS_data\dem.img -t auto raster.dem | psql -h localhost -U postgres -p 5432 -d postgres
导入性能仍然很差,并且硬件不是问题。QGIS中PostGIS栅格的可视化甚至更糟,充其量只能缓慢加载小栅格或完全冻结。像我提到的那样的大型栅格无法在QGIS中可视化。从文档和论坛讨论中,该缺陷似乎是由于GDAL的PostGIS栅格驱动程序而不是QGIS本身引起的。论坛讨论中简要提到了这个问题,甚至有人建议不应将栅格存储在PostGIS中(空间数据库中不能平滑处理栅格的意义是什么?)。但是,我通常使用ESRI的文件地理数据库来快速,轻松地存储,可视化和分析相当大的栅格(〜70GB),而ArcGIS 10.1绝不会因这种常规操作而冻结或变慢。
这里有我想念的东西吗?我还没有解决瓶颈?PostgreSQL是否需要进行调整以实现PostGIS的性能优势?我是否缺少寻找和编译所需的GDAL版本?如何改善Shapefile和栅格的QGIS中的PostGIS性能和可视化?如何通过Linux终端享受全面,快速的空间数据管理的荣耀?在这个问题上的任何帮助都将受到欢迎!
我按照Duncan Golicher的指南进行操作:https://duncanjg.wordpress.com/2012/11/20/the-basics-of-postgis-raster/
我最初使用的是具有自动设置的图块,但我将图块重置为每行100x100个像元,然后按照指南中的说明添加了金字塔,如下所示:
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
我能够在适当的时间成功导入870MB IMG栅格并将其显示在QGIS中,而不会减慢或崩溃应用程序。渲染时间没有我期望的那么快,但是可以接受。我将进一步阅读-l参数以正确使用它。
顺便提及,在将dem.img文件作为dem100表导入时,创建了另一个栅格表,称为“ o_4_dem100”。当我将其导入为QGIS中的图层时,它的值范围在201到524之间,而dem100图层的值范围在36到524之间。我是否正确地假设这个额外的表是金字塔表,该表的范围更窄聚合到较低分辨率会导致值范围变大?
我不认为硬件不足是问题所在。这是到目前为止我发现的简短摘要。
GDAL的PostGIS栅格驱动程序存在过往的性能问题(另请参见此处)。尽管在2012年注意到了这些问题,但我想知道QGIS 2.8中发现的GDAL 1.11.2是否仍然存在此问题。当然还有其他人使用QGIS和PostGIS进行栅格可视化和存储吗?
关于一个可能的相关注释,在QGIS中打开具有约470万条记录的表的PostGIS属性表时,我也遇到了性能问题。在该线程中提出了一些建议并且没有解决问题之后,我最终向QGIS提交了一个错误报告,该报告最终被关闭并链接到以下类似的错误报告。尽管错误报告已关闭,但似乎尚未修复...
总结到目前为止的工作:
- 我已经针对空间数据优化了PostgreSQL服务器。
- 我为几何表建立了空间索引并执行了VACUUM。
- 打开大型属性表(约470万条记录)的QGIS行为似乎尝试读取所有记录,而不是返回子集以进行即时查看。这导致性能不佳。
呈现大型PostGIS几何表的性能似乎不是问题。
使用raster2pgsql,可对栅格进行索引,平铺和导入为PostGIS中带有金字塔的栅格表。
- 任意大小的栅格导入PostGIS的速度仍然非常慢,更不用说在QGIS中打开和平移了。
还值得注意的是,当导入大型栅格或使用PostGIS打开大型属性表时,raster2pgsql和qgis-bin的内存消耗超过1GB。正如@Michael和@Paul在回答我的第一个问题时提到的那样,似乎PostGIS并不意味着给存储栅格带来很多好处。但是,在那一点上,我质疑为什么要为我的GIS需求而全部运行QGIS + PostGIS,尤其是当ESRI fileGDB启用栅格属性,镶嵌数据集以及地理数据库所促进的其他栅格操作时。因此,也许我确实缺少某些东西,或者QGIS和PostGIS无法满足我的GIS需求。我发现后者难以置信。