当前位置: 首页 > ds >正文

PostGIS实现二进制转栅格数据应用实践【ST_RastFromWKB】

ST_RastFromWKB 解析与应用实践

  • 一、函数概述
  • 二、核心参数与返回值
  • 三、WKB 格式与还原原理
  • 四、典型用法示例
  • 五、性能与兼容性
  • 六、应用场景
  • 七、注意事项
  • 八、扩展应用:WKB 栅格与其他格式互转
  • 九、总结

一、函数概述

ST_RastFromWKB是 PostGIS 中用于将二进制表示(WKB,Well-Known Binary)转换为栅格对象(raster)的工具函数。作为ST_AsBinary/ST_AsWKB的逆函数,它支持从二进制数据中恢复完整的栅格元数据(如范围、分辨率、波段数)和像素值,是栅格数据跨平台传输、存储和序列化的关键工具

二、核心参数与返回值

raster ST_RastFromWKB(bytea wkb);

参数说明:

  • wkb:符合 PostGIS 栅格 WKB 格式的二进制数据(通过ST_AsWKB或ST_AsBinary生成)。
  • 返回值:
    还原后的raster对象,包含完整的栅格元数据和像素值。

三、WKB 格式与还原原理

1. 栅格 WKB 格式规范:

PostGIS 栅格 WKB 遵循RFC2 规范,结构如下:

  • 字节序标记:大端(0x00)或小端(0x01)。
    版本号:当前为 1。
  • 元数据块:包含栅格尺寸、分辨率、仿射变换参数、SRID 等。
  • 波段块:每个波段的像素数据(按波段顺序存储)。

2. 还原流程:

  • 解析二进制头文件,获取栅格基本元数据(宽度、高度、波段数等)。
  • 读取仿射变换参数,重建栅格空间参考。
  • 按波段解析像素数据,恢复每个波段的数值。

四、典型用法示例

示例 1:从二进制还原栅格并验证元数据

-- 定义WKB二进制数据(示例数据,实际应通过[ST_AsWKB](https://blog.csdn.net/laowe4535fdvdsa4t6qe/article/details/148197940?spm=1001.2014.3001.5501)生成)
WITH wkb_data AS (SELECT '\001\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\010@\000\000\000\000\000\000\340?\000\000\000\000\000\000\340?\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\012\000\024\000'::bytea AS wkb
),
-- 还原栅格并获取元数据
restored_rast AS (SELECT ST_RastFromWKB(wkb) AS rast FROM wkb_data
)
SELECT (ST_Metadata(rast)).* AS metadata,ST_NumBands(rast) AS band_count,ST_Value(rast, 1, 1, 1) AS sample_value
FROM restored_rast;-- 输出结果:
Name        |Value|
------------+-----+
upperleftx  |0.5  |
upperlefty  |0.5  |
width       |10   |
height      |20   |
scalex      |2.0  |
scaley      |3.0  |
skewx       |0.0  |
skewy       |0.0  |
srid        |10   |
numbands    |0    |
band_count  |0    |
sample_value|     |
  • 输出解析:

元数据显示还原栅格的左上角坐标为 (0.5, 0.5),宽度 10,高度 20,分辨率为 2×3,无倾斜,SRID=10,无波段(numbands=0可能为示例数据特性)。

示例 2:基于Python Web开发的网络传输场景下的栅格还原,开发中较为常见

运行
# Python示例:通过HTTP接收栅格WKB并还原
import psycopg2
from flask import request, jsonify@app.route('/restore-raster', methods=['POST'])
def restore_raster():wkb_data = request.data  # 接收二进制数据conn = psycopg2.connect("dbname=gis")cur = conn.cursor()cur.execute("SELECT ST_AsText(ST_Envelope(ST_RastFromWKB(%s)))", (psycopg2.Binary(wkb_data),))envelope = cur.fetchone()[0]return jsonify({"envelope": envelope})
  • 应用场景:

客户端将栅格 WKB 通过 API 传输至服务器,服务器还原后返回栅格范围,用于快速预览或空间查询。

示例 3:批量还原与栅格镶嵌

  • 工作流程:
  1. 存储多个栅格的 WKB 二进制。
  2. 批量还原为栅格对象。
  3. 使用ST_Union进行镶嵌合并。

五、性能与兼容性

1. 大数据量处理:

  • 对于超过 1GB 的栅格 WKB,建议分块传输与还原,避免内存溢出:

六、应用场景

1. 栅格数据备份与恢复:

  • 将栅格转换为 WKB 二进制存储于文件或数据库,实现高效备份与跨库恢复。

2. 跨平台数据交换:

… …

全部文章内容请转【PostGIS专栏】,原创不易,求关注支持,更多开源GIS相关知识技能分享,免费提供学习问答交流。

在这里插入图片描述

http://www.xdnf.cn/news/9163.html

相关文章:

  • Web安全渗透之长城杯夺旗赛
  • 工作计划工作总结年终总结PPT模版分享
  • 高能效比服务器
  • pytorch问题汇总
  • 【Redis】3-Redis应用
  • vscode java debug terminal 中文乱码
  • n8n 读写本地文件
  • 原生js实现数据响应方法2.0
  • 【Qt】未添加scrollArea造成界面过大
  • 【Webtrees 用户手册】第 3 章 -会员指南
  • 解锁集成电路制造新建项目的防震黑科技-江苏泊苏系统集成有限公司
  • ArcGIS Pro 3.4 二次开发 - 几何
  • Python爬虫实战:研究Beautiful Soup框架相关技术
  • 《软件工程》第 10 章 - 软件实现
  • Chrome浏览器隐私与安全功能完全指南
  • MySQL : MySQL的安装【CentOS 7】
  • uniapp在app端老是铺满全屏
  • CAD精简多段线顶点、优化、删除多余、重复顶点——CAD c#二次开发
  • uniapp 条件筛选
  • 编程日志5.20
  • 信息论基础理论与应用全面指南
  • 每天掌握一个Linux命令 - sysbench
  • 【图像大模型】Stable Diffusion XL:下一代文本到图像生成模型的技术突破与实践指南
  • python fastapi统一捕获请求和响应
  • 七段码--dfs+set去重/状压
  • python训练营第35天
  • Axure动态面板学习笔记
  • React整合【ECharts】教程004:饼图的构建和基本设置
  • MySQL增删改查基础教程:熟练掌握DML语句操作【MySQL系列】
  • leetcode98.验证二叉搜索树:递归法中序遍历的递增性验证之道