名前

ST_Intersection — 2つのラスタの共有部分またはベクタ化したラスタとジオメトリとのインタセクションを表現する、ラスタまたはジオメトリとピクセル値のペアの集合を返します。

概要

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_num, geometry geom);

raster ST_Intersection(raster rast1, raster rast2, double precision[] nodataval);

raster ST_Intersection(raster rast1, raster rast2, text returnband='BOTH', double precision[] nodataval=NULL);

raster ST_Intersection(raster rast1, integer band_num1, raster rast2, integer band_num2, double precision[] nodataval);

raster ST_Intersection(raster rast1, integer band_num1, raster rast2, integer band_num2, text returnband='BOTH', double precision[] nodataval=NULL);

説明

2つのラスタの共有部分またはベクタ化したラスタとジオメトリとのインタセクションを表現する、ラスタまたはジオメトリとピクセル値のペアの集合を返します。

前半の3形式は、setof geomvalを返すもので、ベクタ形状を引数に取ります。ラスタは初めにgeomval行の集合にベクトル化されます(ST_DumpAsPolygonを使用)。これらの行はPostGIS関数のST_Intersection(geometry, geometry)を使ってジオメトリとインタセクトさせます。NODATA値の領域とだけインタセクトするジオメトリについては空ジオメトリを返します。通常はWHERE節でST_Intersectsを使って結果から確実に排除します。

丸括弧でくくって式の末尾に'.geom'や'.val'をつけることにより、geomvalの結果集合のジオメトリや値の部分にアクセスすることができます。たとえば(ST_Intersection(rast, geom)).geom等とします。

他の形式は、ラスタを引数に取り、ラスタを返します。ST_MapAlgebraExprの2ラスタ版を使って、インタセクトしている部分を取得します。

結果ラスタの範囲は、2つのラスタの範囲についてインタセクトしている部分です。結果ラスタは、returnband引数として渡されたものにあわせられた'BAND1','BAND2','BOTH'バンドを含みます。どのバンドでもNODATA値の領域は、結果ラスタの全てのバンドのNODATA値領域に現れます。言い換えると、あらゆるNODATA値ピクセルとインタセクトしているピクセルは、結果ラスタではNODATA値ピクセルになります。

インタセクトしなかった領域に値を入れるために、ST_Intersectionからの結果ラスタは、NODATA値を持たなければなりません。 結果ラスタのどのバンドにも、1つか2つのNODATA値を持つnodataval[]配列を与えることでNODATA値を定義したり置き換えたりできます。この配列は、引数で与えた'BAND1','BAND2','BOTH'バンドに依存します。 配列のひとつめの値は、ひとつめのバンドのNODATA値を入れ替えるものです。ふたつめの値はふたつめのバンドのNODATA値を入れ替えるののです。入力バンドの1つがNODATA値を持っておらず、かつ配列を渡さなかった場合には、ST_MinPossibleValue関数を使ってNODATA値が選ばれます。NODATA値の配列を受け付ける形式の全てが、単一値を受け付けます。単一値は結果ラスタのそれぞれのバンドに適用されます。

全ての形式で、バンド番号がない場合には、1番バンドを仮定します。

[注記]

NODATA値に遭遇した時の、結果範囲や返された物に関して、より多くの制御を行いたい場合には、ST_MapAlgebraExprの2ラスタ版を使います。

[注記]

ラスタバンドとジオメトリとがインタセクトする部分を計算するには、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

例: ラスタ,ジオメトリ-- ラスタを得ます

近日公開

関連情報

geomval, ST_Intersects, ST_MapAlgebraExpr, ST_Clip, ST_AsText