ST_Contains 接受两个几何图形对象,若第一个对象完全包含第二个对象,则返回 1 (TRUE);否则,它返回 0 (FALSE)。
语法
db2gse.ST_Contains(g1 db2gse.ST_Geometry, g2 db2gse.ST_Geometry)
返回类型
整数
示例
在下面的示例中创建两个表。一个表包含城市的建筑物占地形状, 另一个表包含该城市的地块。城市工程师想要确保所有建筑物占地形状完全在它们的地块内。
在两个表中,复合多边形数据类型存储建筑物占地形状和地块的几何图形。 数据库设计者为两个地形选择了复合多边形。 设计者认识到地块可能被自然地形(比如江河)分开, 建筑物占地形状可能经常由几个建筑物组成。
CREATE TABLE BUILDINGFOOTPRINTS ( building_id integer, lot_id integer, footprint db2gse.ST_MultiPolygon); CREATE TABLE LOTS ( lot_id integer, lot db2gse.ST_MultiPolygon );
城市工程师首先选择不完全包含在一个地块内的建筑物。
SELECT building_id FROM BUILDINGFOOTPRINTS, LOTS WHERE db2gse.ST_Contains(lot,footprint) = 0;
城市工程师认识到第一次查询将返回占地形状在地块多边形之外的所有建筑物 ID 的列表。但城市规划工程师也知道此信息不能表明是否给其他建筑物指定了正确的地块 ID。 第二次查询对 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 确保所有建筑物包含在它们的地块内
![]() |