Name

ST_MapAlgebra (expression version) — 표현식 버전 - 입력 래스터 1개 또는 2개, 밴드 인덱스, 그리고 사용자 지정 SQL 표현식 1개 이상을 입력받아 밴드 1개를 가진 래스터를 반환합니다.

Synopsis

raster ST_MapAlgebra(raster rast, integer nband, text pixeltype, text expression, double precision nodataval=NULL);

raster ST_MapAlgebra(raster rast, text pixeltype, text expression, double precision nodataval=NULL);

raster ST_MapAlgebra(raster rast1, integer nband1, raster rast2, integer nband2, text expression, text pixeltype=NULL, text extenttype=INTERSECTION, text nodata1expr=NULL, text nodata2expr=NULL, double precision nodatanodataval=NULL);

raster ST_MapAlgebra(raster rast1, raster rast2, text expression, text pixeltype=NULL, text extenttype=INTERSECTION, text nodata1expr=NULL, text nodata2expr=NULL, double precision nodatanodataval=NULL);

설명

표현식 버전 - 입력 래스터 1개 또는 2개, 밴드 인덱스, 그리고 사용자 지정 SQL 표현식 1개 이상을 입력받아 밴드 1개를 가진 래스터를 반환합니다.

2.1.0 버전부터 사용할 수 있습니다.

설명: 변종 1, 2 (래스터 1개)

입력 래스터(rast)에 대해 expression 이 정의하는 유효한 PostgreSQL 대수 연산을 적용해서 형성된, 밴드 1개를 가진 새 래스터를 생성합니다. nband 를 설정하지 않을 경우, 밴드 1로 가정합니다. 이 새 래스터는 원본 래스터와 동일한 지리참조, 너비 및 높이이지만, 밴드는 1개만 가질 것입니다.

pixeltype 을 설정할 경우, 새 래스터의 밴드가 해당 픽셀 유형이 될 것입니다. pixeltype 이 NULL일 경우, 새 래스터의 밴드는 입력 rast 의 밴드와 동일한 픽셀 유형이 될 것입니다.

  • expression 에 키워드를 쓸 수 있습니다.

    1. [rast] - 관심 픽셀의 픽셀 값

    2. [rast.val] - 관심 픽셀의 픽셀 값

    3. [rast.x] - 관심 픽셀의 1-기반 픽셀 열

    4. [rast.y] - 관심 픽셀의 1-기반 픽셀 행

설명: 변종 3, 4 (래스터 2개)

입력 래스터 밴드 rast1, (rast2)에 대한 expression 이 정의하는 밴드 2개에 대해, 유효한 PostgreSQL 대수 연산을 적용해서 형성된, 밴드 1개를 가진 새 래스터를 생성합니다. band1, band2 를 설정하지 않을 경우, 밴드 1로 가정합니다. 출력 래스터는 첫 번째 래스터가 정의하는 그리드 상에 (축척, 기울기 및 픽셀 모서리가) 정렬될 것입니다. extenttype 파라미터가 출력 래스터의 범위를 정의할 것입니다.

표현식(expression)

래스터 2개가 관련된 PostgreSQL 대수 표현식 및 픽셀들이 교차할 경우 픽셀 값을 정의할 PostgreSQL 정의 함수/연산자입니다. 예: (([rast1] + [rast2])/2.0)::integer

pixeltype

출력 래스터의 픽셀 유형입니다. 이 유형은 ST_BandPixelType 목록에 존재하는 유형 가운데 하나이거나, 생략되거나, NULL로 설정돼야만 합니다. 따로 설정하지 않거나 NULL로 설정하지 않으면, 첫 번째 래스터의 픽셀 유형을 기본값으로 삼을 것입니다.

extenttype

출력 래스터의 범위 제어

  1. INTERSECTION - 새 래스터의 범위는 두 래스터의 교차 부분입니다. 기본값입니다.

  2. UNION - 새 래스터의 범위는 두 래스터를 통합한 범위입니다.

  3. FIRST - 새 래스터의 범위는 첫 번째 래스터의 범위와 동일합니다.

  4. SECOND - 새 래스터의 범위는 두 번째 래스터의 범위와 동일합니다.

nodata1expr

rast1 의 픽셀들이 NODATA 값이고 공간적으로 상응하는 rast2 의 픽셀들이 값을 가지고 있을 때 어떤 것을 반환할지 정의하는 상수만, 또는 rast2 와만 관련된 대수 표현식입니다.

nodata2expr

rast2 의 픽셀들이 NODATA 값이고 공간적으로 상응하는 rast1 의 픽셀들이 값을 가지고 있을 때 어떤 것을 반환할지 정의하는 상수만, 또는 rast1 과만 관련된 대수 표현식입니다.

nodatanodataval

공간적으로 상응하는 rast1rast2 의 픽셀들이 모두 NODATA 값일 경우 반환하는 숫자 상수입니다.

  • expression, nodata1exprnodata2expr 에 키워드를 쓸 수 있습니다.

    1. [rast1] - rast1 에 있는 관심 픽셀의 픽셀 값

    2. [rast1.val] - rast1 에 있는 관심 픽셀의 픽셀 값

    3. [rast1.x] - rast1 에 있는 관심 픽셀의 1-기반 픽셀 열

    4. [rast1.y] - rast1 에 있는 관심 픽셀의 1-기반 픽셀 행

    5. [rast2] - rast2 에 있는 관심 픽셀의 픽셀 값

    6. [rast2.val] - rast2 에 있는 관심 픽셀의 픽셀 값

    7. [rast2.x] - rast2 에 있는 관심 픽셀의 1-기반 픽셀 열

    8. [rast2.y] - rast2 에 있는 관심 픽셀의 1-기반 픽셀 행

예시: 변종 1 및 2

WITH foo AS (
    SELECT ST_AddBand(ST_MakeEmptyRaster(10, 10, 0, 0, 1, 1, 0, 0, 0), '32BF'::text, 1, -1) AS rast
)
SELECT
    ST_MapAlgebra(rast, 1, NULL, 'ceil([rast]*[rast.x]/[rast.y]+[rast.val])')
FROM foo;
                    

예시: 변종 3 및 4

WITH foo AS (
    SELECT 1 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0), 2, '8BUI', 10, 0), 3, '32BUI'::text, 100, 0) AS rast UNION ALL
    SELECT 2 AS rid, ST_AddBand(ST_AddBand(ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 1, 1, -1, 0, 0, 0), 1, '16BUI', 2, 0), 2, '8BUI', 20, 0), 3, '32BUI'::text, 300, 0) AS rast
)
SELECT
    ST_MapAlgebra(
        t1.rast, 2,
        t2.rast, 1,
        '([rast2] + [rast1.val]) / 2'
    ) AS rast
FROM foo t1
CROSS JOIN foo t2
WHERE t1.rid = 1
    AND t2.rid = 2;
                    

참고

rastbandarg, ST_Union, ST_MapAlgebra (callback function version)