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_columnsraster_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】的更多相关文章

  1. 《ServerSuperIO Designer IDE使用教程》-3.Modbus协议,读取多个寄存器,实现多种数据类型解析。发布:v4.2.2版本

    更新内容,v4.2.2版本:1.增加Modbus协议读取多个寄存器,并且按多种数据类型解析数据.2.Modbus Serial和Modbus TCP两个驱动合并成一个驱动.3.修改数据库结构,保存配置 ...

  2. java的五种数据类型解析

    不知道大家对java的简单数据类型是否了解,下面针对Java的五种类型简单数据类型表示数字和字符,进行详细的讲解和分析. 一.简单数据类型初始化 在Java语言中,简单数据类型作为类的成员变量声明时自 ...

  3. 《Play for Java》学习笔记(七)数据类型解析——Body parser

    一.什么是body parser? body parser(不知道具体如何翻译,~~~~(>_<)~~~~ )指一个HTTP请求 (如POST和PUT操作)所包含的文本内容(body),这 ...

  4. SQLServer之数据类型解析

    数字 int.bigint.smallint 和 tinyint 使用整数数据的精确数字数据类型. 数据类型 范围 存储 tinyint 0 到 255. 1 字节 smallint -2^15 (- ...

  5. Python学习:4.运算符以及数据类型解析

    运算符 一.算数运算: 二.比较运算: 三.赋值运算 四.逻辑运算 五.成员运算 基本数据类型 一.Number(数字) Python3中支持int.float.bool.complex. 使用内置的 ...

  6. Arcgis:什么是栅格数据类型

    栅格数据单元大小 栅格所表示的内容的详细程度(要素现象)通常取决于栅格的单元(像素)大小或空间分辨率. 单元必须足够小,这样才可以捕获到所需的详细信息: 而单元又必须足够大,这样才可以提高计算机存储和 ...

  7. Python数据类型解析(基础篇)

    Python语言的类型   数字类型   字符串类型   元组类型   列表类型   文件类型  字典类型     1.数字类型   Python有三种数字类型:整数,浮点数,复数 Python中的整 ...

  8. Redis-五种数据类型解析

    redis 五种数据结构详解(string,list,set,zset,hash) Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存 ...

  9. PostgreSQL+PostGIS

    PostGIS简介 PostGIS是对象关系型数据库系统PostgreSQL的一个扩展,PostGIS提供如下空间信息服务功能:空间对象.空间索引.空间操作函数和空间操作符.同时,PostGIS遵循O ...

  10. World Wind Java开发之七——读取本地栅格文件(影像+高程)构建三维场景(转)

    http://blog.csdn.net/giser_whu/article/details/41679515 首先,看下本篇博客要达到的效果图: 下面逐步分析如何加载影像及高程文件. 1.World ...

随机推荐

  1. 记录一段mysql代码

    SELECT f . * , tmp.userid, tmp.cishu FROM fx_user f, ( SELECT a.id, b.userid AS userid, COUNT( * ) A ...

  2. 【2022_12_2】Fibersim安装记录

    Fibersim 安装记录 1. 为什么要写这个文章? 因为我前前后后装了四天才装成功.在我的电脑上,fibersim14 16 17 15 挂到UG10 12 CatiaV5-6R2019 2018 ...

  3. 【记录】C-文件输入输出

    写在开头   摸鱼摸得昏天黑地,是该炸一炸鱼的本愿了~ 以前总觉得笔记没什么重要的,但有时事到临头,又十分渴求简明的提纲来唤起记忆/提供重学的门路.于是就有了以下的产物,也希望能抑制一下无效摸鱼的堕落 ...

  4. Ollama——大语言模型本地部署的极速利器

    1.概述 Ollama 是一款开源跨平台大模型工具,主要用于在本地便捷部署和运行大型语言模型(LLM),核心目标是降低用户使用大模型的门槛,同时保障数据隐私.核心功能与特点如下: (1)本地部署,隐私 ...

  5. idea 缺失右侧maven窗口

    最近整了一个别人的项目到本地,发现在git下载项目到本地后,再通过idea的打开项目后,缺失了右侧的maven窗口. 注: idea是有安装到maven(idea默认是已经安装好的) 打开的项目也是m ...

  6. go 结构体根据某个字段进行排序

    前言 在任何编程语言中,关乎到数据的排序都会有对应的策略,我们来看下 Golang 是怎样对数据进行排序,以及我们如何优化处理使用 go 排序 go 可以针对任何对象排序,虽然很多情况下是一个 sli ...

  7. PaddleOCR学习笔记3-通用识别服务

    今天优化了下之前的初步识别服务的python代码和html代码. 采用flask + paddleocr+ bootstrap快速搭建OCR识别服务. 代码结构如下: 模板页面代码文件如下: uplo ...

  8. oracle清除日志

    近日发现oracle占用的空间很大,经查,发现是 /u01/app/oracle/diag/rdbms/orcl/orcl/alert 警告日志 /u01/app/oracle/diag/rdbms/ ...

  9. VMware ESXi系统

    esxi全称"VMware ESXi",是可直接安装在物理服务器上的强大的裸机管理系统,是一款虚拟软件,不需安装其他操作系统,是VMware服务器虚拟化的基础.通过直接访问并控制底 ...

  10. .NET 中的 Swagger 文档排序设置

    Swagger的API默认排序往往达不到效果,甚至设置了Action排序也没有作用.这里直接给出代码,关键在于 IDocumentFilter 实现. 注意 DocumentFilter 注册要放在尾 ...