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 函數將這些列與幾何圖形相交。僅與網格的 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 值。您可以透過提供一個 nodataval[]
陣列來定義或取代任何產生的波段的 nodata 值,該陣列包含一個或兩個 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