ST_MapAlgebraExpr — 래스터 밴드 1개 버전: 입력 래스터에 대해 유효한 PostgreSQL 대수 연산을 적용해서 형성되고, 설정한 픽셀 유형을 가진, 밴드 1개를 가진 새 래스터를 생성합니다. 따로 밴드를 설정하지 않을 경우, 밴드 1로 가정합니다.
raster ST_MapAlgebraExpr(
raster rast, integer band, text pixeltype, text expression, double precision nodataval=NULL)
;
raster ST_MapAlgebraExpr(
raster rast, text pixeltype, text expression, double precision nodataval=NULL)
;
ST_MapAlgebraExpr 2.1.0 버전부터 더 이상 이 함수를 지원하지 않습니다. 대신 ST_MapAlgebra (expression version) 함수를 이용하십시오. |
입력 래스터(rast
)에 대해 expression
이 정의하는 유효한 PostgreSQL 대수 연산을 적용해서 형성된, 밴드 1개를 가진 새 래스터를 생성합니다. nband
를 설정하지 않을 경우, 밴드 1로 가정합니다. 이 새 래스터는 원본 래스터와 동일한 지리참조, 너비 및 높이이지만, 밴드는 1개만 가질 것입니다.
pixeltype
을 설정할 경우, 새 래스터의 밴드가 해당 픽셀 유형이 될 것입니다. pixeltype
이 NULL일 경우, 새 래스터의 밴드는 입력 rast
의 밴드와 동일한 픽셀 유형이 될 것입니다.
표현식에서 원본 밴드의 픽셀 값을 참조하는 데 [rast]
, 1-기반 픽셀 열 인덱스를 참조하는 데 [rast.x]
, 1-기반 픽셀 행 인덱스를 참조하는 데 [rast.y]
용어를 사용할 수 있습니다.
2.0.0 버전부터 사용할 수 있습니다.
원본 래스터 2개를 입력받는 모듈로(modulo) 함수인 원본으로부터 밴드 1개를 가진 새 래스터를 생성합니다.
ALTER TABLE dummy_rast ADD COLUMN map_rast raster; UPDATE dummy_rast SET map_rast = ST_MapAlgebraExpr(rast,NULL,'mod([rast]::numeric,2)') WHERE rid = 2; SELECT ST_Value(rast,1,i,j) As origval, ST_Value(map_rast, 1, i, j) As mapval FROM dummy_rast CROSS JOIN generate_series(1, 3) AS i CROSS JOIN generate_series(1,3) AS j WHERE rid = 2; origval | mapval ---------+-------- 253 | 1 254 | 0 253 | 1 253 | 1 254 | 0 254 | 0 250 | 0 254 | 0 254 | 0
재분류를 거치고 NODATA 값을 0으로 설정한 원본으로부터 픽셀 유형이 2BUI인, 밴드 1개를 가진 새 래스터를 생성합니다.
ALTER TABLE dummy_rast ADD COLUMN map_rast2 raster; UPDATE dummy_rast SET map_rast2 = ST_MapAlgebraExpr(rast,'2BUI'::text,'CASE WHEN [rast] BETWEEN 100 and 250 THEN 1 WHEN [rast] = 252 THEN 2 WHEN [rast] BETWEEN 253 and 254 THEN 3 ELSE 0 END'::text, '0') WHERE rid = 2; SELECT DISTINCT ST_Value(rast,1,i,j) As origval, ST_Value(map_rast2, 1, i, j) As mapval FROM dummy_rast CROSS JOIN generate_series(1, 5) AS i CROSS JOIN generate_series(1,5) AS j WHERE rid = 2; origval | mapval ---------+-------- 249 | 1 250 | 1 251 | 252 | 2 253 | 3 254 | 3 SELECT ST_BandPixelType(map_rast2) As b1pixtyp FROM dummy_rast WHERE rid = 2; b1pixtyp ---------- 2BUI
|
|
밴드 3개를 가진 원본 래스터에서 맵 대수로 첫 번째 밴드를 조정하고 나머지 두 밴드는 그대로 둔 상태로, 동일한 픽셀 유형인 밴드 3개를 가진 새 래스터를 생성합니다.
SELECT ST_AddBand( ST_AddBand( ST_AddBand( ST_MakeEmptyRaster(rast_view), ST_MapAlgebraExpr(rast_view,1,NULL,'tan([rast])*[rast]') ), ST_Band(rast_view,2) ), ST_Band(rast_view, 3) ) As rast_view_ma FROM wind WHERE rid=167;