名稱

ST_Intersection — 傳回一個網格或一組幾何-像素值對,表示兩個網格的共享部分,或是網格向量化與幾何圖形的幾何交集。

概要

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);

描述

傳回一個網格或一組幾何-像素值對,表示兩個網格的共享部分,或是網格向量化與幾何圖形的幾何交集。

前三個變體,傳回 setof geomval,在向量空間中運作。首先將網格向量化(使用 ST_DumpAsPolygons)成一組 geomval 列,然後使用 ST_Intersection (geometry, geometry) PostGIS 函數將這些列與幾何圖形相交。僅與網格的 nodata 值區域相交的幾何圖形會傳回空的幾何圖形。它們通常會透過在 WHERE 子句中正確使用 ST_Intersects 而從結果中排除。

您可以透過將它們括在括號中,並在表達式末尾加上 '.geom' 或 '.val' 來存取產生的 geomval 集合的幾何圖形和值部分。例如:(ST_Intersection(rast, geom)).geom

其他變體,傳回網格,在網格空間中運作。它們使用 ST_MapAlgebraExpr 的兩個網格版本來執行交集。

產生的網格範圍對應於兩個網格範圍的幾何交集。產生的網格包含 'BAND1'、'BAND2' 或 'BOTH' 波段,這取決於傳遞的 returnband 參數。任何波段中存在的 nodata 值區域都會導致結果的每個波段中都出現 nodata 值區域。換句話說,任何與 nodata 值像素相交的像素在結果中都會變成 nodata 值像素。

從 ST_Intersection 產生的網格必須為未相交的區域指定 nodata 值。您可以透過提供一個 nodataval[] 陣列來定義或取代任何產生的波段的 nodata 值,該陣列包含一個或兩個 nodata 值,具體取決於您是否要求 'BAND1'、'BAND2' 或 'BOTH' 波段。陣列中的第一個值會取代第一個波段中的 nodata 值,而第二個值會取代第二個波段中的 nodata 值。如果一個輸入波段未定義 nodata 值,並且沒有提供任何陣列,則會使用 ST_MinPossibleValue 函數選擇一個值。所有接受 nodata 值陣列的變體也可以接受單個值,該值將被指派給每個請求的波段。

在所有變體中,如果未指定波段編號,則假設為波段 1。如果您需要網格與幾何圖形之間的交集,並且傳回網格,請參閱 ST_Clip

[Note]

若要更精確地控制產生的範圍或遇到 nodata 值時要傳回的內容,請使用 ST_MapAlgebraExpr 的兩個網格版本。

[Note]

若要計算網格波段與網格空間中的幾何圖形的交集,請使用 ST_Clip。ST_Clip 適用於多波段網格,並且不會傳回與網格化幾何圖形對應的波段。

[Note]

ST_Intersection 應與 ST_Intersects 以及網格欄位和/或幾何欄位的索引結合使用。

增強功能: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