用指定的Geometry對象去裁剪Raster對象,並將裁剪結果作為一個新的Raster對象返回。
文法
raster ST_ClipToRast(raster raster_obj,
geometry geom,
integer pyramidLevel default 0,
cstring bands default '',
float8[] nodata default NULL,
cstring clipOption default '',
cstring storageOption default '')
參數
參數名稱 | 描述 |
raster_obj | 需要裁剪的Raster對象。 |
pyramidLevel | 金字塔層級。 |
geometry | 用於裁剪的Geometry對象。 |
bands | 需要裁剪的波段,用'0-2' 或者'1,2,3' 這種形式表示,以0開始。預設為'' ,表示裁剪所有的波段。 |
nodata | 用float8[]表示的nodata數值。如果數值個數少于波段數量,則使用波段設定的nodata值填充。如果波段未設定nodata,則用0填充。 |
clipOption | JSON字串表示的裁剪選項。 |
JSON字串表示的返回結果的儲存選項。 |
clipOption參數如下。
參數名稱 | 類型 | 預設值 | 描述 |
window_clip | bool | false | 是否使用Geometry的外包框進行裁剪。取值:
|
rast_coord | bool | false | 傳入的Geometry是否使用的是象元座標。如果是象元座標,橫座標x表示象元的列號,縱座標y表示象元的行號。 |
storageOption參數如下。
參數名稱 | 類型 | 預設值 | 描述 |
chunking | boolean | 和原始Raster一致 | 是否使用分Block Storage。 |
chunkdim | string | 和原始Raster一致 | 分塊的維度資訊。在chunking=true時才有效。 |
chunktable | string | '' | 分塊表名稱。如果傳入'' 值,則會產生一個隨機表名臨時塊表用於存放資料。 該暫存資料表只在當前會話中有效。如果需要保持一個可訪問的裁剪對象,則需要指定塊表名稱。 |
compression | string | lz4 | 壓縮演算法類型。取值:
|
quality | integer | 75 | 壓縮品質,只針對jpeg壓縮演算法。 |
interleaving | string | 和原始Raster一致 | 交錯方式。取值:
|
endian | string | 和原始Raster一致 | 位元組序。取值:
|
描述
- 如果chunkTable傳入為NULL或者
''
, 則會產生一個隨機表名的臨時塊表用於存放資料,該暫存資料表只在當前會話中有效。如果需要保持一個可訪問的裁剪對象,則需要指定塊表名稱。 - 預設的裁剪緩衝為100 MB,代表最多隻能裁剪出100 MB大小的結果資料,如果需要調整返回結果大小,可使用參數
ganos.raster.clip_max_buffer_size
設定緩衝的大小。
樣本
-- 永久表
CREATE TEMP TABLE rast_clip_result(id integer, rast raster);
-- 暫存資料表
CREATE TEMP TABLE rast_clip_result_temp(id integer, rast raster);
-- 預設裁剪並存放到暫存資料表中
INSERT INTO rast_clip_result_temp(id, rast)
select 1, ST_ClipToRast(rast, ST_geomfromtext('Polygon((0 0, 45 45, 90 45, 45 0, 0 0))', 4326), 0)
from clip_table
where id =1;
-- 使用白色作為背景色填充,並儲存到永久表中
INSERT INTO rast_clip_result(id, rast)
select 2, ST_ClipToRast(rast, ST_geomfromtext('Polygon((0 0, 45 45, 90 45, 45 0, 0 0))', 4326), 0, '', ARRAY[254,254,254], '', '{"chunktable":"clip_rbt"}')
from clip_table
where id =1;
-- 使用Geometry的視窗裁剪
INSERT INTO rast_clip_result_temp(id, rast)
SELECT 3, ST_ClipToRast(rast, ST_geomfromtext('Polygon((0 0, 45 45, 90 45, 45 0, 0 0))', 4326), 0, '', NULL, '{"window_clip":true}', '')
from clip_table
where id =1;