名称

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(几何图形、几何图形)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 值。您可以通过提供一个或两个 NoData 值的 nodataval[] 数组来定义或替换任何结果波段的 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
                    

另请参阅

geomvalST_IntersectsST_MapAlgebraExprST_ClipST_AsText