用Ganos低代码实现免切片遥感影像浏览

简介: 本文介绍了一种基于PolarDB兼容PostgreSQL 14的高效栅格数据管理和可视化方案。推荐配置包括4核CPU、16GB内存、50GB磁盘等。通过创建扩展并上传影像至OSS,利用SQL语句完成数据导入、镶嵌、匀色及金字塔构建。重点介绍了使用ST_AsTile函数动态生成标准瓦片的方法,支持多种格式和增强方式。前端通过Python实现服务接口,实现实时、高效的数据展示。此方案具有实时性强、存储成本低等优点,适合快速可视化大量栅格数据。

建议配置
为了得到良好的体验,建议使用以下配置:
项目
推荐配置
PolarDB 版本
标准版 兼容PostgreSQL 14
CPU

4 Core
内存
16 GB
磁盘
50GB(AUTOPL)
版本
1.1.39
Ganos版本
= 6.3
最佳实践
创建ganos raster扩展
CREATE EXTENSION ganos_raster CASCADE;
数据准备与入库
这里我们准备4景landsat8影像,共RGB+NIR四个波段,并上传到OSS。
首先创建栅格数据表:
CREATE TABLE landsat8
(
id integer,
rast raster
)
然后,通过ST_ImportFrom函数进行入库,如下:
INSERT INTO landsat8 VALUES (1, ST_ImportFrom('chunk_table','OSS://:@oss-cn-beijing-internal.aliyuncs.com/dmybucket/data/LC08_L1TP_128034_20160928_20170320_01_T1.TIF'));
INSERT INTO landsat8 VALUES (2, ST_ImportFrom('chunk_table','OSS://:@oss-cn-beijing-internal.aliyuncs.com/dmybucket/data/LC08_L1TP_128035_20181004_20181010_01_T1.TIF'));
INSERT INTO landsat8 VALUES (3, ST_ImportFrom('chunk_table','OSS://:@oss-cn-beijing-internal.aliyuncs.com/dmybucket/data/LC08_L1TP_129034_20190726_20190801_01_T1.TIF'));
INSERT INTO landsat8 VALUES (4, ST_ImportFrom('chunk_table','OSS://:@oss-cn-beijing-internal.aliyuncs.com/dmybucket/data/LC08_L1TP_129035_20181027_20181115_01_T1.TIF'));
注意:数据库实例需要和OSS在同一个Region中,并通过使用内部地址方式进行访问。 和 需要替换为实际信息(不带尖括号)
然后可以查看入库后的4景raster影像:
SELECT ST_Name(rast), ST_Width(rast),ST_Height(rast),ST_SRID(rast),ST_NumBands(rast) FROM landsat8;
输出结果如下:
数据镶嵌/匀色
我门先使用raster提供的ST_MosaicFrom函数将多景遥感影像镶嵌为一个raster对象,id为101。这里通过设置"color_balance"属性为true以支持匀色功能(按需)。然后通过ST_BuildPyramid对镶嵌后的新的raster对象创建金字塔信息以提高显示效率。具体SQL语句如下。
--镶嵌/匀色
INSERT INTO landsat8 values(101, ST_MosaicFrom(Array(
SELECT rast FROM landsat8 WHERE id < 5),
'rbt_mosaic','',
'{"srid":4326, "cell_size":[0.0002,0.0002], "nodata": true, "nodatavalue":0, "color_balance":true}'));
--创建金字塔
UPDATE landsat8 SET rast=st_buildpyramid(rast) WHERE id=101;
匀色后的raster对象导出为GTiff格式后显示如下:
生成瓦片
使用ST_AsTile函数可以对指定范围内的raster对象进行裁剪,重投影,并按照256x256尺寸输出为标准瓦片。在具体使用过程中,空间范围可以按照Google地图的切片方式,通过zoom的层级和行列号来换算出具体的空间范围,然后通过下面sql就可以获取PNG格式的256x256的瓦片,从而可直接从地图上展示。
4.1 RGB DOM影像
对于三波段的DOM影像,不需要额外像素值拉伸处理,可以直接导出为PNG格式的Tile进行显示。每个瓦片的空间范围可以通过ST_TileEnvelope获得。具体SQL如下。
SELECT ST_AsTile(
rast,
ST_TileEnvelope(tile_zoom, tile_column, tile_row),
'{"strength":"none", "format":"PNG", alpha":true}'
)
FROM landsat8 WHERE id=101;
参数解释:
• format: 导出瓦片格式,目前支持PNG、JPEG和Tiff三种格式。默认为PNG,为经过拉伸后可以直接显示的RGB瓦片。如果用户希望自己对原始像素信息进行处理,可以选择GTiff,这样用户拿到最原始的像素值。
• bands:指定RGB对应的波段,如果不指定,默认选择前三个波段。
• strength:显示增强的方式,包括:
• none:不进行增强
• stats:使用统计值进行拉伸(默认)
• ratio: 按照百分比拉伸
4.2 多波段
对于像Landsat这种多波段遥感影像,一般需要选择3个波段,并进行像素值进行拉伸,变成0-255范围内的RGB波段,才能正常显示。具体SQL语句需要修改strength和bands参数,如下:
SELECT ST_AsTile(
rast,
ST_TileEnvelope(tile_zoom, tile_column, tile_row),,
'{"strength":"ratio", "format":"PNG", "bands":"0,1,2", "alpha":true}'
)
FROM landsat8 WHERE id=101;
这里我们选择0,1,2三个波段作为RGB波段,并采用ratio方式按照百分比拉伸。
前端设计
可以使用任何开发语言进行服务接口的开发,以python环境为例,首先安装需要的包:
pip install asyncpg
pip install quart
创建app.py文件,内容如下:
from quart import Quart, send_file, render_template
import asyncpg
import io
import re

数据库连接参数

CONNECTION = {"host": "数据库连接地址", "port": 端口,
"user": "用户名", "password": "密码", "database": "数据库名称"}

目标表名

TABLE_NAME = "landsat8"

目标字段

RASTER_COLUMN = "rast"

目标ID

RASTER_ID = "101"
app = Quart(name, template_folder='./')
@app.before_serving
async def create_db_pool():
app.db_pool = await asyncpg.create_pool(*CONNECTION)
@app.after_serving
async def close_db_pool():
await app.db_pool.close()
@app.route("/")
async def home():
sql = f'''
SELECT ST_Extent(
ST_Transform(
ST_Envelope({RASTER_COLUMN}), 4326))
FROM {TABLE_NAME}
WHERE ID = {RASTER_ID};
'''
async with app.db_pool.acquire() as connection:
box = await connection.fetchval(sql)
box = re.findall('BOX((.
?) (.?),(.?) (.*?))', box)[0]
min_x, min_y, max_x, max_y = list(map(float, box))
bounds = [[min_x, min_y], [max_x, max_y]]
center = [(min_x + max_x) / 2, (min_y + max_y) / 2]
return await render_template('./index.jinja2', center=str(center), bounds=str(bounds))
@app.route("/raster///")
async def raster(z, x, y):

# 指定波段及拉伸方式
config = '{"strength":"ratio","bands":"0,1,2","alpha":true}'
sql = f'''
SELECT (
  ST_AsTile({RASTER_COLUMN},
    ST_Transform(
      ST_Tileenvelope($1,$2,$3),
    ST_Srid({RASTER_COLUMN})), \'{config}\')
  ).data tile
FROM {TABLE_NAME}
WHERE ID = {RASTER_ID};'''
async with app.db_pool.acquire() as connection:
    tile = await connection.fetchval(sql, z, x, y)
    return await send_file(io.BytesIO(tile), mimetype='image/png')

if name == "main":
//代码效果参考:https://www.intpipe.com/sitemap/post.html
//代码效果参考:https://www.intpipe.comhttps://www.intpipe.com
//代码效果参考:https://www.nbhbjx.cn/sitemap/post.html
//代码效果参考:https://www.vipwb.com/sitemap/post.html

# 指定端口为5500,可自行修改为合适的端口
app.run(port=5500)

最后启动服务:
python app.py
在浏览器中查看图层效果:
技术优势
相比传统的栅格切片,使用ST_AsTile的主要优势包括:
• 支持实时动态生成规则的瓦片,避免传统切瓦片操作存在的数据冗余问题,节省存储成本
• 自动实现栅格裁剪、重投影、重采样操作,更加方便简洁
• 单个瓦片生成效率达到百毫秒内,满足实时性要求
• 数据更新后,无需重新切片,可实时展示更新内容
目前ST_AsTile功能仅支持对单个raster对象的操作,如果涉及到多个raster对象(如多景影像需要同时查看)则需要对raster对象进行镶嵌操作。后续版本会增加对raster对象集合的支持,这样用户不需要进行镶嵌操作即可实时获取整个raster数据集产生的瓦片。
总结
本文介绍了Ganos全新发布的栅格数据快显能力,帮助用户可以快速可视化存储在PolarDB数据库中的各类栅格数据。相较于传统发布预制栅格瓦片服务的方式,全新的动态栅格瓦片可以更好的保持数据现势性,同时与Ganos强大的栅格分析能力结合,保证分析结果实时可见。Ganos作为全球首个专业级空间数据库,已经将狭义的空间数据拓展至“空天地、室内外、地上下、动静态”等全空间范畴,从数据库系统最底层为物理世界数字化提供时空处理框架,未来Ganos还将提供更多高效的库内空间分析与可视化能力,推动各行业的空间信息应用真正走向“视算一体”。
试用体验
可以访问PolarDB免费试用页面,选择试用“云原生数据库PolarDB PostgreSQL版”,体验栅格数据快显能力。

相关实践学习
对象存储OSS快速上手——如何使用ossbrowser
本实验是对象存储OSS入门级实验。通过本实验,用户可学会如何用对象OSS的插件,进行简单的数据存、查、删等操作。
相关文章
|
存储 关系型数据库 数据库
Ganos全空间数据多态分层存储能力解析与最佳实践
本文介绍了Ganos与云原生关系型数据库PolarDB-PG联合打造的全空间数据多态分层存储能力与最佳实践。多态分层存储将OSS对象存储直接作为PolarDB-PG数据库的一种存储介质,可以与块存储联合使用,它支持用户将整库、单表、子分区表甚至是表内的一个LOB字段存储在OSS上,达到存储降本的目的,同时保持了增删改查的全部透明,并通过多级缓存保障了性能的最少衰减。多态分层存储是一种兼顾成本、性能与易用性的全空间数据管理方案,可极大程度降低业务开发的复杂度与云资源使用成本。
快速生成软著申请时所需的60页代码文档的免费工具
本篇文章主要讲解,制作软著代码文档的高效方法,当然不可能手动一个个复制了,这显然太笨拙,他浪费时间了。这里我给大家介绍一个更快的方式。
13040 1
|
5月前
|
弹性计算 安全 Linux
零基础实战:阿里云ECS云服务器OpenClaw(Clawdbot)部署+本地系统搭建+大模型API对接指南
2026年,OpenClaw(原Clawdbot)作为轻量化开源AI代理框架,凭借跨平台兼容、大模型无缝集成、多场景自动化能力,成为个人与小型团队搭建智能助手的首选方案。本文完整覆盖2026年阿里云轻量服务器部署及本地MacOS/Linux/Windows11部署OpenClaw(Clawdbot)步骤流程及阿里云千问大模型API配置或市场上免费大模型Coding Plan API配置及常见问题解答,以阿里云ECS云服务器为核心部署方案,同步补充本地全平台搭建方法,所有代码命令可直接复制,全程无复杂操作,新手也能一次成功落地。
761 1
|
人工智能 自然语言处理 API
ModelScope是什么
【9月更文挑战第1天】ModelScope是什么
5045 2
|
存储 数据可视化 Cloud Native
用Ganos低代码实现免切片遥感影像浏览(二):动态栅格瓦片
本文介绍了Ganos全新发布了动态栅格瓦片能力,帮助用户将库内栅格数据或栅格分析结果快速可视化,无需依赖类似GeoServer等空间服务中间件,技术栈短平快,使用灵活高效。
|
人工智能 数据可视化 JavaScript
颠覆开发效率!国内首个微服务编排框架Juggle开源啦!
Juggle是国内首个开源的微服务编排框架,专注于解决企业微服务进程中接口重复开发、系统对接复杂等问题。它提供零代码、低代码和AI增强功能,通过可视化拖拽快速组装简单API为复杂接口,支持多协议、多语言脚本和流程多版本管理。相比国外框架如Conductor,Juggle更贴合国内需求,具备高效开发、企业级可靠性及信创适配等优势,助力企业实现敏捷创新与数字化转型。
1333 0
颠覆开发效率!国内首个微服务编排框架Juggle开源啦!
|
数据处理 索引 Python
Pandas中resample方法:轻松处理时间序列数据
Pandas中resample方法:轻松处理时间序列数据
690 1
|
存储 Python
GDAL一行代码将投影坐标系转为地理坐标系
【2月更文挑战第24天】本文介绍基于gdal模块,在命令行中通过GDAL命令的方式,将栅格遥感影像的投影坐标系转为地理坐标系的方法~
715 2
GDAL一行代码将投影坐标系转为地理坐标系
|
Java
Java SpringBoot 7z 压缩、解压
Java SpringBoot 7z 压缩、解压
579 1

热门文章

最新文章