Name

ST_Clip — 입력 도형으로 잘라낸 래스터를 반환합니다. 밴드 번호를 지정하지 않은 경우, 모든 밴드를 처리합니다. crop 을 설정하지 않거나 참으로 설정한 경우, 잘라낸 래스터를 출력합니다.

Synopsis

raster ST_Clip(raster rast, integer[] nband, geometry geom, double precision[] nodataval=NULL, boolean crop=TRUE);

raster ST_Clip(raster rast, integer nband, geometry geom, double precision nodataval, boolean crop=TRUE);

raster ST_Clip(raster rast, integer nband, geometry geom, boolean crop);

raster ST_Clip(raster rast, geometry geom, double precision[] nodataval=NULL, boolean crop=TRUE);

raster ST_Clip(raster rast, geometry geom, double precision nodataval, boolean crop=TRUE);

raster ST_Clip(raster rast, geometry geom, boolean crop);

설명

입력 도형 geom 으로 잘라낸 래스터를 반환합니다. 밴드 인덱스를 지정하지 않을 경우, 모든 밴드를 처리합니다.

ST_Clip이 출력한 래스터는 각 밴드에 대해 잘라낸 면에 할당된 NODATA 값을 가지고 있어야 합니다. NODATA 값을 설정하지 않고 입력 래스터에 정의된 NODATA 값이 없을 경우, 출력 래스터의 NODATA 값을 ST_MinPossibleValue(ST_BandPixelType(rast, band))로 설정합니다. 배열 내부의 NODATA 값의 개수가 밴드 개수보다 작을 경우, 배열 안의 마지막 NODATA 값을 남은 밴드의 NODATA 값으로 씁니다. NODATA 값의 개수가 밴드 개수보다 클 경우, 남는 NODATA 값을 무시합니다. NODATA 값의 배열을 입력받는 모든 변종 함수는 각 밴드에 할당될 단일 값도 입력받습니다.

crop 을 설정하지 않을 경우, 참으로 가정합니다. geom 범위와 rast 범위가 교차하는 부분을 잘라낸 래스터를 출력한다는 의미입니다. crop 을 거짓으로 설정할 경우, 새 래스터의 범위는 rast 의 범위와 동일합니다.

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

개선 사항: 2.1.0 버전에서 C 언어로 다시 쓰였습니다.

이 예시는 MassGIS 사이트의 MassGIS Aerial Orthos 에서 다운로드할 수 있는 매사추세츠 항공사진 데이터를 이용합니다. 매사추세츠 주 미터 단위 평면의 좌표로 돼 있습니다.

예시: 밴드 1개 잘라내기

-- Clip the first band of an aerial tile by a 20 meter buffer.
SELECT ST_Clip(rast, 1,
        ST_Buffer(ST_Centroid(ST_Envelope(rast)),20)
    ) from aerials.boston
WHERE rid = 4;
                    
-- Demonstrate effect of crop on final dimensions of raster
-- Note how final extent is clipped to that of the geometry
-- if crop = true
SELECT ST_XMax(ST_Envelope(ST_Clip(rast, 1, clipper, true))) As xmax_w_trim,
    ST_XMax(clipper) As xmax_clipper,
    ST_XMax(ST_Envelope(ST_Clip(rast, 1, clipper, false))) As xmax_wo_trim,
    ST_XMax(ST_Envelope(rast)) As xmax_rast_orig
FROM (SELECT rast, ST_Buffer(ST_Centroid(ST_Envelope(rast)),6) As clipper
    FROM aerials.boston
WHERE rid = 6) As foo;

   xmax_w_trim    |   xmax_clipper   |   xmax_wo_trim   |  xmax_rast_orig
------------------+------------------+------------------+------------------
 230657.436173996 | 230657.436173996 | 230666.436173996 | 230666.436173996
                    

잘라내기 전의 전체 래스터 타일

잘라낸 후

예시: crop 없이 밴드 1개를 잘라낸 다음 다른 밴드들을 변경 없이 다시 추가하기

-- Same example as before, but we need to set crop to false to be able to use ST_AddBand
-- because ST_AddBand requires all bands be the same Width and height
SELECT ST_AddBand(ST_Clip(rast, 1,
        ST_Buffer(ST_Centroid(ST_Envelope(rast)),20),false
    ), ARRAY[ST_Band(rast,2),ST_Band(rast,3)] ) from aerials.boston
WHERE rid = 6;
                    

잘라내기 전의 전체 래스터 타일

잘라낸 후 - 비현실적

예시: 모든 밴드 잘라내기

-- Clip all bands of an aerial tile by a 20 meter buffer.
-- Only difference is we don't specify a specific band to clip
-- so all bands are clipped
SELECT ST_Clip(rast,
      ST_Buffer(ST_Centroid(ST_Envelope(rast)), 20),
      false
    ) from aerials.boston
WHERE rid = 4;
                    

잘라내기 전의 전체 래스터 타일

잘라낸 후

참고

ST_AddBand, ST_MapAlgebra (callback function version), ST_Intersection