Name

ST_Intersection — 두 래스터의 공유 부분을 표현하는, 또는 벡터화된 래스터와 도형의 기하학적 교차를 표현하는 래스터 또는 도형-픽셀값 쌍의 집합을 반환합니다.

Synopsis

setof geomval ST_Intersection(geometry geom, raster rast, integer band_num=1);

setof geomval ST_Intersection(raster rast, geometry geom);

setof geomval ST_Intersection(raster rast, integer band, geometry geomin);

raster ST_Intersection(raster rast1, raster rast2, double precision[] nodataval);

raster ST_Intersection(raster rast1, raster rast2, text returnband, double precision[] nodataval);

raster ST_Intersection(raster rast1, integer band1, raster rast2, integer band2, double precision[] nodataval);

raster ST_Intersection(raster rast1, integer band1, raster rast2, integer band2, text returnband, double precision[] nodataval);

설명

두 래스터의 공유 부분을 표현하는, 또는 벡터화된 래스터와 도형의 기하학적 교차를 표현하는 래스터 또는 도형-픽셀값 쌍의 집합을 반환합니다.

geomval 집합을 반환하는 처음 세 변종 함수는 벡터 스페이스에서 작동합니다. 먼저 (ST_DumpAsPolygon을 통해) 래스터를 geomval 행의 집합으로 벡터화한 다음, 해당 행을 ST_Intersection(geometry, geometry) PostGIS 함수를 이용해서 도형과 교차시킵니다. 도형이 래스터의 NODATA 값 부분과만 교차할 경우, 텅 빈 도형을 반환합니다. WHERE 절에 ST_Intersect 함수를 적절히 사용하면, 일반적으로 결과에서 이런 경우들을 제외시킬 수 있습니다.

출력되는 geomval 집합 앞뒤에 괄호를 치고 표현식 끝에 '.geom' 또는 '.val'을 붙이면 도형 및 값 부분에 접근할 수 있습니다. 예: (ST_Intersection(rast, geom)).geom

래스터를 반환하는 다른 변종들은 래스터 스페이스에서 작동합니다. 이 변종들은 교차를 수행하기 위해 ST_MapAlgebraExpr 함수의 래스터 2개를 입력받는 버전을 이용합니다.

출력 래스터의 범위는 두 래스터 범위의 기하학적 교차 부분과 일치합니다. 출력 래스터는 returnband 파라미터가 어떻게 설정됐는지에 따라 'BAND1', 'BAND2' 또는 'BOTH' 밴드를 포함합니다. 어느 한 밴드에서 NODATA 값을 가진 부분은 출력물의 모든 밴드에서 NODATA 값을 가지게 됩니다. 즉, NODATA 값을 가진 픽셀과 교차하는 픽셀을 모두 NODATA 값을 가진 픽셀로 출력합니다.

ST_Intersection 함수가 출력하는 래스터는 교차하지 않는 부분에 할당된 NODATA 값을 가지고 있어야 합니다. 사용자가 'BAND1', 'BAND2' 또는 'BOTH' 밴드 가운데 어떤 것을 요청하느냐에 따라 1개 또는 2개의 NODATA 값을 가진 nodataval[] 배열을 입력해서 어떤 출력 밴드에 대해서도 NODATA 값을 정의하거나 대체할 수 있습니다. 배열의 첫 번째 값은 첫 번째 밴드의 NODATA 값을 대체하고, 두 번째 값은 두 번째 밴드의 NODATA 값을 대체합니다. 만약 입력 밴드 가운데 하나에 정의된 NODATA 값이 없고 입력된 NODATA 값 배열도 없을 경우, ST_MinPossibleValue 함수를 통해 NODATA 값을 선택합니다. NODATA 값의 배열을 입력받는 모든 변종 함수는 요청된 각 밴드에 할당될 단일 값도 입력받습니다.

모든 변종 함수에서, 밴드 번호를 따로 지정하지 않을 경우 밴드 1로 가정합니다. 래스터와 도형 사이의 교차 부분을 래스터로 반환받아야 할 경우, ST_Clip 을 참조하십시오.

[Note]

출력 범위 또는 NODATA 값을 맞닥뜨렸을 때 무엇을 반환할지를 더 세밀히 조정하려면, ST_MapAlgebraExpr 함수의 두 래스터를 입력받는 버전을 이용하십시오.

[Note]

래스터 스페이스에서 래스터 밴드와 도형의 교차 부분을 계산하려면, ST_Clip 을 이용하십시오. ST_Clip 함수는 복수의 밴드를 가진 래스터를 입력받으며, 래스터화된 도형과 일치하는 밴드를 반환하지 않습니다.

[Note]

ST_Intersects 및 래스터에 대한 인덱스 그리고/또는 도형 열과 결합해서 ST_Intersection 함수를 사용해야 합니다.

개선 사항: 2.0.0부터 래스터 스페이스에서 교차 부분을 구할 수 있습니다. 2.0.0 미만 버전에서는, 벡터 스페이스에서만 교차 작업을 수행할 수 있었습니다.

예시: 도형, 래스터 -- 도형-값 쌍으로 출력

SELECT
    foo.rid,
    foo.gid,
    ST_AsText((foo.geomval).geom) As geomwkt,
    (foo.geomval).val
FROM (
    SELECT
        A.rid,
        g.gid,
        ST_Intersection(A.rast, g.geom) As geomval
    FROM dummy_rast AS A
    CROSS JOIN (
        VALUES
            (1, ST_Point(3427928, 5793243.85) ),
            (2, ST_GeomFromText('LINESTRING(3427927.85 5793243.75,3427927.8 5793243.75,3427927.8 5793243.8)')),
            (3, ST_GeomFromText('LINESTRING(1 2, 3 4)'))
    ) As g(gid,geom)
    WHERE A.rid = 2
) As foo;

 rid | gid |      geomwkt                                               | val
-----+-----+---------------------------------------------------------------------------------------------
   2 |   1 | POINT(3427928 5793243.85)                                  | 249
   2 |   1 | POINT(3427928 5793243.85)                                  | 253
   2 |   2 | POINT(3427927.85 5793243.75)                               | 254
   2 |   2 | POINT(3427927.8 5793243.8)                                 | 251
   2 |   2 | POINT(3427927.8 5793243.8)                                 | 253
   2 |   2 | LINESTRING(3427927.8 5793243.75,3427927.8 5793243.8)   | 252
   2 |   2 | MULTILINESTRING((3427927.8 5793243.8,3427927.8 5793243.75),...) | 250
   2 |   3 | GEOMETRYCOLLECTION EMPTY
                    

참고

geomval, ST_Intersects, ST_MapAlgebraExpr, ST_Clip, ST_AsText