news 2026/10/20 10:23:03

【应用实践】PostGIS 影像文件导出五种方案详解,实操干货无盲区

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【应用实践】PostGIS 影像文件导出五种方案详解,实操干货无盲区

PostGIS 中的栅格数据以 raster 数据类型存储在表中,无法直接被GIS或者遥感影像处理软件读取,本文介绍五种常用的将 PostGIS 栅格表数据导出到文件方法,全是干货,在具体实践中可以根据需要应用。

方法一、服务器端 lo_export 导出

该方案是服务器端导出标准 GeoTIFF 的方式,导出栅格文件可直接被 QGIS/ArcGIS/ENVI 等软件打开,具体操作步骤如下:

  1. 首先,启用 GDAL 支持,若已开启可忽略:
setpostgis.gdal_enabled_drivers='ENABLE_ALL'setpostgis.enable_outdb_rasters=True
  1. 为了保障文件读写权限问题,可以创建好目录:
# 创建导出目录mkdir-p/opt/pg_export# 授予 postgres 用户目录所有权chownpostgres:postgres /opt/pg_export# 设置目录读写权限chmod755/opt/pg_export
  1. 最后,执行导出栅格数据:
-- 1. 将栅格转为TIFF二进制并生成大对象,返回OID存入变量SELECTlo_from_bytea(0,ST_AsTIFF(rast,'LZW'))ASlo_oidFROMwuhan_landcover_2024WHERErid=1-- 返回文件oid标识,每次执行返回值不同50485-- 2. 将大对象导出为纯净TIFF文件(目录需保证postgres用户可写)SELECTlo_export(50485,'/opt/pg_export/output_single.tif');-- 3. 清理临时大对象(释放资源,必做)SELECTlo_unlink(50485);

注意事项:

  1. gdal驱动配置要开启。
  2. 文件路径:确保输出文件路径存在且具有写权限。

方法二、psql + xxd 原生方式

该方案本质是直接提取 PostGIS 生成的标准 GeoTIFF 二进制流,全程不经过 PostgreSQL 的 COPY 格式封装,从根源避免了 PG 私有格式头导致的文件无法识别问题,该方法较为简单。

示例脚本如下:

psql-dgisdata-Upostgres-t-A-c"SELECT encode(ST_AsTIFF(ST_Union(rast), 'LZW'), 'hex') FROM wuhan_landcover_2024"|xxd-r-p>/opt/pg_export/wuhan_landcover_2024_full.tif

psql参数这里不做详解,xdd命令用于将文件或数据转换为十六进制格式显示,类似于十六进制查看器,关于xdd命令详解可以查询其他资料。

xxd-r-p-r:反向模式,将十六进制文本转换为二进制 -p:纯文本模式,输入为连续十六进制字符,无地址列、ASCII 列,完美匹配 psql-t-A的输出格式

注意事项:

  1. 需要先安装xdd命令,根据具体系统环境进行安装。
CentOS/RHEL 系统安装如下:sudoyuminstallvim-common

方法三、GDAL 工具 gdal_translate

gdal_translate 是 GDAL 工具集的核心栅格转换命令,也是从 PostGIS 导出标准 GeoTIFF 的生产级首选方案,在QGIS的工具中实际上也是用的此命令。相比 SQL 方式,它自动处理瓦片合并、内存优化更完善、输出原生标准 GeoTIFF(无格式头兼容问题),导出后可直接被 QGIS/ArcGIS 读取,尤其适合 GB 级大栅格场景。后续也会单独一个章节来介绍该工具,该方案较为灵活,也比较简单。

gdal_translate\PG:"dbname='gisdata' user='postgres' password='gisdata' table='wuhan_landcover_2024' mode=2"\/opt/pg_export/export.tif\-coCOMPRESS=LZW

导出如图所示:

注意事项:

  1. 此方法需要在安装 GDAL 的时候支持 Postgis Raster 驱动。

方法四、连接 QGIS 客户端导出

  1. QGIS 连接数据库:

在QGIS中连接PostGIS数据库,

  1. 导出文件:

连接数据库之后,可以看到数据库中的各个表,然后选择右键 -> Export Layer -> To File…
根据导出的需要填写配置信息:

注意事项:

  1. 该方法比较简单,只需要软件操作,不需要任何代码

方法五、编写Python代码导出

该方法核心原理是通过 SQL 函数 ST_Union 合并分块栅格 + ST_AsTIFF 将栅格转为 TIFF 二进制流,再用 Python 写入文件。关键核心代码示例如下:

importpsycopg2frompsycopg2importsql# -------------------------- 1. 配置参数(修改为你的实际信息)------------DB_CONFIG={"host":"localhost",# 数据库地址"port":5432,# 端口"dbname":"gisdata",# 数据库名"user":"postgres",# 用户名"password":"pwd",# 密码"raster_table":"raster_test",# 栅格数据表名"raster_column":"rast",# 栅格列名(PostGIS默认列名:rast)"output_tif":"output.tif"# 导出的TIFF文件路径}# -------------------------- 2. 核心导出函数 --------------------------defexport_postgis_raster_to_tiff():conn=Nonetry:# 1. 连接 PostGIS 数据库conn=psycopg2.connect(**DB_CONFIG)cur=conn.cursor()print("数据库连接成功")# 2. 核心SQL:合并分块栅格 + 转为TIFF二进制流# ST_Union:合并PostGIS分块存储的栅格# ST_AsTIFF:栅格转TIFF,参数'LZW'为无损压缩(可选:DEFLATE/无压缩)sql_query=sql.SQL(""" SELECT ST_AsTIFF(ST_Union({raster_col}), 'LZW') AS tiff_bytes FROM {table} -- 可选:添加筛选条件(如范围、属性过滤) -- WHERE geom && ST_MakeEnvelope(xmin, ymin, xmax, ymax, 4326) """).format(raster_col=sql.Identifier(DB_CONFIG["raster_column"]),table=sql.Identifier(DB_CONFIG["raster_table"]))# 3. 执行查询,获取TIFF二进制数据cur.execute(sql_query)tiff_binary=cur.fetchone()[0]# 获取二进制流# 4. 写入本地TIFF文件(二进制写入模式)withopen(DB_CONFIG["output_tif"],"wb")asf:f.write(tiff_binary)print(f"栅格导出成功!文件路径:{DB_CONFIG['output_tif']}")exceptExceptionase:print(f"导出失败:{str(e)}")finally:# 关闭数据库连接ifconn:cur.close()conn.close()print("数据库连接已关闭")# -------------------------- 3. 执行导出 --------------------------if__name__=="__main__":export_postgis_raster_to_tiff()

核心代码关键点解析:

  1. 数据库连接
    使用 psycopg2 连接 PostgreSQL/PostGIS,是 Python 操作 PostGIS 最标准的库。

  2. 核心 SQL 函数
    ST_Union({raster_col}):PostGIS 栅格一般采用分块存储,合并后才能得到完整栅格;
    ST_AsTIFF(栅格对象, 压缩参数):将栅格直接转为 TIFF 二进制数据,支持压缩优化:
    LZW:无损压缩(推荐,文件小、速度快)
    DEFLATE:高压缩比
    留空:无压缩

  3. 二进制数据处理
    查询返回的是 TIFF 文件的原始二进制流,直接用 wb(二进制写入)模式保存为 .tif 即可,无需额外解码。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 10:23:02

电机性能测试系统:集性能评估与耐久验证于一体

当新能源汽车、工业机器人、高端装备制造对电机性能的要求越来越苛刻,一套能精准刻画电机"真实状态"的测试系统,正在成为企业技术创新的核心底座。同星智能推出的电机性能测试系统,专为电机产品的质量优化与技术创新打造&#xff0…

作者头像 李华
网站建设 2026/10/20 10:23:03

大模型重塑呼叫中心:从“成本中心”到“智能交互引擎”的跨越

‍ ‍在数字化浪潮的推动下,呼叫中心早已不再是企业最外层简单的服务接听层,而是正在演变为集管理、服务、调度与增值于一体的综合信息服务系统。回顾行业发展,从早期的单一热线电话,到基于CTI技术的第三代呼叫中心&#xff0c…

作者头像 李华
网站建设 2026/10/20 10:22:51

SenseVoiceSmall区分说话人语音识别在通话录音转写中的优化

解决区分说话人不准问题 本文章来自我的博客,点击这里查看完整内容。 使用较短的录音,会出现无法准确区分说话人的情况,无论是使用cam还是使用eres2netv2。 解决方案是修改vad参数,因为SenseVoiceSmall模型和Paraformer模型不同…

作者头像 李华
网站建设 2026/10/20 10:23:03

模型蒸馏实战指南:从知识迁移到底层对齐的工业级落地方法

1. 项目概述:为什么模型蒸馏不是“压缩技巧”,而是AI落地的通关文凭你手头有个在GPU服务器上跑得飞快的大模型,准确率98.7%,但一放到手机App里——卡顿、发热、耗电如饮水机,用户3秒就卸载。或者你在做工业质检&#x…

作者头像 李华
网站建设 2026/10/20 10:23:02

2026年低成本创作指南,高性价比 AI 视频生成工具实测盘点

大家好,我是大金。进入2026年,短视频内容创作的竞争逻辑持续迭代,传统实拍、纯手动剪辑的模式,效率瓶颈愈发明显,很难适配当下高频内容更新的运营节奏,量产效率与长期创作性价比,成为创作者降本…

作者头像 李华
网站建设 2026/10/10 2:41:36

学术打假越来越像流量生意,MedPeer用技术做了一件不一样的事

今年,学术圈经历了一场"打假风暴"。 某个视频的千万播放量,让全网学会了用显微镜看论文图片。每一张Western Blot、每一个统计图、每一处表述,都可能被放在放大镜下接受审判。 情绪被点燃了,但学术生态变好了吗❓️ 当…

作者头像 李华