空间网格编码
空间网格编码模块,目前支持GeoSOT编码,参见知识库: Yukon支持GeoSOT编码的基本原理及特性 。 使用范例参见范例集:Yukon中GeoSOT 编码的基本能力 ; 基于GeoSOT编码的多图层穿越查询
--- 创建 yukon_geogridcoder 扩展
CREATE EXTENSION yukon_geogridcoder;
数据类型
GeoSOTGrid
可作为列的数据类型;
支持为 GeoSOTGrid 列创建B树索引;
支持为 GeoSOTGrid 数组创建 GIN 索引(Generalized Inverted Index)。
对象操作
ST_GetLevel
获取网格对象的编码层级
语法
int ST_GetLevel(grid geosotgrid);
参数
参数名称 |
描述 |
---|---|
grid |
网格对象 |
示例
SELECT ST_GetLevel(unnest(ST_GeoSOTGrid(st_geomfromtext('POINT(116.315 39.91027777777778)', 4490), 15)));
st_getlevel
-----------+
15
ST_HasZ
网格对象是否带Z方向编码
语法
bool ST_HasZ(grid geosotgrid);
参数
参数名称 |
描述 |
---|---|
grid |
网格对象 |
示例
SELECT ST_HasZ(unnest(ST_GeoSOTGrid(st_geomfromtext('POINT(116.315 39.91027777777778)', 4490), 15)));
st_hasz
-------+
false
网格编码计算
ST_GeoSOTGrid
获取geometry对象在指定层级所对应的网格编码
语法
geosotgrid[] ST_GeoSOTGrid (geom geometry, level int);
参数
参数名称 |
描述 |
---|---|
geom |
几何对象 |
level |
编码等级 |
示例
SELECT ST_GeoSOTGrid(st_geomfromtext('POINT(116.315 39.91027777777778)', 4490), 15);
st_geosotgrid |
--------------------------+
{074EACB000000000000F0000}|
文本转换
ST_AsText
将网格对象转换为标准规范的文本编码
语法
text ST_AsText(grid geosotgrid);
参数
参数名称 |
描述 |
---|---|
grid |
网格对象 |
示例
SELECT ST_AsText('074EACB000000000000F0000'::geosotgrid);
st_astext |
-----------------+
G001310322-230230|
ST_GeoSOTGridFromText
将网格对象字符串转为geosotgrid对象数据类型
语法
geosotgrid ST_GeoSOTGridFromText(geosotgrid2d cstring);
geosotgrid ST_GeoSOTGridFromText(geosotgrid2d cstring, geosotgrid_z cstring);
参数
参数名称 |
描述 |
---|---|
geosotgrid2d |
二维网格对象字符串 |
geosotgrid_z |
三维网格Z方向编码字符串 |
示例
SELECT ST_GeoSOTGridFromText('G001310322-230230');
st_geosotgridfromtext |
------------------------+
074EACB000000000000F0000|
--------------------------------------------------------
SELECT ST_GeoSOTGridFromText('G001310322-230230', '101');
st_geosotgridfromtext |
--------------------------------+
00B21A4984C0000000000104000F0001|
几何转换
ST_GeomFromGeoSOTGrid
返回网格对象的几何对象范围,二维的对象返回POLYGON,三维对象返回POLYHEDRALSURFACE Z
语法
geometry ST_GeomFromGeoSOTGrid(grid geosotgrid);
geometry[] ST_GeomFromGeoSOTGrid(gridarray geosotgrid[]);
参数
参数名称 |
描述 |
---|---|
grid |
网格对象 |
gridarray |
网格对象数组 |
示例
SELECT ST_GeomFromGeoSOTGrid('074EACB000000000000F0000'::geosotgrid);
st_geomfromgeosotgrid
----------------------------------------------------------------------------------------+
POLYGON ((116.3 39.9, 116.3 39.916666666666664, 116.31666666666666 39.916666666666664, 116.31666666666666 39.9, 116.3 39.9)) |
SELECT ST_GeomFromGeoSOTGrid('00B21A4984C0000000000104000F0001'::geosotgrid);
st_geomfromgeosotgrid
----------------------------------------------------------------------------------------+
SRID=4490;SRID=4490;POLYHEDRALSURFACE Z (((116.3 39.9 9203.23364591971, 116.3 39.916666666666664 9203.23364591971, 116.31666666666666 39.916666666666664 9203.23364591971, 116.31666666666666 39.9 9203.23364591971, 116.3 39.9 9203.23364591971)), ((116.3 39.9 11045.473321879283, 116.31666666666666 39.9 11045.473321879283, 116.31666666666666 39.916666666666664 11045.473321879283, 116.3 39.916666666666664 11045.473321879283, 116.3 39.9 11045.473321879283)), ((116.3 39.9 9203.23364591971, 116.3 39.9 11045.473321879283, 116.3 39.916666666666664 11045.473321879283, 116.3 39.916666666666664 9203.23364591971, 116.3 39.9 9203.23364591971)), ((116.31666666666666 39.9 9203.23364591971, 116.31666666666666 39.916666666666664 9203.23364591971, 116.31666666666666 39.916666666666664 11045.473321879283, 116.31666666666666 39.9 11045.473321879283, 116.31666666666666 39.9 9203.23364591971)), ((116.3 39.9 9203.23364591971, 116.31666666666666 39.9 9203.23364591971, 116.31666666666666 39.9 11045.473321879283, 116.3 39.9 11045.473321879283, 116.3 39.9 9203.23364591971)), ((116.3 39.916666666666664 9203.23364591971, 116.3 39.916666666666664 11045.473321879283, 116.31666666666666 39.916666666666664 11045.473321879283, 116.31666666666666 39.916666666666664 9203.23364591971, 116.3 39.916666666666664 9203.23364591971)))
SELECT unnest(ST_GeomFromGeoSOTGrid(ST_GeoSOTGrid(st_makeenvelope(116.31, 39.91, 116.32, 39.92, 4490), 15)));
unnest
----------------------------------------------------------------------------------------+
POLYGON ((116.3 39.9, 116.3 39.916666666666664, 116.31666666666666 39.916666666666664, 116.31666666666666 39.9, 116.3 39.9))
POLYGON ((116.31666666666666 39.9, 116.31666666666666 39.916666666666664, 116.33333333333333 39.916666666666664, 116.33333333333333 39.9, 116.31666666666666 39.9))
POLYGON ((116.3 39.916666666666664, 116.3 39.93333333333333, 116.31666666666666 39.93333333333333, 116.31666666666666 39.916666666666664, 116.3 39.916666666666664))
POLYGON ((116.31666666666666 39.916666666666664, 116.31666666666666 39.93333333333333, 116.33333333333333 39.93333333333333, 116.33333333333333 39.916666666666664, 116.31666666666666 39.916666666666664))
层级转换
ST_Aggregate
从精细层网格对象构造粗糙层
语法
geosotgrid ST_Aggregate(grid geosotgrid, level int);
geosotgrid[] ST_Aggregate(gridarray geosotgrid[], level int);
参数
参数名称 |
描述 |
---|---|
grid |
网格对象 |
gridarray |
网格对象数组 |
level |
层级 |
示例
SELECT ST_GeomFromGeoSOTGrid(ST_Aggregate(unnest(ST_GeoSOTGrid(st_geomfromtext('POINT(116.315 39.91027777777778)', 4490), 10)), 9));
st_geomfromgeosotgrid
--------------------------------------------------+
POLYGON ((116 39, 116 40, 117 40, 117 39, 116 39))
高度编码
ST_GeoSOTGridZ
返回高度方向所属的第N个网格
语法
int ST_GeoSOTGridZ(altitude float8, level int);
参数
参数名称 |
描述 |
---|---|
altitude |
海拔高度 |
level |
层级 |
示例
SELECT ST_GeoSOTGridZ(9300, 15);
st_geosotgridz
--------------+
5
ST_AltitudeFromGeoSOTGridZ
返回Z方向第N个格子在指定层级时的高度值
语法
float ST_AltitudeFromGeoSOTGridZ(z_num int4, level int);
参数
参数名称 |
描述 |
---|---|
z_num |
Z方向上第几个格子 |
level |
格子所在的层级 |
示例
SELECT ST_AltitudeFromGeoSOTGridZ(5, 15);
st_altitudefromgeosotgridz
--------------------------+
9203.23364591971