ST_Contains は 2 つの図形オブジェクトを引き数とし、最初のオブジェクトが 2 番目のオブジェクトを完全に含んでいる場合に 1 (TRUE) を戻します。そうでなければ 0 (FALSE) を戻します。
構文
db2gse.ST_Contains(g1 db2gse.ST_Geometry, g2 db2gse.ST_Geometry)
戻りタイプ
整数
例
以下の例では、2 つの表が作成されます。 1 つの表には都市内の建物のフットプリントが含まれ、もう 1 つの表にはその建物の敷地が含まれています。都市計画担当者が、すべての建物のフットプリントが完全に敷地内に収まっていることを確かめたいとします。
どちらの表でも、複数ポリゴンのデータ・タイプに建物のフットプリントの図形と敷地の図形が格納されています。データベース設計者は、両方について複数ポリゴンを選択しました。これは、河川のような地形によって敷地が分断されている場合があることと、建物のフットプリントが複数の建物から構成されている場合があることに気付いたためです。
CREATE TABLE BUILDINGFOOTPRINTS (building_id integer, lot_id integer, footprint db2gse.ST_MultiPolygon); CREATE TABLE LOTS (lot_id integer, lot db2gse.ST_MultiPolygon);
都市計画の担当者は、1 つの敷地に完全には収まっていない建物を最初に選びます。
SELECT building_id FROM BUILDINGFOOTPRINTS, LOTS WHERE db2gse.ST_Contains(lot,footprint) = 0;
都市計画の担当者は、最初の照会によって、敷地ポリゴンの外側にフットプリントのあるすべての建物識別コードのリストが戻されることを理解しています。しかし、この情報からは、ほかの建物に正しい敷地識別コードが割り当てられているかどうかが分からないことも理解しています。以下に示す 2 番目の照会は、 BUILDINGFOOTPRINTS 表の lot_id 列に対して、データ保全性の検査を実行します。
SELECT bf.building_id "building id", bf.lot_id "buildings lot_id", LOTS.lot_id "LOTS lot_id" FROM BUILDINGFOOTPRINTS bf, LOTS WHERE db2gse.ST_Contains(lot,footprint) = 1 AND LOTS.lot_id <> bf.lot_id;
図 30 では、建物 ID の付いた建物のフットプリントが、敷地内に収まっています。敷地の境界線は、点線で示されています。ここには示されていませんが、これらの線は道路の中心線にまで伸びており、敷地とその中のフットプリントを完全に囲んでいます。
図 30. ST_Contains を使用して、すべての建物がその敷地内に収まっていることを確認する