本节讨论如何构建利用 Spatial 函数和谓词的 Spatial 查询。
DB2 Spatial Extender 包括对 Spatial 数据执行各种操作的函数。 本节中的示例显示如何使用 Spatial 函数来构建您自己的 Spatial 查询。
表 3提供了 Spatial 函数列表和他们能执行的操作类型。
函数类型 | 操作示例 |
---|---|
计算 | 计算两点间的距离 |
比较 | 查找洪泛区内的所有客户 |
数据交换 | 把数据转换为受支持的格式 |
转换 | 将 5 英里的半径添加到一个点中 |
有关 Spatial 函数的更多信息,参见几何图形和相关的 Spatial 函数和用于 SQL 查询的 Spatial 函数。
下列查询查找客户与每个百货商店的平均距离。 在此示例中使用的 Spatial 函数为:ST_Distance 和 ST_Within。
SELECT s.id, AVG(db2gse.ST_Distance(c.location,s.location)) FROM customers c, stores s WHERE db2gse.ST_Within(c.location,s.zone)=1 GROUP BY s.id
下列查询查找那些驻住在圣弗朗西斯科海湾区的客户位置。 此示例中使用的 Spatial 函数为:ST_AsText(数据交换)和 ST_Within。ST_AsText 将 c.location 列中的 Spatial 数据转换成 OGC TEXT 格式。
SELECT db2gse.ST_AsText(c.location,cordref(1)) FROM customers c WHERE db2gse.ST_Within(c.location,:BayArea)=1
下列查询查找长度超过 10.5 英里的所有街道。在此示例中所使用的 Spatial 函数为:ST_Length。
SELECT s.name,s.id FROM street s WHERE db2gse.ST_Length(s.path) > 10.5
此查询查找驻住在洪泛区或距其边界 2 英里内的客户。 在此示例中所使用的 Spatial 函数为: ST_Buffer(转换)和 ST_Within。
SELECT c.name,c.phoneNo,c.address FROM customers c WHERE db2gse.ST_Within(c.location,ST_Buffer(:floodzone,2))=1