名称

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 函数与几何图形相交。仅与栅格的无数据值区域相交的几何图形返回一个空几何图形。通过在 WHERE 子句中正确使用 ST_Intersects,它们通常会从结果中排除。

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

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

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

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

在所有变体中,如果未指定波段号,则假定为波段 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