ST_MapAlgebraFctNgb — 래스터 밴드 1개 버전: 사용자 지정 PostgreSQL 함수를 이용하는 맵 대수 최근접 이웃(Map Algebra Nearest Neighbor)입니다. 입력 래스터 밴드의 값의 이웃(neighborhood)이 관련된 PostgreSQL 사용자 함수가 출력하는 값을 가진 래스터를 반환합니다.
raster ST_MapAlgebraFctNgb(
raster rast, integer band, text pixeltype, integer ngbwidth, integer ngbheight, regprocedure onerastngbuserfunc, text nodatamode, text[] VARIADIC args)
;
ST_MapAlgebraFctNgb 2.1.0 버전부터 더 이상 이 함수를 지원하지 않습니다. 대신 ST_MapAlgebra (callback function version) 함수를 이용하십시오. |
래스터 1개 버전: 입력 래스터 밴드 값의 이웃(neighborhood)이 관련된 PostgreSQL 사용자 함수가 출력하는 값을 가진 래스터를 반환합니다. 사용자 함수가 픽셀의 이웃 값을 숫자의 배열로 입력받아, 각 픽셀에 대해 사용자 함수의 결과값을 반환해서, 현재 처리중인 픽셀의 픽셀 값을 함수 결과값으로 대체합니다.
사용자 함수를 평가하는 데 쓰이는 래스터
평가할 래스터 밴드 번호(기본값은 1)
출력 래스터의 픽셀 유형입니다. 이 유형은 ST_BandPixelType 목록에 존재하는 유형 가운데 하나이거나, 생략되거나, NULL로 설정돼야만 합니다. 따로 설정하지 않거나 NULL로 설정하지 않으면, rast
의 픽셀 유형을 기본값으로 삼을 것입니다. 결과값이 픽셀 유형의 허용치보다 클 경우 결과값의 길이를 허용치에 맞춰 줄입니다.
이웃(neighborhood)의 셀 단위 너비
이웃(neighborhood)의 셀 단위 높이
래스터의 단일 밴드의 근접 픽셀에 적용할 PL/pgSQL 또는 psql 사용자 함수입니다. 첫 번째 요소가 사각형 픽셀 이웃을 표현하는 2차원 숫자 배열입니다.
NODATA 또는 NULL인 이웃 픽셀의 경우 함수에 어떤 값을 넘겨줄지 정의합니다.
'ignore': 이웃에서 맞닥뜨린 어떤 NODATA 값도 계산을 통해 무시합니다. 사용자 콜백 함수에 이 플래그를 전송해야만 하며, 사용자 함수는 NODATA 값을 어떻게 무시할 것인지 결정합니다.
'NULL': 이웃에서 맞닥뜨린 모든 NODATA 값이 출력 픽셀을 NULL로 만들 것입니다. 이 경우 사용자 콜백 함수를 건너뜁니다.
'value': 이웃에서 맞닥뜨린 어떤 NODATA 값도 참조 픽셀(이웃의 한가운데 있는 픽셀)로 대체합니다. 이 값이 NODATA일 경우, (영향을 받는 이웃에 대해) 'NULL'과 동일한 습성을 보인다는 점에 주의하십시오.
사용자 함수로 넘겨줄 인수들
2.0.0 버전부터 사용할 수 있습니다.
다음 예시는 http://trac.osgeo.org/gdal/wiki/frmts_wtkraster.html 에서 설명하는 대로 단일 타일로 불러온 다음 ST_Rescale 예시 대로 준비한 카트리나 래스터를 활용합니다.
-- -- A simple 'callback' user function that averages up all the values in a neighborhood. -- CREATE OR REPLACE FUNCTION rast_avg(matrix float[][], nodatamode text, variadic args text[]) RETURNS float AS $$ DECLARE _matrix float[][]; x1 integer; x2 integer; y1 integer; y2 integer; sum float; BEGIN _matrix := matrix; sum := 0; FOR x in array_lower(matrix, 1)..array_upper(matrix, 1) LOOP FOR y in array_lower(matrix, 2)..array_upper(matrix, 2) LOOP sum := sum + _matrix[x][y]; END LOOP; END LOOP; RETURN (sum*1.0/(array_upper(matrix,1)*array_upper(matrix,2) ))::integer ; END; $$ LANGUAGE 'plpgsql' IMMUTABLE COST 1000; -- now we apply to our raster averaging pixels within 2 pixels of each other in X and Y direction -- SELECT ST_MapAlgebraFctNgb(rast, 1, '8BUI', 4,4, 'rast_avg(float[][], text, text[])'::regprocedure, 'NULL', NULL) As nn_with_border FROM katrinas_rescaled limit 1;
|
|