用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的插件,进行简单的数据存、查、删等操作。
相关文章
|
4月前
|
人工智能 Java 机器人
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
Spring AI Alibaba集成Ollama,基于Java构建本地大模型应用,支持流式对话、knife4j接口可视化,实现高隐私、免API密钥的离线AI服务。
3278 2
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
|
存储 数据可视化 Cloud Native
用Ganos低代码实现免切片遥感影像浏览(二):动态栅格瓦片
本文介绍了Ganos全新发布了动态栅格瓦片能力,帮助用户将库内栅格数据或栅格分析结果快速可视化,无需依赖类似GeoServer等空间服务中间件,技术栈短平快,使用灵活高效。
|
11月前
|
安全 搜索推荐 数据安全/隐私保护
产品经理-需求层次理论 - AxureMost
需求层次理论由马斯洛提出,将人类需求分为五个层次:生理、安全、社交、尊重和自我实现。该理论在产品设计中广泛应用,指导设计师创造满足用户深层次需求的产品。通过确保基本功能、强化安全、促进社交、提供个性化选项及支持自我实现,产品不仅能提升功能性,还能增强用户的心理满足感和忠诚度。
697 18
|
SQL 缓存 关系型数据库
postgresql的安装和使用
postgresql的安装和使用
738 0
|
Java Maven Spring
如何在idea中创建Springboot项目? 手把手带你创建Springboot项目,稳!
文章详细介绍了在IDEA中创建Spring Boot项目的过程,包括选择Spring Initializr、配置项目属性、选择Spring Boot版本、导入依赖、等待依赖下载以及项目结构简介。
16507 1
|
存储 关系型数据库 分布式数据库
基于PolarDB Ganos的气象数据处理:恶劣气象预警
本文介绍了在航海恶劣天气预警的场景中,PolarDB Ganos利用栅格模型对基于NetCDF的气象预测数据入库,利用数据库函数计算恶劣天气范围,并将其存储在PolarDB中。通过Ganos实时电子围栏功能,对船只位置并与恶劣天气范围对比,实现航海恶劣气象预警功能。
|
存储 SQL 数据可视化
三维引擎系列(三):BIM数据管理与可视化功能
Ganos三维引擎的BIM数据管理分析解决方案,旨在充分发挥BIM模型价值,满足数字孪生技术发展的高精度需求。该方案通过结构化拆解BIM数据,实现统一管理和联合查询;支持精细化计算BIM模型指标,并与规划红线对比;同时提供高效渲染能力。Ganos内置多种功能,如ST_ImportIFC导入IFC格式数据,ST_As3DTiles生成3D Tiles瓦片数据结构,无需依赖第三方软件即可完成BIM数据的存储、计算与可视化展示。此外,通过简单的后端服务即可实现与渲染引擎的无缝对接,显著提升三维空间计算效率。
330 0
深入理解Debug断点调试技巧
深入理解Debug断点调试技巧
1384 1
|
存储 关系型数据库 MySQL
PolarDB产品使用问题之如何进行私有化部署PolarDB-X
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
前端开发 关系型数据库 定位技术
用Ganos低代码实现免切片遥感影像浏览(一)
本文介绍了使用PolarDB-PG数据库配合Ganos时空数据库引擎,不借助第三方工具仅利用SQL语句快速管理与展示遥感影像数据的一种方法。Ganos共提供两种影像免切浏览的方法,一种使用窗口范围获取影像数据展示,另一种通过固定瓦片范围获取影像数据展示,本文详细介绍第一种方法并提供了前后端实操代码帮助用户可以快速理解Ganos Raster的使用细节。