postgis/postsql 导入dem栅格数据到数据库

导入单个tif文件

环境

系统: windows 8

数据库:PostgreSQL:9.6
gis版本:PostGIS: 2.4

单个文件大小: 530M

使用的raster2pgsql命令导入数据到PostgreSQL数据库

命令如下 

(具体参数可自行查看命令的帮助文档)

文档:http://postgis.net/docs/using_raster_dataman.html

raster2pgsql -s 4326 -d -k -N -e -I -C -M "D:\dem\dem.tif" -F -t auto  test | psql -U postgres -d dataBase -h localhost -p 5432 -W

需要说明的是:
-t参数指定了数据的分块大小,auto  自动计算Tile进行划分存储。
-F参数在关系表中增加名为filename的列用于保存原始文件的名称,这在批量导入进行Tile的合并的时候有用。

结果

 

在数据库中 可以看到

 

     

遇到的问题与原因

编码转换的问题

大文件的raster2pgsql加载失败,N字节的字符串对于编码转换而言太长?

参考文档: http://postgis.net/docs/RT_FAQ.html#qa_raster_fails_encoding_conversion

                   https://trac.osgeo.org/postgis/ticket/2209

生成要加载的文件时,raster2pgsql不会与数据库建立任何连接。如果数据库设置的显式客户端编码与数据库编码不同,则在加载大型栅格文件(大小超过30 MB)时,您可能会遇到bytes is too long for encoding conversion

例如,如果的数据库使用UTF8,但是通常情况下会发生这种情况,但是要支持Windows应用,必须将客户端编码设置为WIN1252

要变通解决此问题,请确保客户端编码与加载期间的数据库编码相同。可以通过在加载脚本中显式设置编码来实现。例如,如果在Windows上:

set PGCLIENTENCODING = UTF8

如果您使用的是Unix / Linux

export PGCLIENTENCODING=UTF8 

导入时遇到内存溢出, ....内存 不足以ERROR 结束 失误回滚 

我开始就认为这是一个内存问题,但是在看到“编码”一词和栅格文件的大小之后, 在网上搜了一通后,发现与PostgreSQL有关。raster2pgsql对客户端编码的数据库设置一无所知,因为它永远不会(永远!)接触数据库

在PostgreSQL的源代码中允许进行编码转换的最大大小为〜250 MB。

相关文档: https://doxygen.postgresql.org/memutils_8h_source.html

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值