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. CF1693F题解

    备注 发表时间:2023-06-17 21:51 前言 yny 学长来 cdqz 讲课,写一篇讲课的题的题解纪念一下. 题意 给你一个 01 序列,有以下操作: 选择一段区间 设 \(cnt_0,cn ...

  2. 使用 DeepSeek R1 和 Ollama 开发 RAG 系统

    1.概述 掌握如何借助 DeepSeek R1 与 Ollama 搭建检索增强生成(RAG)系统.本文将通过代码示例,为你提供详尽的分步指南.设置说明,分享打造智能 AI 应用的最佳实践. 2.内容 ...

  3. 使用 Trae 辅助开发一个网页文本高亮插件

    项目概述 本插件是一个用于在网页上高亮显示选中文本的工具,支持多种颜色选择.高亮复制和删除等功能.插件基于 Edge 扩展测试开发. 目前只大致开发了内容交互脚本和插件弹出页,后台管理页暂未开发. 项 ...

  4. 【Python】函数传参的方式

    学习笔记//20230402 edit 1.传参类型 值传递 引用传递 就像C++的参数传递: 值传递时值把实参的值传递给function, function 内对形参的修改不会影响实参; 引用传递时 ...

  5. 全面的C#/.NET/.NET Core面试宝典(永久免费)

    前言 C#/.NET/.NET Core相关技术常见面试题汇总,不仅仅为了面试而学习,更多的是查漏补缺.扩充知识面和大家共同学习.携手进步. 该知识库主要由自己平时学习和工作实践总结.网上优秀文章资料 ...

  6. 关于DC1的渗透报告:

    打开DC1,发现我们需要登录DC1,但是我们不知道密码,所以我们只能扫描分析一下他的IP地址,在kali中我们用nmap来扫描发现 DC1的IP地址也许是192.168.42.130,我们看看他开了什 ...

  7. 使用react-native-drawer,跟着官网配置仍报错,Error: [Reanimated] `valueUnpacker` is not a worklet, js engine: hermes

    在使用react-native-drawer组件时,编译项目报错 试了许多的方法,最后通过在一篇博客中找到解决方法https://blog.csdn.net/lxyoucan/article/deta ...

  8. 变异凯撒-python脚本调整ascii码转字符串

    题目: 加密密文:afZ_r9VYfScOeO_UL^RWUc 格式:flag{ } 结合题目变异凯撒,第一个字符a到f加了5,第二个字符f到l加了6,推断每个字符都在前一个字符基础上+1. 编写py ...

  9. BUUCTF---这是Base??

    题目 dict:{0: 'J', 1: 'K', 2: 'L', 3: 'M', 4: 'N', 5: 'O', 6: 'x', 7: 'y', 8: 'U', 9: 'V', 10: 'z', 11 ...

  10. 在 PHP 中,原生并没有提供内置的定时器机制,定时触发的守护进程,其中一个常见的方式是使用循环和时间戳来检查触发时间。自定义事件触发

    <?php class TimerDaemon { private $logfile; private $fp; private $triggerInterval; // 触发间隔,以秒为单位 ...