PostGIS实现栅格数据可视化-单波段映射为多波段彩色栅格【ST_ColorMap】

一、函数概述

ST_ColorMap用于栅格数据可视化,通过将单波段栅格映射为多波段彩色栅格,实现数据的直观展示。该函数支持预定义颜色映射和自定义颜色方案,可广泛应用于遥感影像、地形数据和科学模拟结果的可视化处理。

二、核心参数与语法结构

sql 复制代码
-- 基础版本(指定波段和颜色映射)
raster ST_ColorMap(
  raster rast,                  -- 输入单波段栅格
  integer nband = 1,            -- 目标波段(默认1)
  text colormap = 'grayscale',  -- 颜色映射规则
  text method = 'INTERPOLATE'   -- 插值方法
);

-- 简化版本(自动选择波段)
raster ST_ColorMap(
  raster rast,
  text colormap,
  text method = 'INTERPOLATE'
);

三、参数详解与颜色映射规则

  1. 预定义颜色映射关键词
  • grayscale/greyscale:单波段灰度映射(0-255 灰度值)
  • pseudocolor:四波段 RGBA 映射(蓝 - 绿 - 红渐变)
  • fire:四波段 RGBA 映射(黑 - 红 - 黄渐变)
  • bluered:四波段 RGBA 映射(蓝 - 白 - 红渐变)
  1. 自定义颜色映射格式
plaintext 复制代码
<像素值> <R> <G> <B> [A]
示例:
0% 0 0 255 255       -- 最小值对应蓝色
50% 255 255 0 255     -- 中间值对应黄色
100% 255 0 0 255      -- 最大值对应红色
nv 0 0 0 0             -- NoData值对应黑色
  • 支持数值、百分比(0%-100%)和nv/nodat/null表示 NoData
  1. 插值方法
  • INTERPOLATE:线性插值(默认,平滑过渡)
  • EXACT:严格匹配(非指定值设为黑色)
  • NEAREST:最近邻匹配(选择最接近的映射值)

四、典型用法示例

示例 1:地形数据伪彩色渲染

sql 复制代码
-- 将DEM高程数据转换为伪彩色影像
WITH dem_data AS (
  SELECT rast FROM elevation_dem WHERE area = '喜马拉雅山脉'
)
SELECT 
  ST_AsPNG(rast) AS original_dem,
  ST_AsPNG(ST_ColorMap(rast, 1, 'pseudocolor')) AS pseudo_color_dem,
  ST_AsPNG(ST_ColorMap(rast, 1, 'fire')) AS fire_color_dem
FROM dem_data;
  • 输出解析:
    pseudocolor将低海拔显示为蓝色,中海拔绿色,高海拔红色;fire方案则以黑色表示低海拔,红色到黄色表示高海拔,更适合突出地形起伏。

示例 2:自定义温度数据颜色映射

sql 复制代码
-- 为温度栅格创建蓝-红渐变映射
SELECT ST_ColorMap(
  rast := temperature_rast,
  nband := 1,
  colormap := $$
    0%   0 0 255 255    -- 低温蓝色
    50%  255 255 0 255  -- 中温黄色
    100% 255 0 0 255    -- 高温红色
    nv   0 0 0 0        -- NoData黑色
  $$,
  method := 'INTERPOLATE'
) AS temp_color_rast
FROM climate_data
WHERE date = '2023-08-01';

示例 3:气象数据精确颜色映射

sql 复制代码
-- 降雨量数据的精确颜色分类
SELECT ST_ColorMap(
  rast := rainfall_rast,
  nband := 1,
  colormap := $$
    0-10   0 255 0 255    -- 小雨绿色
    10-50  255 255 0 255  -- 中雨黄色
    50-100 255 165 0 255  -- 大雨橙色
    100+   255 0 0 255    -- 暴雨红色
    nv     0 0 0 0        -- NoData黑色
  $$,
  method := 'EXACT'
) AS rainfall_class_rast
FROM weather_data
WHERE storm_id = '20230720';
  • 方法选择: 使用EXACT方法严格匹配降雨量区间,确保分类边界清晰。

五、应用场景

  1. 遥感影像可视化
  • 植被指数(NDVI)的伪彩色显示
  • 多光谱影像的单波段增强显示
  1. 地形与地貌分析
  • DEM 数据的高程分层设色
  • 坡度、坡向栅格的可视化
  1. 科学数据展示
  • 温度、降水等气象数据的时空分布
  • 污染物浓度、海平面上升等环境数据可视化
  1. 城市规划
  • 人口密度、交通流量等栅格数据的可视化
  • 土地利用分类结果的直观展示

六、注意事项

  1. NoData 值处理
  • 生成的彩色栅格默认未设置 NoData 值,需手动设置:
sql 复制代码
SELECT ST_SetBandNoDataValue(
  ST_ColorMap(rast, 'bluered'), 
  1, 0  -- 假设第一波段NoData设为0
);
  1. 颜色映射性能
  • 大数据量栅格建议先分块处理:
sql 复制代码
WITH tiles AS (
  SELECT (ST_Tile(rast, 1024, 1024)).* FROM large_raster
)
SELECT ST_Mosaic(ST_ColorMap(rast, 'pseudocolor')) FROM tiles;
  1. 颜色方案选择
  • 连续数据(如温度)适合INTERPOLATE方法
  • 分类数据(如土地利用)适合EXACT或NEAREST方法
  1. 透明度控制
  • 自定义颜色映射时可添加 Alpha 通道(第四值)控制透明度:
sql 复制代码
100% 255 0 0 128  -- 半透明红色

通过ST_ColorMap函数,可将抽象的栅格数值转换为直观的彩色图像,极大提升地理数据的可视化效果。合理选择颜色映射方案和插值方法,结合自定义配置和性能优化策略,能有效满足从简单数据展示到复杂科学可视化的各种需求,是 PostGIS 栅格数据可视化的核心工具。

相关推荐
gerrywhu17 天前
PostGIS实现栅格数据坐标系转换【ST_Transform】
postgis·坐标转换·栅格分析·栅格数据坐标转换·栅格坐标转换·st_transform
丷丩1 个月前
第 2 篇:入门实操|3dtubetilecreater 环境搭建全教程(零踩坑版)
3d·gis·postgis·管线·自动建模·管网
GIS兵墩墩1 个月前
postgis--PostgreSQL16及其plpython3u扩展
python·postgis
GISBox2 个月前
PostGIS数据通过GISBox发布WFS/WMS全攻略
数据库·postgresql·wms·gis·postgis·矢量·gisbox
我是小超人-雨石花3 个月前
postgresql + postgis安装
数据库·postgresql·postgis·空间数据库
gis分享者4 个月前
使用postgresql、postgis数据库作为存储仓库,发布geoserver矢量切片服务(pbf切片)、矢量切片图层组服务
postgresql·geoserver·postgis·矢量切片·服务·pbf·图层组
❀͜͡傀儡师4 个月前
基于提供的镜像构建PostGIS、pgvector 的 PostgreSQL 18镜像的Dockerfile
数据库·postgresql·postgis
梦想画家4 个月前
PostGIS实战指南:从环境搭建到LBS周边查询(含常用函数)
postgresql·postgis·lbs
quweiie5 个月前
宝塔安装postgis3.6插件的详细步骤
postgresql·postgis·宝塔