第五章 空间查询_第1页
第五章 空间查询_第2页
第五章 空间查询_第3页
第五章 空间查询_第4页
第五章 空间查询_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五章第五章 空间数据查询空间数据查询建立空间数据建立空间数据图层划分图层划分扫描矢量化扫描矢量化地图编辑地图编辑空间数据查询空间数据查询空间数据分析空间数据分析专题制图专题制图空间数据应用空间数据应用空间数据查询的定义空间数据查询的定义 空间数据查询一般定义为:空间数据查询一般定义为:作用在作用在GISGIS数据上的函数,返回满足条件的内容。数据上的函数,返回满足条件的内容。空间数据查询是空间数据查询是GISGIS的一个基本功能。的一个基本功能。 空间数据查询的内容空间数据查询的内容两种基本查询两种基本查询: 通过属性查图形 通过图形查属性 在在GISGIS分析中,常常需要分析中,常常需要综

2、合运用综合运用实体之间的实体之间的空间关系和属性数据空间关系和属性数据,要求要求GISGIS数据库能对实体的属性数据和空间数据进行综合管理。数据库能对实体的属性数据和空间数据进行综合管理。找找离火车站离火车站最近最近的汽车的汽车站?站?空间空间数据库数据库属性为火属性为火车站的点车站的点所有属性为所有属性为汽车站的点汽车站的点空空间间 计计算算距离最近距离最近的汽车站的汽车站检索检索检索检索GIS分析分析查询方式 选择查询 通过空间对象查询属性 通过属性查询空间对象 空间定位 综合查询 利用空间信息和属性信息进行查询通过空间对象查询属性 选择空间对象 方式 点击 矩形 圆形 区域 范围结构化查

3、询语言(结构化查询语言(SQL)介绍)介绍结构化查询语言(结构化查询语言(SQL)SQL是为数据库查询的设计和执行而专门设计是为数据库查询的设计和执行而专门设计的一种标准化语言的一种标准化语言。像其它的 程 序 语 言 (像其它的 程 序 语 言 (C,FORTRAN)一样,它独立于运行于其上的数)一样,它独立于运行于其上的数据库。据库。SQL可以应用于任何支持它的数据库。可可以应用于任何支持它的数据库。可以进行独立的、分散的数据库的连接。以进行独立的、分散的数据库的连接。SQL使用使用者不需要特别注意他人所使用的数据库软件包,者不需要特别注意他人所使用的数据库软件包,因为因为SQL提供了数据

4、库查询的标准方法。提供了数据库查询的标准方法。结构化查询语言(结构化查询语言(SQL)介绍)介绍SQL系统包括三个不同的组成部分:系统包括三个不同的组成部分:数据定义语言(数据定义语言(DDL)数据操作语言(数据操作语言(DML)数据控制语言(数据控制语言(DCL)DDL用于定义数据库的内容用于定义数据库的内容属性名称属性名称、 类 型 、 储 存 特 点 。 描 述 性 信 息 (、 类 型 、 储 存 特 点 。 描 述 性 信 息 (metadata)也在此建立。)也在此建立。DML用于数据库查询用于数据库查询输入、编辑、分输入、编辑、分析、输出。析、输出。DCL用于控制数据库的进入。用

5、于控制数据库的进入。1)SQL组成组成关系数据库的连接和查询SQL查询的基础句法是:查询的基础句法是:SELECT数据字段数据字段FROM表格表格WHERE字段字段Expression值值例如:例如:SELECT soil_type, soil_nameFROM soils.dat, WHERE soil_name eq “Sandy Loam”2 )SQL数据库查询的句法数据库查询的句法关系数据库的连接和查询表1-Land Parcel Records PARCEL.DATParcel_No Owner Value Use34651 D. Smith 15000 Resi

6、dential34652 C. Lawrence 22500 Industrial34653 D. Lewsley 32600 Agricultural34654 S. Bishop 24300 Residential34655 C. Lawrence 88500 Commercial 1 )关系数据库和关系数据库和SQL进行数据库查询的一个例子进行数据库查询的一个例子 关系数据库的连接和查询 如果现在想选择所有满足下列要求的土地:属于如果现在想选择所有满足下列要求的土地:属于C. Lawrence,价值大于,价值大于30000,土地利用类型为非居住,土地利用类型为非居住用地,查询过程如下:用

7、地,查询过程如下:SELECT OWNER, VALUE,USEFROM PARCELDATWHERE OWNER eq C. Lawrence AND VALUE gt 30000 AND NOT LAND USE =RESIDENTIAL或者或者WHERE OWNER = C. Lawrence AND VALUE 30000 AND NOT LAND USE NE RESIDENTIAL1 )关系数据库和关系数据库和SQL进行数据库查询的一个例子进行数据库查询的一个例子 关系数据库的连接和查询 表2-Site Information SITE.DATParcel_No Address A

8、rea No_of Properties34651 George St. 1540 1234652 Adam St. 2200 0334653 Henry St. 9500 0134654 Park Ave. 0950 0334655 Station Rd. 1450 10. . 2 )关系数据库和关系数据库和SQL进行数据库查询的一个例子进行数据库查询的一个例子 关系数据库的连接和查询如果我们现在想选择所有满足下列要求的土地:如果我们现在想选择所有满足下列要求的土地:价值大于价值大于25000,其上有,其上有5个或多于个或多于5个房产,查询个房产,查询过程如下:过程如下:SELECT VAL

9、UE, NO_OF_PROPERTIESFROM PARCEL.DAT, SITE.DATWHERE VALUE gt 25000 OR NO_OF_PROPERTIES=52 )关系数据库和关系数据库和SQL进行数据库查询的一个例子进行数据库查询的一个例子 关系数据库的连接和查询查询的结果将会以一个新的表格的形式显示出来。查询的结果将会以一个新的表格的形式显示出来。Parcel_No VALUE NO_OF_PROPERTIES34675 25000 2034653 32600 0134655 88500 10 . . 2 )关系数据库和关系数据库和SQL进行数据库查询的一个例子进行数据库查

10、询的一个例子 5.1 对象查询 对象 点对象:维数为零的物体。 线对象:表示对象和它们边界的空间属性,由一维表示。 多边型对象:数据库中由一封闭曲线加内点来表示。5.1 对象查询 对象查询 使图层可编辑,选择对象,通过菜单“窗口”-“新建浏览窗口”或者单击工具栏上的新建浏览窗口,再选择Selection,单击确定。 5.1 对象查询5.2SQL查询 通过“选择”来查询5.2SQL查询 从表中选择记录 使用下拉列表来选择要使用的表。 满足条件 在”满足条件”输入表达式,或单击“辅助”。5.2SQL查询 存结果于表 若用户选择Selection,MapInfo把表命名为 Query1,Query2

11、等。 结果排序按列 可以通过选择来指定一种排序。默认不排序。 浏览结果 默认选中。取消选中,该表是“存结果于表”中指定的表。 保存模板 可以将对话框设置另存为查询模板 载入模板 载入模板可以加载已保存的查询模板 单击确定执行查询 5.2SQL查询 通过“选择SQL”查询5.2SQL查询 选择列 默认是*,结果表示包含表中的每一列。若用户只要表中的某几列,可用逗号分隔的列名清单来代替“*”。 从表 指要查询的表。输入两个或多个表,则必须在“条件”域中设定一个合适的表达式。执行多表连接,所有表必须是基础表。 条件 输入查询表达式,若需要也可以输入过滤规则,例:Population5000000 按

12、列分组 对结果表进行分类汇总。 按列排序 默认按升序排,为了按照降序排,可以在列名之后输入“desc”。5.2SQL查询 结果放入表 允许设定结果表的名称。使每次使用Selection作为结果表名产生的Queryn都用设定表的名称代替。 浏览结果 选中,MapInfo将在浏览窗口中显示查询结果。 使用下拉列表 “表”,“列”,“运算符”,“聚合”和“函数”。 保存模板 载入模板 可以加载已保存过的查询模板。5.2SQL查询 “SQL选择”的操作 执行“查询”-”SQL选择”,从右侧的下拉列表框中选择需要的表,再将光标停在“选择列”文本框,选择所需字段。最后单击“检验”。 5.2SQL查询 此系

13、统默认的结果为Query1,必须通过“表”-”转出”,将其转换为*.mif格式,最后通过“表”-”转入”命令将其还原为*.tab的格式,结果将单独显示出来。5.2SQL查询 “选择列选择列”字段字段 1.计算派生列计算派生列 派生列是一个特殊的临时列,它是由已有的一个或多个列计算产生的值。例如:表中有两个字段Purchases 92和Purchases 93(表示每个客户1992年和1993年的购货量)。要获取总购货量列。可以通过这样的形式产生一个派生列: Purchases 92+Purchases 93。 要指定一个派生列,可以在“选择列”域中输入一个表达式。(由列名,运算符,函数组成)

14、步骤如下步骤如下:单击“选择列”域从“选择列”域中删除“ * ”输入表达式可以给表达式起个别名多个列名或派生列表达式应用逗号分隔开。 5.2SQL查询2.选择显示结果表中的列 输入一系列列名的操作如下: 1)在“从表”域中输入表名。 2)单击“选择列”,该域中出现插入符。 3)如果有”*”,先删除。“选择列”域中含有一个“*”或者一系列列名。 4)在对话框右侧的“列”下拉列表中选择一个列名。 5)如希望查询中包含多个列,可以在“列”下拉列表中选择其它列名。 5.2SQL查询3.使用“SQL选择”对话框的“选择列”字段 若想结果表中含有与原始表相同的集,在“选择列”域中输入“*”。 若想结果表中

15、含有的集与原始表不同,删除“*”,并输入“,”分隔一系列列名或表达式. 若涉及多个表,每个列名前必须加上表名,用句号分开表名和列名.5.2SQL查询 “条件”字段 1.按行序连接表 若两个表没有公共列,可以按照记录的顺 序进行表连接 。 例如,条件:table_1.RowID= table_2.RowID 2.按地理表关系连接表 若两个表有图形对象,可以根据这些对象的空 间关系来连接表. 地理运算符允许根据某些对象与其他对象的空间关系来选中它们.”运算符”. 主要的运算符有:Contains,Contains Entire,Within, Entirely Within,Intersects5

16、.2SQL查询5.2SQL查询 若表中没有能够进行连接的列,可以使用地理运算符来指定连接(在”条件”域中),例如 ,涉及Cities表和States表的查询可以使用这样的表达式连接:Cities.obj within States.obj或者Cities.obj Contain States.obj。 总之,小对象是Within大对象,大对象Contain小对象。5.2SQL查询 3.连接两个或多个表 “SQL选择”允许创建关系型连接,从而将来自不同表的信息汇集到单个结果表中。例如,一个是带有人口统计信息的“县表”,也有一个顾客订单数据库,现在想根据订单和人口统计特征的组合选择一些县。为此必须

17、进行表连接。 5.2SQL查询5.2SQL查询 在:“SQL选择”对话框中,可使用“条件 域来告诉连接这两个表。SQL选择对话框可能如下: 选择列:* 从表:Counties,Orders 条件:Counties.CountyName=Orders.County 表名顺序(“从表”域中)很重要,进一步讲,当查询完成,自动从”从表”域的第一个表中选择部分或全部记录,结果表也包括从订单表复制来的数据,但本质上讲不从订单表选择记录。5.2SQL查询 连接两个表时,结果表中记录取决于两个表的匹配情况。假设订单表有10000条记录,它与州表(有50条记录)相连接。结果可能包括10000条记录,若订单表中

18、有些记录与州表中的记录无法匹配,结果表中记录将少于10000。有400条不匹配,结果表就只有9600条。 当用另一个表的信息来更新某个表中的一列时,可以进行如下操作: 1)用“SQL选择”连接表 2)对Selection使用“更新列”,更新将自动对适当的基础表生效。5.2SQL查询4.执行子表选择 MapInfo允许SQL选择中有子选择。子选择是被放在“SQL选择”对话框中的“条件”域内的选择语句。 例如,选择人口大于1990年全美范围的平均人口的所有州,应该是Pop_1990平均州人口,但是不知道平均值是多少,可使用聚合表达式计算,Avg(Pop_1990),SQL选择对话框可以这样填: 选

19、择列:* 从表:States 条件:Pop_1990(Select Avg(Pop_1990)From States) 例如:选择states中超过4000000人的 所有城市 选择列:* 从表:cities 条件:obj within any (select obj from states where Pop_19904000000) 5.2SQL查询 5.设置过滤规则 过滤条件是常用于比较列值与其他值得逻辑表达式。例如,使用大于运算符:“”来检查Order_Amount100 条件:Order_Amount100 如果“条件”子域包含两个或多个逻辑表达式,且是用and连接的,那么MapIn

20、fo将选择满足这些所有表达式的行;如果是用or连接的,只将出现满足其中任一条件的行。5.2SQL查询 6.使用“SQL选择”对话框的“条件”字段 在某些情况下,可使用条件域来指定关系连接,从而查询能包括两个或多个表中的列。但是要注意的是:不能在“条件”域中使用聚合函数。5.2SQL查询 5.2.7”按列排序”字段 1.默认下,MapInfo是按照升序排列的,想按降序排列,需在“按列排序”域中将desc放在列名字前。 例如,对State列进行升序排列,对Population进行降序排列 选择列:* 从表:City_1K 按列排序: State, Population desc5.2SQL查询 2

21、.使用“按列排序”字段排序结果表 在“SQL选择”对话框中使用“按列排序” 域,可将结果表的记录排序。 例如:按照State列对City_1K表排序 选择列:* 从表:City_1K 按列排序:State, City 若“按列排序”域内含有两个或多个列名,MapInfo 执行多级排序。 5.2SQL查询 5.2.8“按列分组”字段 1.按列分组示例 例,设想有一个顾客订单表。该表每一行表示单个订单。表中以列包含订货销售代理的名字,另一列含有顾客名字,还有一列包含定货量。 要求找出:1)该代理的订单数目 2)该代理的平均订货量 3)该代理的总定货量5.2SQL查询 选择列: Sales_Rep,count(*),average(AMOUNT), sum (AMOUNT) 从表:Ord

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论