Name

ST_AsRaster — 将 PostGIS 几何图形转换为 PostGIS 栅格。

Synopsis

raster ST_AsRaster(geometry geom, raster ref, text pixeltype, double precision value=1, double precision nodataval=0, boolean touched=false);

raster ST_AsRaster(geometry geom, raster ref, text[] pixeltype=ARRAY['8BUI'], double precision[] value=ARRAY[1], double precision[] nodataval=ARRAY[0], boolean touched=false);

raster ST_AsRaster(geometry geom, double precision scalex, double precision scaley, double precision gridx, double precision gridy, text pixeltype, double precision value=1, double precision nodataval=0, double precision skewx=0, double precision skewy=0, boolean touched=false);

raster ST_AsRaster(geometry geom, double precision scalex, double precision scaley, double precision gridx=NULL, double precision gridy=NULL, text[] pixeltype=ARRAY['8BUI'], double precision[] value=ARRAY[1], double precision[] nodataval=ARRAY[0], double precision skewx=0, double precision skewy=0, boolean touched=false);

raster ST_AsRaster(geometry geom, double precision scalex, double precision scaley, text pixeltype, double precision value=1, double precision nodataval=0, double precision upperleftx=NULL, double precision upperlefty=NULL, double precision skewx=0, double precision skewy=0, boolean touched=false);

raster ST_AsRaster(geometry geom, double precision scalex, double precision scaley, text[] pixeltype, double precision[] value=ARRAY[1], double precision[] nodataval=ARRAY[0], double precision upperleftx=NULL, double precision upperlefty=NULL, double precision skewx=0, double precision skewy=0, boolean touched=false);

raster ST_AsRaster(geometry geom, integer width, integer height, double precision gridx, double precision gridy, text pixeltype, double precision value=1, double precision nodataval=0, double precision skewx=0, double precision skewy=0, boolean touched=false);

raster ST_AsRaster(geometry geom, integer width, integer height, double precision gridx=NULL, double precision gridy=NULL, text[] pixeltype=ARRAY['8BUI'], double precision[] value=ARRAY[1], double precision[] nodataval=ARRAY[0], double precision skewx=0, double precision skewy=0, boolean touched=false);

raster ST_AsRaster(geometry geom, integer width, integer height, text pixeltype, double precision value=1, double precision nodataval=0, double precision upperleftx=NULL, double precision upperlefty=NULL, double precision skewx=0, double precision skewy=0, boolean touched=false);

raster ST_AsRaster(geometry geom, integer width, integer height, text[] pixeltype, double precision[] value=ARRAY[1], double precision[] nodataval=ARRAY[0], double precision upperleftx=NULL, double precision upperlefty=NULL, double precision skewx=0, double precision skewy=0, boolean touched=false);

描述

将一个 PostGIS 几何对象转换为 PostGIS 栅格。这些不同的变体提供了三组可能性,用于设置生成的栅格的对齐方式和像素大小。

第一组由前两个变体组成,生成具有与所提供的参考栅格相同的对齐方式(scalexscaleygridxgridy)、像素类型和节点数据值的栅格。 通常,您可以通过将包含几何图形的表与包含参考栅格的表连接来传递此参考栅格。

第二组,由四个变体组成,允许您通过提供像素大小的参数(scalex & scaley 以及 skewx & skewy)来设置栅格的尺寸。生成的栅格的宽度 & 高度将根据几何对象的范围进行调整。在大多数情况下,您必须将整数的 scalex & scaley 参数强制转换为双精度,以便 PostgreSQL 选择正确的变体。

第三组,由四个变体组成,允许您通过提供栅格的尺寸(宽度 & 高度)来固定栅格的尺寸。生成的栅格的像素大小参数(scalex & scaley 以及 skewx & skewy)将被调整以适应几何对象的范围。

这两个最后两组中的前两个变体允许您使用对齐网格的任意角(gridx & gridy)指定对齐方式,而最后两个变体则使用左上角(upperleftx & upperlefty)指定对齐方式。

每组变体都允许生成单波段栅格或多波段栅格。 要生成多波段栅格,必须提供像素类型数组 (pixeltype[])、初始值数组 (value) 和 nodata 值数组 (nodataval)。 如果未提供,pixeltyped 默认为 8BUI,值为 1,nodataval 为 0。

输出栅格将与源几何具有相同的空间参考。 唯一的例外是具有参考栅格的变体。 在这种情况下,生成的栅格将获得与参考栅格相同的 SRID。

可选的参数 touched 默认值为 false,并映射到 GDAL 中的 ALL_TOUCHED 栅格化选项,该选项确定由线或多边形接触的像素是否会被设置值。不仅仅是那些在线渲染路径上的像素,或者它们的中心点位于多边形内的像素。

当与 ST_AsPNG和其他 ST_AsGDALRaster 系列函数结合使用时,这对于直接从数据库渲染几何图形的 jpeg 和 png 特别有用。

可用性:2.0.0 - 需要 GDAL >= 1.6.0。

[Note]

目前还无法渲染复杂的几何类型,例如曲线、TINS 和多面体曲面,但一旦 GDAL 可以了,也应该可以了。

示例:将几何图形输出为 PNG 文件

黑色圆圈

-- this will output a black circle taking up 150 x 150 pixels --
SELECT ST_AsPNG(ST_AsRaster(ST_Buffer(ST_Point(1,5),10),150, 150));

仅使用 PostGIS 渲染的缓冲区的示例

-- the bands map to RGB bands - the value (118,154,118) - teal  --
SELECT ST_AsPNG(
    ST_AsRaster(
        ST_Buffer(
            ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'), 10,'join=bevel'),
            200,200,ARRAY['8BUI', '8BUI', '8BUI'], ARRAY[118,154,118], ARRAY[0,0,0]));