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

您可以访问Geomval结果集的几何图形和值部分,方法是用圆括号将它们括起来,并在表达式末尾添加‘.geom’或‘.val’。例如(ST_Interval(Rast,geom)).geom

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

生成的栅格范围对应于两个栅格范围的几何交点。生成的栅格包括‘BAND1’、‘BAND2’或‘BAND2’波段,后面是作为 returnband 参数。任何波段中存在的无数据值区都会导致结果的每个波段中都没有数据值区。换句话说,任何与无数据值像素相交的像素都将成为结果中的无数据值像素。

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

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

[Note]

要更好地控制结果范围或遇到nodata值时返回的内容,请使用的两个栅格版本 ST_MapAlgebraExpr

[Note]

要计算栅格空间中的栅格波段与几何的交集,请使用 ST_Clip 。ST_CLIP适用于多个标注栏栅格,不返回与栅格化几何图形对应的标注栏。

[Note]

ST_INTERSION应与配合使用 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
                    

另请参阅

Geomval, ST_Intersects, ST_MapAlgebraExpr, ST_Clip, ST_AsText