PostGreSQL(十一)PostGIS-其他函数
ST_MakeEmptyRaster用于创建一个空的没有像元值的栅格(没有波段),各个参数用于定义这个空栅格的元数据:
-
width、height —— 栅格的列数和行数
-
upperleftx、upperlefty —— 对应空间坐标系中栅格左上角的坐标
-
scalex、scaley —— 单个像元的宽度和长度(单位等同于空间参考坐标系的单位)。
-
skewx、skewy —— 旋转角度,如果栅格数据北方朝上,该值为0。默认值为0。
-
srid —— 空间参考坐标系,默认被设置为0。
-
pixelsize —— 单个像元的宽度和长度。当scalex和scaley相等时,就可以直接使用这个参数设置像元大小。
上面的第一个函数签名传入现有的栅格数据作为新创建栅格的模板,会返回具有相同元数据(没有波段、没有像元值)的栅格数据。
在创建了一个空栅格之后,要向其添加波段,并可能要对其进行编辑。可以使用以下函数:
-
ST_AddBand —— 用于定义波段。
-
ST_SetValue —— 用于设置像元值
矢量切片坐标转换函数
ST_AsMVTGeom
将一个图层中位于参数box2d范围内的一个几何图形的所有坐标转换为MapBox VectorTile坐标空间里的坐标。
该函数会尽量保持、甚至纠正,来确保几何图形的有效性(有效性可以查看这篇文章:https://zhuanlan.zhihu.com/p/117267292),并可能在此过程中将几何图形降维(比如三维几何图形被处理成二维几何图形)。
函数各个参数的含义:
-
geom —— 被转换的几何图形信息。
-
bounds —— 某个矢量切片的范围对应的空间参考坐标系中的几何矩形框(没有缓冲区)。
-
extent —— 是按规范定义的矢量切片坐标空间中的某个矢量切片的范围。如果为NULL,则默认为4096(边长为4096个单位的正方形)。
-
buffer —— 矢量坐标空间中缓冲区的距离,位于该缓冲区的几何图形部位根据clip_geom参数被裁剪或保留。如果为NULL,则默认为256。
-
clip_geom —— 用于选择位于缓冲区的几何图形部位是被裁剪还是原样保留。如果为NULL,则默认为true。
生成矢量切片的函数
ST_AsMVT聚合函数用于将基于MapBox VectorTile坐标空间的几何图形转换为MapBox VectorTile二进制矢量切片。
PostGIS生成MVT矢量切片的步骤是:
-
使用ST_AsMVTGeom函数将几何图形的所有坐标转换为MapBox VectorTile坐标空间里的坐标,这样就将基于空间坐标系的几何图形转换成了基于MVT坐标空间的几何图形。
-
使用ST_AsMVT函数将基于MVT坐标空间的几何图形转换为MVT二进制矢量切片。
MVT格式可以存储具有不同属性集的要素。要使用此功能,请在行数据中包含一个JSONB列,该列通过在一级深度下包含多个Json对象来存储多个不同属性集。JSONB中的键和值将被编码为要素属性。
可以通过"||"操作符调用多次这个函数来同时创建多个图层的同一位置的矢量切片。
注意:不要将GEOMETRYCOLLECTION类型的几何图形作为参数进行切片,但是可以使用ST_AsMVTGeom函数来准备GEOMETRYCOLLECTION类型的几何图形。
函数各个参数的含义:
-
row —— 至少具有一个geometry列的行数据。
-
name —— 图层名字,默认为"default"。
-
extent —— 由MVT规范定义的屏幕空间(MVT坐标空间)中的矢量切片范围。
-
geom_name —— row参数的行数据中geometry列的列名,默认是第一个geometry类型的列。
-
feature_id_name —— 行数据中要素ID列的列名。如果未指定或为NULL,则第一个有效数据类型(smallint, integer, bigint)的列将作为要素ID列,其他的列作为要素属性列。
-