
一、函数概述
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'
);
三、参数详解与颜色映射规则
- 预定义颜色映射关键词
- grayscale/greyscale:单波段灰度映射(0-255 灰度值)
- pseudocolor:四波段 RGBA 映射(蓝 - 绿 - 红渐变)
- fire:四波段 RGBA 映射(黑 - 红 - 黄渐变)
- bluered:四波段 RGBA 映射(蓝 - 白 - 红渐变)
- 自定义颜色映射格式
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
- 插值方法
- 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方法严格匹配降雨量区间,确保分类边界清晰。
五、应用场景
- 遥感影像可视化
- 植被指数(NDVI)的伪彩色显示
- 多光谱影像的单波段增强显示
- 地形与地貌分析
- DEM 数据的高程分层设色
- 坡度、坡向栅格的可视化
- 科学数据展示
- 温度、降水等气象数据的时空分布
- 污染物浓度、海平面上升等环境数据可视化
- 城市规划
- 人口密度、交通流量等栅格数据的可视化
- 土地利用分类结果的直观展示
六、注意事项
- NoData 值处理
- 生成的彩色栅格默认未设置 NoData 值,需手动设置:
sql
SELECT ST_SetBandNoDataValue(
ST_ColorMap(rast, 'bluered'),
1, 0 -- 假设第一波段NoData设为0
);
- 颜色映射性能
- 大数据量栅格建议先分块处理:
sql
WITH tiles AS (
SELECT (ST_Tile(rast, 1024, 1024)).* FROM large_raster
)
SELECT ST_Mosaic(ST_ColorMap(rast, 'pseudocolor')) FROM tiles;
- 颜色方案选择
- 连续数据(如温度)适合INTERPOLATE方法
- 分类数据(如土地利用)适合EXACT或NEAREST方法
- 透明度控制
- 自定义颜色映射时可添加 Alpha 通道(第四值)控制透明度:
sql
100% 255 0 0 128 -- 半透明红色
通过ST_ColorMap函数,可将抽象的栅格数值转换为直观的彩色图像,极大提升地理数据的可视化效果。合理选择颜色映射方案和插值方法,结合自定义配置和性能优化策略,能有效满足从简单数据展示到复杂科学可视化的各种需求,是 PostGIS 栅格数据可视化的核心工具。