目前大多数成熟的商品化地理信息系统软件的查询功能都可完美地实现对空间实体的简单查找, 如根据鼠标所指的空间位置,系统可查找出该位置的空间实体和空间范围(由若干个空间实体组成)以及它们的属性, 并显示出该空间对象的属性列表,并可以进行有关统计分析。 该查询工作可分为两步:首先借助于空间索引,在空间数据库中快速检索出被选空间实体; 然后,根据空间数据和属性数据的连接即可得到该空间实体的属性列表。 一般来说,基于属性信息的查询操作主要是在属性数据库中完成的。 目前大多数的地理信息系统软件都将属性信息存储在关系数据库中, 而发展成熟的关系数据库又为我们提供了完备的数据索引方法及信息查询手段。 几乎所有的关系数据库管理系统都支持标准的结构化查询语言。 利用SQL,我们可以在属性数据库中很方便地实现属性信息的复合条件查询,筛选出满足条件的空间实体的标识值, 再到空间数据库中根据标识值检索到该空间实体。 空间实体间有着许多空间关系(包括拓扑、顺序、度量等关系)。 在实际应用过程中,用户往往希望地理信息系统提供一些更能直接计算空间实体关系的功能, 如用户希望查询出满足如下条件的城市: A在某条铁路的东部; B距离该铁路不超过30公里; C城市人口大于70万; D城市选择区域是特定的多边形。 整个查询计算涉及了空间顺序关系(铁路东部)、 空间距离关系(距离该铁路不超过30公里)、 空间拓扑关系(被选城市在特定的选择区域之内)、 属性信息查询(城市人口大于70万)。 就目前成熟的地理信息系统而言,比较系统地完成上述查询任务还较为困难。 为此, 众多的地理信息系统专家提出了“空间查询语言”(SpatialQuery Language)以作为解决问题的方案, 但仍处于理论发展和技术探索阶段。 查询、检索是地理信息系统中使用最频繁的功能之一,GIS用户提出的大部分问题都可以表达为查询形式, 即空间查询语言不仅可以使GIS用户方便地访问、查询和处理空间数据, 也可以实现空间数据的安全性和完整性控制。 相对于一般SQL,空间扩展SQL主要增加了空间数据类型和空间操作算子,以满足空间特征的查询。 空间特征包含空间属性和非空间属性,空间属性由特定的“Location”字段来表示。 空间数据类型除具有一般的整型、实型、字符串外,还具有下列空间数据类型: 点类型、弧段类型、不封闭的线类型、(Polygon)多边形类型、图像类型、复杂空间特征类型。 以上类型是针对“位置”字段而言的。 GeoSQL中的空间操作算子是指带有参数的函数。 通常它以空间特征为参数,返回空间特征或数值。 空间操作算子主要分为两类:一元空间操作算子和二元空间操作算子。 通常,标准SQL的一般形式为: 图 7.23 GeoSQL的实现过程 # 7.6.1. 基于属性特征查询 #
7.6.2. 基于空间关系和属性特征的查询(SQL) #
7.6.3. 一种空间扩展SQL查询语言——GeoSQL #
SELECT…FROM…WHERE
,分别对应关系操作投影、笛卡尔积和选择, 其中,FROM语句代表所给关系的笛卡尔积,也就是定义了一个单独的关系。 WHERE语句中的选择和SELECT语句中的投影均作用于该关系上。 尽管GeoSQL属于非过程化文本语言,但为使操作简单方便,它仍可以借鉴可视化查询语言的特点, 即使用图符、列表框等组件来尽量减少用户的文本输入, 同时也可防止输入时由于误记、语义误解等产生的语法错误。 GeoSQL的实现过程如图7-23所示。