Chapter 10. 래스트 참조문서

Table of Contents
10.1. 래스터 지원 데이터형
10.2. 래스터 관리
10.3. 래스터 작성자(constructor)
10.4. 래스터 접근자(accessor)
10.5. 래스터 밴드 접근자
10.6. 래스터 픽셀 접근자 및 설정자(setter)
10.7. 래스터 편집자
10.8. 래스터 밴드 편집자
10.9. 래스터 밴드 통계 및 분석
10.10. Raster Inputs
10.11. 래스터 출력
10.12. 래스터 공간 처리
10.13. 내장 맵 대수 콜백 함수
10.14. 래스터 공간 처리
10.15. 래스터를 도형으로
10.16. 래스터 연산자
10.17. 래스터 및 래스터 밴드의 공간 관계성
10.18. Raster Tips
10.18.1. Out-DB Rasters

이 단원에서 주어진 함수들은 PostGIS 래스터 사용자가 필요로 하고, 현재 PostGIS 래스터에서 사용할 수 있는 함수들입니다. 일반 사용자에겐 쓸모없는, 래스터 객체에 필요한 다른 지원 함수들도 있습니다.

raster 는 래스터 데이터를 저장하고 분석하기 위한 새로운 PostGIS 유형입니다.

래스터 파일에서 래스터를 로드하려면 Section 9.1, “래스터 로드 및 생성” 를 참조하십시오.

이 참조 문서에 있는 예시들의 경우, 다음 코드로 구성된 가짜 래스터를 담은 래스터 테이블을 이용할 것입니다.

CREATE TABLE dummy_rast(rid integer, rast raster);
INSERT INTO dummy_rast(rid, rast)
VALUES (1,
('01' -- little endian (uint8 ndr)
||
'0000' -- version (uint16 0)
||
'0000' -- nBands (uint16 0)
||
'0000000000000040' -- scaleX (float64 2)
||
'0000000000000840' -- scaleY (float64 3)
||
'000000000000E03F' -- ipX (float64 0.5)
||
'000000000000E03F' -- ipY (float64 0.5)
||
'0000000000000000' -- skewX (float64 0)
||
'0000000000000000' -- skewY (float64 0)
||
'00000000' -- SRID (int32 0)
||
'0A00' -- width (uint16 10)
||
'1400' -- height (uint16 20)
)::raster
),
-- Raster: 5 x 5 pixels, 3 bands, PT_8BUI pixel type, NODATA = 0
(2,  ('01000003009A9999999999A93F9A9999999999A9BF000000E02B274A' ||
'41000000007719564100000000000000000000000000000000FFFFFFFF050005000400FDFEFDFEFEFDFEFEFDF9FAFEF' ||
'EFCF9FBFDFEFEFDFCFAFEFEFE04004E627AADD16076B4F9FE6370A9F5FE59637AB0E54F58617087040046566487A1506CA2E3FA5A6CAFFBFE4D566DA4CB3E454C5665')::raster);

10.1. 래스터 지원 데이터형

Abstract

이 단원에서 래스터 기능성을 지원하기 위해 특별히 생성된 PostgreSQL 데이터 유형들을 소개합니다.

geomval — (도형 객체를 담고 있는) geom과 (래스터 밴드의 이중 정밀도 픽셀값을 담고 있는) val, 두 개의 필드를 가진 공간 데이터형입니다.
addbandarg — 새로운 밴드의 속성 및 초기값을 정의하는 ST_AddBand 함수의 입력물로 이용되는 복합 데이터형입니다.
rastbandarg — 래스터 및 해당 래스터의 밴드 인덱스를 표현해야 할 경우 쓰이는 복합 데이터형입니다.
raster — 래스터 공간 데이터형입니다.
reclassarg — 재분류 작업의 습성을 정의하는 ST_Reclass 함수의 입력물로 쓰이는 복합 데이터형입니다.
summarystats — ST_SummaryStats 및 ST_SummaryStatsAgg 함수가 반환하는 복합 데이터형입니다.
unionarg — 공간 처리할 밴드들 및 UNION 연산의 습성을 정의하는 ST_Union 함수의 입력물로 쓰이는 복합 데이터형입니다.

10.2. 래스터 관리

AddRasterConstraints — Adds raster constraints to a loaded raster table for a specific column that constrains spatial ref, scaling, blocksize, alignment, bands, band type and a flag to denote if raster column is regularly blocked. The table must be loaded with data for the constraints to be inferred. Returns true if the constraint setting was accomplished and issues a notice otherwise.
DropRasterConstraints — 래스터 테이블 열을 참조하는 PostGIS 래스터 제약조건을 삭제합니다. 데이터를 다시 로드하거나 사용자 래스터 열 데이터를 업데이트해야 할 경우 유용합니다.
AddOverviewConstraints — 래스터 열을 또 다른 래스터 열의 미리보기(overview)로 태그합니다.
DropOverviewConstraints — 또 다른 래스터 열의 미리보기(overview)로서의 래스터 열을 태그 해제합니다.
PostGIS_GDAL_Version — PostGIS가 이용하고 있는 GDAL 라이브러리의 버전을 반환합니다.
PostGIS_Raster_Lib_Build_Date — 전체 래스터 라이브러리의 빌드 날짜를 반환합니다.
PostGIS_Raster_Lib_Version — 전체 래스터 버전 및 설정 정보를 반환합니다.
ST_GDALDrivers — Returns a list of raster formats supported by PostGIS through GDAL. Only those formats with can_write=True can be used by ST_AsGDALRaster
ST_Contour — Generates a set of vector contours from the provided raster band, using the GDAL contouring algorithm.
ST_InterpolateRaster — Interpolates a gridded surface based on an input set of 3-d points, using the X- and Y-values to position the points on the grid and the Z-value of the points as the surface elevation.
UpdateRasterSRID — 사용자가 지정한 열 및 테이블에 있는 모든 래스터의 SRID를 변경합니다.
ST_CreateOverview — 입력 래스터 커버리지의 저해상도 버전을 생성합니다.

10.3. 래스터 작성자(constructor)

ST_AddBand — 입력 인덱스 위치에 입력 초기값으로 추가된 입력 유형의 새 밴드(들)을 가진 래스터를 반환합니다. 인덱스를 설정하지 않을 경우, 마지막 위치에 밴드를 추가합니다.
ST_AsRaster — PostGIS 도형을 PostGIS 래스터로 변환합니다.
ST_Band — 기존 래스터의 하나 이상의 밴드를 새 래스터로 반환합니다. 기존 래스터로부터 새 래스터를 빌드하는 데 유용합니다.
ST_MakeEmptyCoverage — Cover georeferenced area with a grid of empty raster tiles.
ST_MakeEmptyRaster — 설정된 차원(너비 & 높이), 좌상단 X 및 Y, 픽셀 크기, 회전(scalex, scaley, skewx & skewy) 그리고 공간 참조 시스템(SRID)를 가진 텅 빈 (밴드가 없는) 래스터를 반환합니다. 래스터를 입력할 경우, 동일한 크기, 정렬 방향 및 SRID를 가진 새 래스터를 반환합니다. SRID를 생략할 경우, 공간 참조 시스템을 0(unknown)으로 설정합니다.
ST_Tile — 출력 래스터에 원하는 차원을 바탕으로 입력 래스터를 분할해서 나온 래스터들의 집합을 반환합니다.
ST_Retile — 임의로 타일화된 래스터 커버리지로부터, 설정된 타일들의 집합을 반환합니다.
ST_FromGDALRaster — 지원 GDAL 래스터 파일로부터 래스터를 반환합니다.

10.4. 래스터 접근자(accessor)

ST_GeoReference — 월드(world) 파일에서 흔히 볼 수 있는 지리참조 메타데이터를 GDAL 또는 ESRI 형식으로 반환합니다. 기본값은 GDAL입니다.
ST_Height — 래스터의 높이를 픽셀 개수로 반환합니다.
ST_IsEmpty — 래스터가 비어 있을 경우 (width = 0, height = 0) 참을 반환합니다. 그렇지 않을 경우 거짓을 반환합니다.
ST_MemSize — 래스터가 차지하는 공간의 용량을 (바이트 단위로) 반환합니다.
ST_MetaData — 래스터 객체의 픽셀 크기, 회전(skew), 좌상단, 좌하단 등과 같은 기본 메타데이터를 반환합니다.
ST_NumBands — 래스터 객체 내부에 있는 밴드들의 개수를 반환합니다.
ST_PixelHeight — 픽셀 높이를 공간 참조 시스템의 기하 단위로 반환합니다.
ST_PixelWidth — 픽셀 너비를 공간 참조 시스템의 기하 단위로 반환합니다.
ST_ScaleX — 픽셀 너비의 X 요소를 좌표 참조 시스템의 단위로 반환합니다.
ST_ScaleY — 픽셀 높이의 Y 요소를 좌표 참조 시스템의 단위로 반환합니다.
ST_RasterToWorldCoord — 주어진 열과 행에 있는 래스터의 좌상단의 기하학적 X, Y(경도, 위도)를 으로 반환합니다. 열과 행은 1부터 시작합니다.
ST_RasterToWorldCoordX — 열과 행에 있는 래스터의 좌상단의 기하학적 X 좌표를 반환합니다. 열과 행의 번호는 1부터 시작합니다.
ST_RasterToWorldCoordY — 열과 행에 있는 래스터의 좌상단의 기하학적 Y 좌표를 반환합니다. 열과 행의 번호는 1부터 시작합니다.
ST_Rotation — 래스터의 회전각을 라디안으로 반환합니다.
ST_SkewX — 지리참조 X 기울기(skew)(또는 회전각 파라미터)를 반환합니다.
ST_SkewY — 지리참조 Y 기울기(또는 회전각 파라미터)를 반환합니다.
ST_SRID — spatial_ref_sys 테이블에 정의되어 있는, 래스터의 공간 참조 식별자를 반환합니다.
ST_Summary — 래스터의 내용을 요약한 텍스트를 반환합니다.
ST_UpperLeftX — 래스터의 좌상단 X 좌표를 투영된 공간 참조 단위로 반환합니다.
ST_UpperLeftY — 래스터의 좌상단 Y 좌표를 투영된 공간 참조 단위로 반환합니다.
ST_Width — 래스터의 너비를 픽셀 개수로 반환합니다.
ST_WorldToRasterCoord — 주어진 기하학적 X, Y(경도, 위도)의 좌상단을 열과 행으로 또는 래스터의 공간 참조 좌표 시스템 단위로 표현된 포인트 도형으로 반환합니다.
ST_WorldToRasterCoordX — 포인트 도형(pt)의 래스터 안의 열 또는 래스터의 월드 공간 참조 시스템 단위로 표현된 X, Y 월드 좌표(xw, yw)를 반환합니다.
ST_WorldToRasterCoordY — 포인트 도형(pt)의 래스터 안의 행 또는 래스터의 월드 공간 참조 시스템 단위로 표현된 X, Y 월드 좌표(xw, yw)를 반환합니다.

10.5. 래스터 밴드 접근자

ST_BandMetaData — 지정 래스터 밴드에 대한 기본 메타데이터를 반환합니다. 밴드를 지정하지 않을 경우 밴드 1번이라고 가정합니다.
ST_BandNoDataValue — 입력 밴드에서 NODATA를 나타내는 값을 반환합니다. 어떤 밴드도 지정하지 않을 경우 밴드 1로 가정합니다.
ST_BandIsNoData — 밴드가 NODATA 값만으로 채워져 있을 경우 참을 반환합니다.
ST_BandPath — 파일 시스템에 저장된 밴드를 가리키는 시스템 파일 경로를 반환합니다. bandnum을 설정하지 않을 경우 밴드 1로 가정합니다.
ST_BandFileSize — Returns the file size of a band stored in file system. If no bandnum specified, 1 is assumed.
ST_BandFileTimestamp — Returns the file timestamp of a band stored in file system. If no bandnum specified, 1 is assumed.
ST_BandPixelType — 입력 밴드의 픽셀 유형을 반환합니다. bandnum을 설정하지 않을 경우 밴드 1로 가정합니다.
ST_MinPossibleValue — 래스터 객체 내부에 있는 밴드들의 개수를 반환합니다.
ST_HasNoBand — 입력된 밴드 번호에 밴드가 없을 경우 참을 반환합니다. 밴드 번호를 설정하지 않을 경우, 밴드 1로 가정합니다.

10.6. 래스터 픽셀 접근자 및 설정자(setter)

ST_PixelAsPolygon — 특정 행 및 열에 대한 픽셀의 경계를 이루는 폴리곤 도형을 반환합니다.
ST_PixelAsPolygons — 래스터 밴드의 모든 픽셀의 경계를 이루는 폴리곤 도형을 각 픽셀의 값과 X, Y 래스터 좌표와 함께 반환합니다.
ST_PixelAsPoint — 픽셀의 좌상단에 위치하는 포인트 도형을 반환합니다.
ST_PixelAsPoints — 래스터 밴드의 각 픽셀에 대한 포인트 도형을 각 픽셀의 값 및 X, Y 래스터 좌표와 함께 반환합니다. 포인트 도형의 좌표는 픽셀의 좌상단 좌표입니다.
ST_PixelAsCentroid — 픽셀 하나가 차지하는 면의 중심점(포인트 도형)을 반환합니다.
ST_PixelAsCentroids — 래스터 밴드의 각 픽셀에 대한 중심점(포인트 도형)을 각 픽셀의 값 및 X, Y 래스터 좌표와 함께 반환합니다. 포인트 도형은 픽셀이 차지하는 면의 중심점입니다.
ST_Value — 입력 columnx, rowy 픽셀의 입력 밴드의 값, 또는 특정 기하학적 포인트의 밴드의 값을 반환합니다. 밴드 번호는 1부터 시작하며, 따로 지정하지 않을 경우 1로 가정합니다. exclude_nodata_value 를 거짓으로 설정할 경우, nodata 픽셀을 포함한 모든 픽셀이 교차한다고 가정하고 값을 반환합니다. exclude_nodata_value 를 설정하지 않은 경우, 래스터의 메타데이터에서 값을 읽어 들입니다.
ST_NearestValue — columnx 및 rowy, 또는 래스터와 동일한 공간 참조 좌표 시스템 단위로 표현된 기하학적 포인트로 지정된 입력 밴드의 픽셀에 가장 가까운 NODATA 가 아닌 값을 반환합니다.
ST_SetZ — Returns a geometry with the same X/Y coordinates as the input geometry, and values from the raster copied into the Z dimension using the requested resample algorithm.
ST_SetM — Returns a geometry with the same X/Y coordinates as the input geometry, and values from the raster copied into the M dimension using the requested resample algorithm.
ST_Neighborhood — columnx 및 rowy, 또는 래스터와 동일한 공간 참조 좌표 시스템 단위로 표현된 기하학적 포인트로 지정된 입력 밴드의 픽셀 주위의 NODATA 가 아닌 값들의 이중 정밀도 데이터형 2차원 배열을 반환합니다.
ST_SetValue — 입력한 columnx, rowy 픽셀 또는 특정 도형과 교차하는 픽셀들의 위치의 밴드 값을 설정해서 나온 수정된 래스터를 반환합니다. 밴드 번호는 1부터 시작하며, 따로 설정하지 않을 경우 1로 가정합니다.
ST_SetValues — 지정한 밴드의 값들을 설정해서 나온 수정된 래스터를 반환합니다.
ST_DumpValues — 지정된 밴드의 값들을 2차원 배열로 반환합니다.
ST_PixelOfValue — 검색 값과 일치하는 값을 가진 픽셀의 columnx, rowy 좌표를 반환합니다.

10.7. 래스터 편집자

ST_SetGeoReference — 단일 호출로 지리참조 파라미터 6개를 설정합니다. 숫자를 공백으로 구분해야 합니다. GDAL 또는 ESRI 서식의 입력물을 받아들입니다. 기본값은 GDAL입니다.
ST_SetRotation — 래스터의 회전각을 라디안으로 설정합니다.
ST_SetScale — X 및 Y 픽셀 크기를 좌표 참조 시스템의 단위로 설정합니다. 단위/픽셀 너비/픽셀 높이 순서입니다.
ST_SetSkew — 지리참조 X 및 Y 기울기(skew)(또는 회전각 파라미터)를 설정합니다. 값 하나만 입력할 경우, X와 Y를 동일한 값으로 설정합니다.
ST_SetSRID — 래스터의 SRID를 spatial_ref_sys 테이블에 정의된 특정 SRID의 정수값으로 설정합니다.
ST_SetUpperLeft — Sets the value of the upper left corner of the pixel of the raster to projected X and Y coordinates.
ST_Resample — 특정 리샘플링 알고리즘, 새로운 차원, 임의의 그리드 모서리, 그리고 또 다른 래스터에서 정의되거나 빌려온 래스터 지리참조 속성들의 집합을 이용해서 래스터를 리샘플링합니다.
ST_Rescale — Resample a raster by adjusting only its scale (or pixel size). New pixel values are computed using the NearestNeighbor (english or american spelling), Bilinear, Cubic, CubicSpline, Lanczos, Max or Min resampling algorithm. Default is NearestNeighbor.
ST_Reskew — 기울기(또는 회전각 파라미터)만 조정해서 래스터를 리샘플링합니다. NearestNeighbor(영국 또는 미국 철자), Bilinear, Cubic, CubicSpline 또는 Lanczos 리샘플링 알고리즘을 이용해서 새 픽셀 값을 계산합니다. 기본값은 NearestNeighbor입니다.
ST_SnapToGrid — 그리드에 래스터를 스냅시켜서 래스터를 리샘플링합니다. NearestNeighbor(영국 또는 미국 철자), Bilinear, Cubic, CubicSpline 또는 Lanczos 리샘플링 알고리즘을 이용해서 새 픽셀 값을 계산합니다. 기본값은 NearestNeighbor입니다.
ST_Resize — 래스터의 크기를 새 너비/높이로 조정합니다.
ST_Transform — 알려진 공간 참조 시스템의 래스터를 지정한 리샘플링 알고리즘을 통해 또 다른 알려진 공간 참조 시스템으로 재투영합니다. NearestNeighbor, Bilinear, Cubic, CubicSpline, Lanczos 알고리즘을 이용할 수 있습니다. 기본값은 NearestNeighbor입니다.

10.8. 래스터 밴드 편집자

ST_SetBandNoDataValue — NODATA를 나타내는 입력 밴드의 값을 설정합니다. 밴드를 따로 설정하지 않을 경우 밴드 1로 가정합니다. 밴드에 NODATA가 없다고 표시하려면, nodata value = NULL이라고 설정하십시오.
ST_SetBandIsNoData — 밴드의 isnodata 플래그를 참으로 설정합니다.
ST_SetBandPath — Update the external path and band number of an out-db band
ST_SetBandIndex — Update the external band number of an out-db band

10.9. 래스터 밴드 통계 및 분석

ST_Count — 래스터 또는 래스터 커버리지의 입력 밴드에 있는 픽셀 개수를 반환합니다. 밴드를 따로 설정하지 않을 경우 기본값은 밴드 1입니다. exclude_nodata_value를 참으로 설정할 경우, NODATA 값이 아닌 픽셀의 개수만 반환할 것입니다.
ST_CountAgg — 종합 함수입니다. 래스터 집합의 입력 밴드에 있는 픽셀 개수를 반환합니다. 밴드를 따로 설정하지 않을 경우 기본값은 밴드 1입니다. exclude_nodata_value를 참으로 설정할 경우, NODATA 값이 아닌 픽셀의 개수만 반환할 것입니다.
ST_Histogram — 빈(bin; 히스토그램 표시에서 수직 막대로 나타나는 단위) 범위로 구분된 래스터 또는 래스터 커버리지의 데이터 분포를 요약하는 레코드 집합을 반환합니다. 따로 설정하지 않을 경우 빈의 개수를 자동으로 계산합니다.
ST_Quantile — 샘플링 또는 채우기(population)라는 맥락에서 래스터 또는 래스터 테이블 커버리지의 사분위(quantile)를 계산합니다. 따라서, 래스터의 25%, 50%, 75% 백분위(percentile) 단계로 값을 확인할 수 있습니다.
ST_SummaryStats — 입력한 래스터 밴드 또는 래스터 또는 래스터 커버리지의 count, sum, mean, stddev, min, max로 이루어진 통계 요약을 반환합니다. 밴드를 따로 설정하지 않을 경우 밴드 1로 가정합니다.
ST_SummaryStatsAgg — 종합 함수입니다. 래스터 집합의 입력 래스터 밴드의 count, sum, mean, stddev, min, max로 이루어진 통계 요약을 반환합니다. 밴드를 따로 설정하지 않을 경우 밴드 1로 가정합니다.
ST_ValueCount — 설정한 값들의 집합을 가진 래스터(또는 래스터 커버리지)의 입력 밴드에 있는 픽셀 밴드 값 및 픽셀 개수의 집계를 담고 있는 레코드 집합을 반환합니다. 밴드를 따로 설정하지 않을 경우 기본값은 밴드 1입니다. 기본적으로 NODATA 값은 집계되지 않습니다. 픽셀의 다른 모든 값들을 출력하는데, 픽셀 밴드 값은 가장 가까운 정수로 반올림됩니다.

10.10. Raster Inputs

ST_RastFromWKB — Return a raster value from a Well-Known Binary (WKB) raster.
ST_RastFromHexWKB — Return a raster value from a Hex representation of Well-Known Binary (WKB) raster.

10.11. 래스터 출력

ST_AsBinary/ST_AsWKB — Return the Well-Known Binary (WKB) representation of the raster.
ST_AsHexWKB — Return the Well-Known Binary (WKB) in Hex representation of the raster.
ST_AsGDALRaster — Return the raster tile in the designated GDAL Raster format. Raster formats are one of those supported by your compiled library. Use ST_GDALDrivers() to get a list of formats supported by your library.
ST_AsJPEG — 래스터 타일에서 선택한 밴드들을 단일 JPEG(Joint Photographic Exports Group) 이미지(바이트 배열)로 반환합니다. 밴드를 따로 설정하지 않거나, 밴드가 1개거나 또는 3개를 초과할 경우 첫 번째 밴드를 씁니다. 밴드가 3개뿐일 경우 밴드 3개를 모두 써서 RGB에 매핑시킵니다.
ST_AsPNG — 래스터 타일에서 선택한 밴드들을 단일 PNG(Portable Network Graphics) 이미지(바이트 배열)로 반환합니다. 래스터의 밴드가 1개, 3개, 또는 4개이거나 따로 설정하지 않을 경우 모든 밴드를 씁니다. 밴드가 2개 또는 4개를 초과하며 따로 설정하지 않을 경우, 밴드 1만 씁니다. 밴드를 RGB 또는 RGBA 스페이스에 매핑합니다.
ST_AsTIFF — Return the raster selected bands as a single TIFF image (byte array). If no band is specified or any of specified bands does not exist in the raster, then will try to use all bands.

10.12. 래스터 공간 처리

ST_Clip — 입력 도형으로 잘라낸 래스터를 반환합니다. 밴드 번호를 지정하지 않은 경우, 모든 밴드를 처리합니다. crop 을 설정하지 않거나 참으로 설정한 경우, 잘라낸 래스터를 출력합니다.
ST_ColorMap — 소스 래스터 및 설정한 밴드로부터 8BUI 밴드(grayscale, RGB, RGBA)를 4개까지 가지는 새 래스터를 생성합니다. 밴드를 따로 설정하지 않으면 밴드 1로 가정합니다.
ST_Grayscale — Creates a new one-8BUI band raster from the source raster and specified bands representing Red, Green and Blue
ST_Intersection — 두 래스터의 공유 부분을 표현하는, 또는 벡터화된 래스터와 도형의 기하학적 교차를 표현하는 래스터 또는 도형-픽셀값 쌍의 집합을 반환합니다.
ST_MapAlgebra (callback function version) — 콜백 함수 버전 - 래스터 1개 이상, 밴드 인덱스, 그리고 사용자 지정 콜백 함수 1개를 입력받아 밴드 1개를 가진 래스터를 반환합니다.
ST_MapAlgebra (expression version) — 표현식 버전 - 입력 래스터 1개 또는 2개, 밴드 인덱스, 그리고 사용자 지정 SQL 표현식 1개 이상을 입력받아 밴드 1개를 가진 래스터를 반환합니다.
ST_MapAlgebraExpr — 래스터 밴드 1개 버전: 입력 래스터에 대해 유효한 PostgreSQL 대수 연산을 적용해서 형성되고, 설정한 픽셀 유형을 가진, 밴드 1개를 가진 새 래스터를 생성합니다. 따로 밴드를 설정하지 않을 경우, 밴드 1로 가정합니다.
ST_MapAlgebraExpr — 래스터 밴드 2개 버전: 입력 래스터 2개에 대해 유효한 PostgreSQL 대수 연산을 적용해서 형성되고, 설정한 픽셀 유형을 가진, 밴드 1개를 가진 새 래스터를 생성합니다. 따로 밴드를 설정하지 않을 경우, 각 래스터의 밴드 1로 가정합니다. 출력 래스터는 첫 번째 래스터가 정의하는 그리드 상에 (축척, 기울기 및 픽셀 모서리가) 정렬될 것입니다. extenttype 파라미터가 출력 래스터의 범위를 정의할 것입니다. extenttype 의 값은 INTERSECTION, UNION, FIRST, SECOND가 될 수 있습니다.
ST_MapAlgebraFct — 래스터 밴드 1개 버전: 입력 래스터에 대해 유효한 PostgreSQL 대수 연산을 적용해서 형성되고, 설정한 픽셀 유형을 가진, 밴드 1개를 가진 새 래스터를 생성합니다. 따로 밴드를 설정하지 않을 경우, 밴드 1로 가정합니다.
ST_MapAlgebraFct — 래스터 밴드 2개 버전: 입력 래스터 2개에 대해 유효한 PostgreSQL 함수를 적용해서 형성되고, 설정한 픽셀 유형을 가진, 밴드 1개를 가진 새 래스터를 생성합니다. 따로 밴드를 설정하지 않을 경우, 밴드 1로 가정합니다. 범위 유형을 따로 설정하지 않을 경우 기본값은 INTERSECTION입니다.
ST_MapAlgebraFctNgb — 래스터 밴드 1개 버전: 사용자 지정 PostgreSQL 함수를 이용하는 맵 대수 최근접 이웃(Map Algebra Nearest Neighbor)입니다. 입력 래스터 밴드의 값의 이웃(neighborhood)이 관련된 PostgreSQL 사용자 함수가 출력하는 값을 가진 래스터를 반환합니다.
ST_Reclass — 원본으로부터 재분류된 밴드 유형으로 이루어진 새 래스터를 생성합니다. nband 는 변경할 밴드를 가리킵니다. nband 를 따로 설정하지 않을 경우 밴드 1로 가정합니다. 다른 모든 밴드들은 변경 없이 반환됩니다. 실제 사례: 보기 좋은 형식으로 더 간단하게 렌더링하기 위해 16BUI 밴드를 8BUI 등등으로 변환하십시오.
ST_Union — 래스터 타일 집합을 1개 이상의 밴드로 이루어진 단일 래스터로 통합합니다.

10.13. 내장 맵 대수 콜백 함수

ST_Distinct4ma — 이웃에서 유일한 픽셀 값들의 개수를 계산하는 래스터 공간 처리 함수입니다.
ST_InvDistWeight4ma — 픽셀의 이웃으로부터 픽셀 값을 보간하는 래스터 공간 처리 함수입니다.
ST_Max4ma — 이웃에서 최대 픽셀 값을 계산하는 래스터 공간 처리 함수입니다.
ST_Mean4ma — 이웃에서 평균 픽셀 값을 계산하는 래스터 공간 처리 함수입니다.
ST_Min4ma — 이웃에서 최소 픽셀 값을 계산하는 래스터 공간 처리 함수입니다.
ST_MinDist4ma — 관심 픽셀과 값을 가지고 있는 이웃 픽셀 사이의 최소 거리를 (픽셀 개수로) 반환하는 래스터 공간 처리 함수입니다.
ST_Range4ma — 이웃에 있는 픽셀값들의 범위를 계산하는 래스터 공간 처리 함수입니다.
ST_StdDev4ma — 이웃에 있는 픽셀값들의 표준 편차를 계산하는 래스터 공간 처리 함수입니다.
ST_Sum4ma — 이웃에 있는 모든 픽셀값들의 합계를 계산하는 래스터 공간 처리 함수입니다.

10.14. 래스터 공간 처리

ST_Aspect — 표고 래스터 밴드의 향(기본 단위는 도)을 반환합니다. 지형을 분석하는 데 유용합니다.
ST_HillShade — 입력한 방위각, 고도각, 밝기 및 축척을 이용해서 표고 래스터 밴드의 가상적인 음영기복을 반환합니다.
ST_Roughness — DEM의 계산된 "거칠기(roughness)"와 함께 래스터를 반환합니다.
ST_Slope — 표고 래스터 밴드의 경사(기본 단위는 도)를 반환합니다. 지형을 분석하는 데 유용합니다.
ST_TPI — 계산된 지형위치지수(Topographic Position Index)와 함께 래스터를 반환합니다.
ST_TRI — 계산된 지형험준도지수(Terrain Ruggedness Index)와 함께 래스터를 반환합니다.

10.15. 래스터를 도형으로

Box3D — 래스터를 둘러싼 상자의 BOX3D 표현식을 반환합니다.
ST_ConvexHull — BandNoDataValue와 일치하는 픽셀 값을 포함한, 래스터의 볼록 껍질 도형을 반환합니다. 정규 형상 및 기울어지지 않은 래스터의 경우, ST_Envelope와 동일한 결과물을 출력하므로 비정규 형상 또는 기울어진 래스터에 대해서만 쓸모가 있습니다.
ST_DumpAsPolygons — 입력 래스터 밴드로부터 geomval(geom, val) 행들의 집합을 반환합니다. 밴드 번호를 설정하지 않을 경우 기본적으로 밴드 1로 가정합니다.
ST_Envelope — 래스터 범위의 폴리곤 표현식을 반환합니다.
ST_MinConvexHull — 래스터의 NODATA 픽셀을 제외한 볼록 껍질 도형을 반환합니다.
ST_Polygon — NODATA 값이 아닌 픽셀 값을 가진 픽셀들을 통합해서 형성된 멀티폴리곤 도형을 반환합니다.

10.16. 래스터 연산자

&& — A의 경계 상자와 B의 경계 상자가 교차하는 경우 TRUE 를 반환합니다.
&< — A의 경계 상자가 B의 경계 상자 왼쪽에 있을 경우 TRUE 를 반환합니다.
&> — A의 경계 상자가 B의 경계 상자 오른쪽에 있을 경우 TRUE 를 반환합니다.
= — A의 경계 상자와 B의 경계 상자가 동일할 경우 TRUE 를 반환합니다. 이중 정밀도 경계 상자를 이용합니다.
@ — B의 경계 상자가 A의 경계 상자를 담고 있을 경우 TRUE 를 반환합니다. 이중 정밀도 경계 상자를 이용합니다.
~= — A의 경계 상자와 B의 경계 상자가 동일할 경우 TRUE 를 반환합니다.
~ — A의 경계 상자가 B의 경계 상자를 담고 있을 경우 TRUE 를 반환합니다. 이중 정밀도 경계 상자를 이용합니다.

10.17. 래스터 및 래스터 밴드의 공간 관계성

ST_Contains — 래스터 rastA 외부에 놓인 래스터 rastB의 포인트가 하나도 없고, 적어도 rastB 내부의 포인트 하나가 rastA의 내부에 있는 경우 참을 반환합니다.
ST_ContainsProperly — rastB가 rastA의 내부와 교차하지만 rastA의 경계선 또는 외부와 교차하지는 않을 경우 참을 반환합니다.
ST_Covers — 래스터 rastB의 어떤 포인트도 래스터 rastA 외부에 없을 경우 참을 반환합니다.
ST_CoveredBy — 래스터 rastA의 어떤 포인트도 래스터 rastB 외부에 없을 경우 참을 반환합니다.
ST_Disjoint — 래스터 rastA와 래스터 rastB가 공간적으로 교차하지 않을 경우 참을 반환합니다.
ST_Intersects — 래스터 rastA와 래스터 rastB가 공간적으로 교차할 경우 참을 반환합니다.
ST_Overlaps — 래스터 rastA와 래스터 rastB가 교차하지만 어느 한 쪽이 다른 한 쪽을 완전히 담고 있지는 않을 경우 참을 반환합니다.
ST_Touches — 래스터 rastA와 래스터 rastB가 최소한 포인트 한 개를 공유하지만, 내부가 교차하지는 않을 경우 TRUE 를 반환합니다.
ST_SameAlignment — 래스터들이 동일한 기울기, 축척, 공간 참조 시스템, 그리고 오프셋을 가지고 있을 경우 (픽셀이 다른 픽셀을 침범하지 않고 동일한 그리드에 놓일 수 있을 경우) 참을 반환하고, 그렇지 않을 경우 문제점을 설명하는 안내문과 함께 거짓을 반환합니다.
ST_NotSameAlignmentReason — 래스터들이 정렬돼 있는지 아닌지, 그리고 정렬되지 않았다면 그 이유를 설명하는 텍스트를 반환합니다.
ST_Within — 래스터 rastB 외부에 놓인 래스터 rastA의 포인트가 하나도 없고, 적어도 rastA 내부의 포인트 하나가 rastB의 내부에 있는 경우 참을 반환합니다.
ST_DWithin — 래스터 rastA와 래스터 rastB가 서로 설정된 거리 안에 있을 경우 참을 반환합니다.
ST_DFullyWithin — 래스터 rastA와 래스터 rastB가 완전히 서로 설정된 거리 안에 있을 경우 참을 반환합니다.

10.18. Raster Tips

Abstract

This section documents various gotchas and tips related to PostGIS Raster.

10.18.1. Out-DB Rasters

10.18.1.1. Directory containing many files

When GDAL opens a file, GDAL eagerly scans the directory of that file to build a catalog of other files. If this directory contains many files (e.g. thousands, millions), opening that file becomes extremely slow (especially if that file happens to be on a network drive such as NFS).

To control this behavior, GDAL provides the following environment variable: GDAL_DISABLE_READDIR_ON_OPEN. Set GDAL_DISABLE_READDIR_ON_OPEN to TRUE to disable directory scanning.

In Ubuntu (and assuming you are using PostgreSQL's packages for Ubuntu), GDAL_DISABLE_READDIR_ON_OPEN can be set in /etc/postgresql/POSTGRESQL_VERSION/CLUSTER_NAME/environment (where POSTGRESQL_VERSION is the version of PostgreSQL, e.g. 9.6 and CLUSTER_NAME is the name of the cluster, e.g. maindb). You can also set PostGIS environment variables here as well.

# environment variables for postmaster process
# This file has the same syntax as postgresql.conf:
#  VARIABLE = simple_value
#  VARIABLE2 = 'any value!'
# I. e. you need to enclose any value which does not only consist of letters,
# numbers, and '-', '_', '.' in single quotes. Shell commands are not
# evaluated.
POSTGIS_GDAL_ENABLED_DRIVERS = 'ENABLE_ALL'

POSTGIS_ENABLE_OUTDB_RASTERS = 1

GDAL_DISABLE_READDIR_ON_OPEN = 'TRUE'
                    

10.18.1.2. Maximum Number of Open Files

The maximum number of open files permitted by Linux and PostgreSQL are typically conservative (typically 1024 open files per process) given the assumption that the system is consumed by human users. For Out-DB Rasters, a single valid query can easily exceed this limit (e.g. a dataset of 10 year's worth of rasters with one raster for each day containing minimum and maximum temperatures and we want to know the absolute min and max value for a pixel in that dataset).

The easiest change to make is the following PostgreSQL setting: max_files_per_process. The default is set to 1000, which is far too low for Out-DB Rasters. A safe starting value could be 65536 but this really depends on your datasets and the queries run against those datasets. This setting can only be made on server start and probably only in the PostgreSQL configuration file (e.g. /etc/postgresql/POSTGRESQL_VERSION/CLUSTER_NAME/postgresql.conf in Ubuntu environments).

...
# - Kernel Resource Usage -

max_files_per_process = 65536           # min 25
                                        # (change requires restart)
...
                    

The major change to make is the Linux kernel's open files limits. There are two parts to this:

  • Maximum number of open files for the entire system

  • Maximum number of open files per process

10.18.1.2.1. Maximum number of open files for the entire system

You can inspect the current maximum number of open files for the entire system with the following example:

$ sysctl -a | grep fs.file-max
fs.file-max = 131072
                    

If the value returned is not large enough, add a file to /etc/sysctl.d/ as per the following example:

$ echo "fs.file-max = 6145324" 
>
> /etc/sysctl.d/fs.conf

$ cat /etc/sysctl.d/fs.conf
fs.file-max = 6145324

$ sysctl -p --system
* Applying /etc/sysctl.d/fs.conf ...
fs.file-max = 2097152
* Applying /etc/sysctl.conf ...

$ sysctl -a | grep fs.file-max
fs.file-max = 6145324
                    
10.18.1.2.2. Maximum number of open files per process

We need to increase the maximum number of open files per process for the PostgreSQL server processes.

To see what the current PostgreSQL service processes are using for maximum number of open files, do as per the following example (make sure to have PostgreSQL running):

$ ps aux | grep postgres
postgres 31713  0.0  0.4 179012 17564 pts/0    S    Dec26   0:03 /home/dustymugs/devel/postgresql/sandbox/10/usr/local/bin/postgres -D /home/dustymugs/devel/postgresql/sandbox/10/pgdata
postgres 31716  0.0  0.8 179776 33632 ?        Ss   Dec26   0:01 postgres: checkpointer process
postgres 31717  0.0  0.2 179144  9416 ?        Ss   Dec26   0:05 postgres: writer process
postgres 31718  0.0  0.2 179012  8708 ?        Ss   Dec26   0:06 postgres: wal writer process
postgres 31719  0.0  0.1 179568  7252 ?        Ss   Dec26   0:03 postgres: autovacuum launcher process
postgres 31720  0.0  0.1  34228  4124 ?        Ss   Dec26   0:09 postgres: stats collector process
postgres 31721  0.0  0.1 179308  6052 ?        Ss   Dec26   0:00 postgres: bgworker: logical replication launcher

$ cat /proc/31718/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             15738                15738                processes
Max open files            1024                 4096                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       15738                15738                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us
                    

In the example above, we inspected the open files limit for Process 31718. It doesn't matter which PostgreSQL process, any of them will do. The response we are interested in is Max open files.

We want to increase Soft Limit and Hard Limit of Max open files to be greater than the value we specified for the PostgreSQL setting max_files_per_process. In our example, we set max_files_per_process to 65536.

In Ubuntu (and assuming you are using PostgreSQL's packages for Ubuntu), the easiest way to change the Soft Limit and Hard Limit is to edit /etc/init.d/postgresql (SysV) or /lib/systemd/system/postgresql*.service (systemd).

Let's first address the SysV Ubuntu case where we add ulimit -H -n 262144 and ulimit -n 131072 to /etc/init.d/postgresql.

...
case "$1" in
    start|stop|restart|reload)
        if [ "$1" = "start" ]; then
            create_socket_directory
        fi
    if [ -z "`pg_lsclusters -h`" ]; then
        log_warning_msg 'No PostgreSQL clusters exist; see "man pg_createcluster"'
        exit 0
    fi

    ulimit -H -n 262144
    ulimit -n 131072

    for v in $versions; do
        $1 $v || EXIT=$?
    done
    exit ${EXIT:-0}
        ;;
    status)
...

Now to address the systemd Ubuntu case. We will add LimitNOFILE=131072 to every /lib/systemd/system/postgresql*.service file in the [Service] section.

...
[Service]

LimitNOFILE=131072

...

[Install]
WantedBy=multi-user.target
...

After making the necessary systemd changes, make sure to reload the daemon

systemctl daemon-reload