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_DumpAsPolygons)为一组 geomval 行,然后使用 ST_Intersection (geometry, Geometry) PostGIS 函数将这些行与几何相交。 仅与栅格的无数据值区域相交的几何将返回空几何。 通常通过在 WHERE 子句中正确使用 ST_Intersects将它们从结果中排除。

您可以通过用括号将它们括起来并在表达式末尾添加“.geom”或“.val”来访问几何图形和生成的 geomval 集的值部分。 例如 (ST_Intersection(rast, geom)).geom

其他变体返回光栅,在光栅空间中工作。 他们使用 ST_MapAlgebraExpr 的两个栅格版本来执行交集。

生成的栅格范围对应于两个栅格范围的几何交集。 生成的栅格包含“BAND1”、“BAND2”或“BOTH”波段,遵循作为 returnband 参数传递的内容。 任何波段中存在的无数据值区域都会导致结果的每个波段中出现无数据值区域。 换句话说,与无数据值像素相交的任何像素都成为结果中的无数据值像素。

由 ST_Intersection 生成的栅格必须为不相交的区域分配 nodata 值。 您可以通过提供一个包含一个或两个 nodata 值的 nodataval[] 数组来定义或替换任何结果频段的 nodata 值,具体取决于您是否请求“BAND1”、“BAND2”或“BOTH”频段。 数组中的第一个值替换第一个带中的无数据值,第二个值替换第二个带中的无数据值。 如果一个输入带没有定义 nodata 值并且没有以数组形式提供,则使用 ST_MinPossibleValue 函数选择一个。 所有接受 nodata 值数组的变体也可以接受单个值,该值将分配给每个请求的带。

在所有变体中,如果未指定波段编号,则假定波段 1。 如果您需要栅格和返回栅格的几何图形之间的交集,请参阅 ST_Clip

[Note]

要更好地控制结果范围或遇到无数据值时返回的内容,请使用 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