PostGIS栅格数据类型解析【raster】
PostGIS 栅格数据类型解析:结构、转换与应用
一、栅格数据类型概述
在 PostGIS 中,raster 是用于存储和处理栅格数据的核心类型,支持从多种格式(如 JPEG、GeoTIFF、PNG、DEM)导入的数据。每个栅格由一个或多个波段(Band)组成,每个波段包含规则排列的像素值矩阵,且栅格可通过空间参考信息(SRID、原点坐标、像素尺寸)实现地理配准。
二、栅格数据结构核心要素
波段(Band):
- 栅格的基本组成单元,每个波段存储特定类型的数据(如 RGB 图像包含红、绿、蓝三个波段)。
- 支持多种像素类型(如 8 位无符号整数、32 位浮点等),可通过ST_BandPixelType查询。
空间参考:
- SRID:定义坐标系(如 4326 代表 WGS84)。
- 原点坐标(ULX/ULY):栅格左上角像素的地理坐标。
- 像素尺寸(ScaleX/ScaleY):每个像素代表的地理单位(如 1 米、0.001 度)。
元数据:
- 存储于系统表 raster_columns 和 raster_overviews 中,包含栅格范围、波段数、NoData 值等信息。
三、栅格与几何类型的转换
1. 自动转换
-- 栅格自动转换为geometry(不推荐使用)
SELECT rast::geometry AS geom
FROM raster_table;
-- 等价于,推荐使用ST_ConvexHull
SELECT ST_ConvexHull(rast) AS geom
FROM raster_table;
注意: 此自动转换可能在未来版本中移除,建议显式调用ST_ConvexHull或其他几何提取函数。
2. 显式转换函数
| 函数 | 作用 | 示例 |
|---|---|---|
| ST_ConvexHull(rast) | 获取栅格外包络凸多边形 | SELECT ST_ConvexHull(rast) FROM ... |
| ST_Envelope(rast) | 获取栅格外包矩形 | SELECT ST_Envelope(rast) FROM ... |
| ST_AsRaster(geom) | 将几何转换为栅格(栅格化) | SELECT ST_AsRaster(geom, 10, 10) ... |
| ST_Polygon(rast) | 将栅格转换为等值面多边形 | SELECT ST_Polygon(rast, 1, 100) ... |
为了区分几个函数的区别,可以从下图直观感受到:

四、栅格与几何交互操作
1. 空间查询
-- 查询与多边形相交的栅格
SELECT rast
FROM raster_table
WHERE ST_Intersects(rast, ST_GeomFromText('POLYGON(...)'));
-- 裁剪栅格至指定区域
SELECT ST_Clip(rast, ST_GeomFromText('POLYGON(...)')) AS clipped_rast
FROM raster_table;
2. 栅格化几何对象
-- 将多边形转换为100x100像素的栅格,值为1
SELECT ST_AsRaster(
ST_GeomFromText('POLYGON(...)'),
100, 100, -- 宽度和高度
ARRAY['8BUI'], -- 像素类型
ARRAY[1], -- 像素值
ARRAY[0] -- NoData值
) AS rasterized_polygon;
五、最佳实践与注意事项
避免依赖自动转换:
- 现有代码中若使用rast::geometry,应替换为显式函数调用(如ST_ConvexHull(rast))。
栅格与几何性能差异(后续系列文章会讲到):
- 栅格操作(如ST_MapAlgebra)适合并行计算,但存储空间需求大。
- 几何操作(如ST_Buffer)适合精确分析,但处理大规模数据时性能较低。
数据格式选择:
- 连续表面数据(如 DEM、卫星影像)优先使用栅格存储。
- 离散对象(如建筑物、道路)优先使用几何存储。
GDAL 依赖:
- 需确保 PostGIS 编译时启用 GDAL 支持(通过 SELECT postgis_full_version() 检查)。
六、总结
raster 是作为PostGIS存储和处理栅格数据的核心类型,使得PostgreSQL可以存储处理栅格数据,也是GIS从业更偏向使用PostgreSQL的一大原因,可以方便实现从遥感影像到矢量分析的全流程空间数据处理,本系列文章也将深入分析PostGIS函数解析。
原创不易,求关注支持,欢迎转发。
PostGIS栅格数据类型解析【raster】的更多相关文章
- 《ServerSuperIO Designer IDE使用教程》-3.Modbus协议,读取多个寄存器,实现多种数据类型解析。发布:v4.2.2版本
更新内容,v4.2.2版本:1.增加Modbus协议读取多个寄存器,并且按多种数据类型解析数据.2.Modbus Serial和Modbus TCP两个驱动合并成一个驱动.3.修改数据库结构,保存配置 ...
- java的五种数据类型解析
不知道大家对java的简单数据类型是否了解,下面针对Java的五种类型简单数据类型表示数字和字符,进行详细的讲解和分析. 一.简单数据类型初始化 在Java语言中,简单数据类型作为类的成员变量声明时自 ...
- 《Play for Java》学习笔记(七)数据类型解析——Body parser
一.什么是body parser? body parser(不知道具体如何翻译,~~~~(>_<)~~~~ )指一个HTTP请求 (如POST和PUT操作)所包含的文本内容(body),这 ...
- SQLServer之数据类型解析
数字 int.bigint.smallint 和 tinyint 使用整数数据的精确数字数据类型. 数据类型 范围 存储 tinyint 0 到 255. 1 字节 smallint -2^15 (- ...
- Python学习:4.运算符以及数据类型解析
运算符 一.算数运算: 二.比较运算: 三.赋值运算 四.逻辑运算 五.成员运算 基本数据类型 一.Number(数字) Python3中支持int.float.bool.complex. 使用内置的 ...
- Arcgis:什么是栅格数据类型
栅格数据单元大小 栅格所表示的内容的详细程度(要素现象)通常取决于栅格的单元(像素)大小或空间分辨率. 单元必须足够小,这样才可以捕获到所需的详细信息: 而单元又必须足够大,这样才可以提高计算机存储和 ...
- Python数据类型解析(基础篇)
Python语言的类型 数字类型 字符串类型 元组类型 列表类型 文件类型 字典类型 1.数字类型 Python有三种数字类型:整数,浮点数,复数 Python中的整 ...
- Redis-五种数据类型解析
redis 五种数据结构详解(string,list,set,zset,hash) Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存 ...
- PostgreSQL+PostGIS
PostGIS简介 PostGIS是对象关系型数据库系统PostgreSQL的一个扩展,PostGIS提供如下空间信息服务功能:空间对象.空间索引.空间操作函数和空间操作符.同时,PostGIS遵循O ...
- World Wind Java开发之七——读取本地栅格文件(影像+高程)构建三维场景(转)
http://blog.csdn.net/giser_whu/article/details/41679515 首先,看下本篇博客要达到的效果图: 下面逐步分析如何加载影像及高程文件. 1.World ...
随机推荐
- 【渗透测试】Vulnhub GROTESQUE 1.0.1
渗透环境 攻击机: IP: 192.168.10.18(Kali) 靶机: IP:192.168.10.9 靶机下载地址:https://www.vulnhub.com/entry/gro ...
- DSP 28335 TTL SCI串口通讯 出错无法进入接收
项目上通过普通SCI串口在两个DSP28335之间进行通讯,一主一从,主机向从机发送指令,触发从机SCI接收中断,在中断中执行数据包判断和存储,数据处理和回复在主循环进行,未使用FIFO,轮询方式进行 ...
- Vulkan环境配置 | vscode+msvc 解决方案
Vulkan环境配置 | vscode+msvc 解决方案 前言 如果作为Windows 11侠的你是一个vscode爱好者,凑巧电脑上还安装有Visual Studio,这个时候你突然想配置一个Vu ...
- 传统Item-Based协同过滤推荐算法改进
前言 今天要读的论文为一篇于2009年10月15日发表在<计算机研究与发展>的一篇会议论文,论文针对只根据相似性无法找到准确可靠的最近邻这个问题,提出了结合项目近部等级与相似性求取最近邻的 ...
- 介绍一下opentcs
OpenTCS是一个开源的自动运载系统(Automated Guided Vehicle,AGV)控制系统.它旨在管理和控制自动化运输车辆,例如AGV或自动搬运车(AMR),在工业和商业环境中执行各种 ...
- 【MATLAB习题】工程测试时域、频域分析
代码: classdef App_uoye < matlab.apps.AppBase % Properties that correspond to app components proper ...
- gitee如何删除仓库
进入仓库的管理页面点击删除
- Golang 入门 : 文件名、关键字与标识符
Go 的源文件以 .go 为后缀名存储在计算机中,这些文件名均由小写字母组成,如 scanner.go .如果文件名由多个部分组成,则使用下划线 _ 对它们进行分隔,如 scanner_test.go ...
- 【SpringCloud】SpringCloud Alibaba Seata处理分布式事务
SpringCloud Alibaba Seata处理分布式事务 分布式事务问题 分布式前 单机库存没这个问题 O(∩_∩)O 从1:1->1:N->N:N 分布式之后 单体应用被拆分成微 ...
- 流式计算(五)-Flink核心概念
一手资料,完全来自官网,直接参考英文过来的,并加了一些自己的理解,希望能让看官君了解点什么,足矣. 环境:Flink1.9.1 难度:新手--战士--老兵--大师 目标: 理解Flink的计算模型 认 ...