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。
要对结果范围或在遇到 NoData 值时返回的内容进行更多控制,请使用 ST_MapAlgebraExpr 的两个栅格版本。 |
要计算栅格波段与栅格空间中几何的交集,请使用 ST_Clip。ST_Clip 适用于多波段栅格,并且不会返回与栅格化几何相对应的波段。 |
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