空间运算
空间运算利用几何函数来接收输入的空间数据,对其进行分析,然后生成输出数据,输出数据为针对输入数据执行分析的派生结果。
可从空间运算中获得的派生数据包括:
- 作为输入要素周围缓冲区的面
作为对几何集合执行分析的结果的单个要素
- 作为比较结果以确定不与其他要素位于同一物理空间的要素部分的单个要素
- 作为比较结果以查找与其他要素的物理空间相交的要素部分的单个要素
- 由彼此不位于同一物理空间的输入要素部分组成的多部分 (multipart) 要素
- 作为两个几何的并集的要素
针对输入数据执行的分析返回所生成几何形状的坐标或文本表示形式。可将该信息作为执行进一步分析而作的范围更大查询的一部分,也可将其作为另一表的输入数据。
例如,可以在相交查询中的 WHERE 子句内包含一缓冲运算,来决定指定的几何形状是否与另一几何形状周围的特定大小区域相交。
以下示例使用了 ST_Geometry 函数。对于用于其他数据库和空间数据类型的特定几何函数和语法,请阅读该数据库或数据类型的相关文档。
在本例中,将为 1000 英尺内的所有地产所有人发送街道封锁的通知。WHERE 子句在将要封锁的街道周围生成 1000 英尺的缓冲区。然后会将缓冲区与该区域内的地产进行对比,以确定与缓冲区相交的地产。
SELECT p.owner,p.address,s.stname FROM parcels p, streets s WHERE s.stname = 'Main' AND sde.st_intersects (p.shape, sde.st_buffer (s.shape, 1000)) = 't';
在本例中,WHERE 子句选择了一条特定的街道 (Main),而后在该街道周围创建了一个缓冲区,并将其与宗地表中的要素进行对比,进而确定两者是否相交。* 对于 Main 街道中所有与缓冲区相交的宗地,都将返回宗地所有者姓名和地址。
* WHERE 子句部分执行的顺序取决于数据库优化器。
以下示例将获取在包含居住区和学校区的表上执行的空间运算(联合)的结果,并将该运算生成的要素插入另一表中:
INSERT INTO combo c (shape) VALUES ( (SELECT sde.st_union (n.shape,d.shape) FROM neighborhoods n, school_districts d),5);
有关使用带有 ST_Geometry 的空间运算符的详细信息,请参阅ST_Geometry 的空间运算函数。有关在 IBM DB2、IBM Informix、Oracle Spatial、PostGIS 或 Microsoft SQL Server 空间类型中使用空间运算符的详细信息,请参阅这些数据库管理系统的相关文档。