全球的土地利用数据有600G,占用内存太大,使用加载数据也慢。基于以上情况,改变路子,将tiff文件存到数据库中,以下是实践过程中的情况记录:
我参考到的文章有:
postgis/postsql 导入dem栅格数据到数据库_dem 导入pg-CSDN博客raster2pgsql命令参数详解_raster2psql参数-CSDN博客
如果顺利的话,直接按照文章一中的命令,结合文章二感兴趣参数,执行一下就可以。
我执行命令时,使用了参数要求最少的命令行:
raster2pgsql "tiff数据路径.tif" -t 256x256 表名| psql -U postgres -d 数据库名 -h localhost -p 5432
结果如下:
满屏的乱码,执行完之后,数据库中也没有产生对应的表,那一般出现乱码的常见原因是编码问题。可是tiff文件没有编码,经过查找资料推断原因大概为解译tiff二进制时出了问题,建议可以先生成一个sql文件,然后在执行sql文件,将数据插入。
1、生成一个中间文件.sql,语句如下:
raster2pgsql -t 256x256 "tiff数据路径.tif" 表名 > "sql文件路径.sql"
2、用文本编辑器,这里我用的Notepad++,将sql文件的编码改为utf8,保存。
3、运行sql语句,将数据导入数据库中,语句如下:
psql -U postgres -h localhost -d 数据库名 -p 5432 -f "sql文件路径sql"
这次总算可以了解数据导入的过程发生了什么,从截图可看,从第一步创建表开始,sql语句就执行失败了。根据错误信息,不存在raster类型的数据。各种查询资料之后,终于搞明白了原因:参考资料:PostGIS Raster助力气象应用 - 知乎 (zhihu.com)
只启用postgis是不够的,处理栅格数据,还要启用postgis_raster,之后重新运行sql文件,或者最开始使用的指令,都可以将tiff导入数据库。正确执行命令的样子如下:
数据库里也有了对应的表,存储数据如下:
4、遗留问题:
如最开始说的,raster2pgsql中还有很多有用的参数,比如记录数据源(文件名)的参数。但我使用-k这个参数的时候就会报错如下:
因为目前不用这个参数,数据也没啥问题,所以并没有研究为啥使用-k参数会出现这个错误,有知道的伙伴可以评论区告诉我。