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