彩票走势图

MapInfo教程:MapInfo Professional空间数据查询

原创|使用教程|编辑:龚雪|2014-05-29 09:13:17.000|阅读 2248 次

概述:本教程介绍了在MapInfo Professional中如何进行空间数据查询,涉及范围有对象查询、SQL查询、获取单个对象的信息、通过“更新列”对话框获取对象的信息。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

一、对象查询

1.对象

1)点对象:点是有特定的位置,维数为零的物体。

2)线对象:是GIS中非常常用的维度为一的空间组分,表示对象和它们边界的空间属性,由一系列坐标表示。

3)多边形对象:面状实体也称为多边形,是对湖泊、岛屿、地块等一类现象的描述。通常在数据库中由一封闭曲线加内点来表示。

2.对象属性查询

先选择要查询属性的对象,然后单击“新建浏览窗口”按钮,弹出“浏览表”对话框,再单击“确定”按钮,打开所选对象的属性数据浏览器窗口。

MapInfo教程:MapInfo Professional空间数据查询

选择好对象的窗口

MapInfo教程:MapInfo Professional空间数据查询

“浏览表”对话框

MapInfo教程:MapInfo Professional空间数据查询

查询结果浏览窗口

二、SQL查询

SQL(Structure Query Language)是结构化查询语言,是一套强大的查询系统。语言简单、指令简洁、操作简单、功能强大,被广泛运用在相互关联的数据库中,并能完成十分复杂的查询和选择。

1.通过“查询”菜单上的“选择…”命令来查询

MapInfo教程:MapInfo Professional空间数据查询

“选择”对话框

2.通过“查询”菜单上的“SQL选择”命令来查询

MapInfo教程:MapInfo Professional空间数据查询

“SQL选择”对话框

3.“SQL选择”的操作示例

例如:查询并显示出人口大于3000万的省份

MapInfo教程:MapInfo Professional空间数据查询

“SQL选择”对话框

MapInfo教程:MapInfo Professional空间数据查询

执行“SQL查询”后的地图窗口

地图窗口中符合条件的省区域对象被选择,所选择记录的表浏览器按人口升序排列。

MapInfo教程:MapInfo Professional空间数据查询

按升序排列的表浏览器窗口

4.SQL选择

① 打开希望查询的表(倘若尚未打开的话)。

② 选择“查询”→“SQL选择”。

③ 打开一个地图窗口或一个浏览窗口(若用户想看到查询结果)。

④ MapInfo自动选中结果表中所有行。

⑤ 若希望对查询表做一个永久拷贝,选择“文件”→“另存为”。

5.“选择列”字段

1)计算派生列

“SQL选择”可以计算派生列并将其保存在结果表中。

【例】显示一个进行加法运算的派生列表达式,它将两个数值型列相加。例中假设Purchase92和Purchase93都是数值型字段。

选择列:Purchase 92 + Purchase 93

2)选择显示在结果表中的列

结果表中只包括在“选择列”域中输入的一个或多个列。这一点在表中有许多列,而只希望使用其中少数列(可能是因为在屏幕上一次只能显示其中少数列)时很有用。

输入一系列列名:

① 在“从表”域中输入表名(若还未输入的话)。可以直接输入表名或是在“表”下拉式列表中选择表名。

② 单击“选择列”域,该域中出现插入符。

③ 如果该域中有星号,先用〈Backspace〉键或〈Delete〉键将其删除。“选择列”域中可以含有一个星号或者一系列列名。

④ 在对话框右侧的“列”下拉列表中选择一个列名。MapInfo将该列名复制到“选择列”域中。

⑤ 如果希望查询中包含多个列,可以在“列”下拉式列表中选择其它列名。在选择其它列名时,MapInfo自动插入逗号以分隔列名。

3)使用“SQL选择”对话框的“选择列”字段

使用“选择列”域来指定查询结果表中应该出现哪些列。若想结果表中含有与原始表相同的列集,在“选择列”域中输入一个星号(*)。

若想结果表中含有的列集与原始表不同,删除星号,并输入用逗号分隔的一系列列名或表达式,如下所述。“选择列”域可包含星号或一系列列表达式,但二者不可得兼。在填写“选择域”之前,请先填好“从表”域。

若查询涉及多个表,每个列名前必须加上表名,用句点分开表名和列名。这样,若你执行涉及两个表的查询,其中一个是“Canada”表,用户希望查询包括“Canada”表的“Population”列,则必须使用列表达式Canada.Population。无论何时使用两个或多个表,“列”下拉式列表会自动将表名插入到列名前。

6.“条件”字段

1)按行序连接表

若两个表没有公共列,还可以按照记录的顺序进行表连接。若知道一个表的第一条记录对应于另一个表的第一条记录,或更一般地说,一个表的第N条记录对应于另一个表的第N条记录,就可以通过引用一个特殊的名为RowID的列将两个表连接。

RowID列含有代表着表中每个记录的行号的整数。因此,任何表的第一条记录的RowID值为1,第二条记录的RowID值为2,依此类推。

要连接两个表使得MapInfo匹配两个表的第N条记录,指定一个如下形式的“条件”表达式。

条件: TABLE_1.RowID = TABLE_2.RowID

2)按地理关系连接表

若两个表有图形对象,MapInfo能根据那些对象之间的空间关系即地理运算符来连接表 。

Contains 对象A包含(Contains)对象B:B的中心在A的边界内任一点。

Contains Entire 对象A完全包含(Contains Entire)对象B:B的边界完全位于A的边界之内。

Within 对象A位于(Within)对象B之内:A的中心在B的边界之内。

Entirely Within 对象A完全位于(Entirely Within)对象B之内:对象A的边界完全位于B的边界之内。

Intersects 对象A与对象B相交(Intersects):它们至少有一个公共点,或一个对象完全位于另一个对象之内。

Contains和Within,与Contains Entire和Entirely Within的区别在于如何进行地理比较。对于Contains和Within,比较的是对象中心。对于Contains Entirely和Entirely Within,比较的是整个对象。

下图说明了此点:

MapInfo教程:MapInfo Professional空间数据查询

多边形地理位置关系

Object A contains object B

Object A contains object B

Object A contains Entire object B

Object B within object A

Object B within object A

Object B entirely Within object A 

Object A intersects object B

Object B intersects object A

3)连接两个或多个表

MapInfo能利用公共字段将两表连接。

4)执行子选择

MapInfo允许SQL选择中有子选择。子选择是被放在“SQL选择”对话框中的“条件”域内的选择语句。

【例】选择states中超过4,000,000人的所有城市。

选择列 *

从表 cities

条件 obj within any(select obj from states where Pop_1990 > 4000000)

5)设置过滤规则

过滤条件是常用于比较列值与其它值的逻辑表达式。例如,下面的过滤条件使用大于运算符(>)来检查Order_Amount列的值是否大于100。

“条件”:Order_Amount > 100

如果查询包括上述“条件”子句,MapInfo只选择Order_Amount值大于100的行。

如果表达式被词and或or隔开,“条件”子域可包含两个或多个逻辑表达式。如果表达式被词and连接,MapInfo只选择满足全部两个条件的行。如果表达式被词or连接,MapInfo选择满足任一条件的所有行。

7.“按列排序”字段

1)选择升序或降序排序

缺省情形下MapInfo按升序对表进行排序。要将字段按降序排以使大数字排在小数字前,可以在“按列排序”域中将desc放在列名字前。

【例】查询World表时,以下的Order By排序准则。按列排序:Population desc将该表按Population字段进行降序排序。

选择列:*

从表: City_1K

按列排序 State, Population desc

2)使用“按列排序”字段排序结果表

在“SQL选择”对话框中使用“按列排序”域,可将结果表的记录排序。排序影响在浏览窗口中记录从上而下出现的顺序。

【例】按照State列对City_1K表排序。

结果表按州名排序;但是,在California组内各行中,城市并未排序,San Francisco出现在Anaheim之上。要改正这一问题,可以在“按列排序”域中输入两个列名:

选择列: *

从表: City_1K

按列排序: State, City

8.“按列分组”字段

1)按列分组示例

【例】设想有一个顾客订单表。该表中每一行表示单个订单。表中一列包含订货销售代理的名字,另一列含有顾客名字,还有一列包含订货量。

对每个销售代理,可找出:

① 该代理的订单数目。

② 该代理的平均订货量。

③ 该代理的总订货量。

以下SQL选择查询产生所需结果:

选择列 Sales_Rep, count(*), average(AMOUNT), sum(AMOUNT)

从表 Orders

按列分组 Sales_Rep

2)使用“按列分组”字段分类汇总结果表

【例】若有一个顾客数据库,并按州名列分组,MapInfo会将所有得克萨斯州的顾客放入一组,所有加利福尼亚州的顾客放入另一组,等等。然后,MapInfo计算每一组的聚合信息(总计、平均等)。

指定分类汇总标准:

① 在“按列分组”域中,输入MapInfo用于计算分类汇总的列的列名或列号。

例如,若要按州总计顾客表,可输入表示顾客所在州的列的列名(如StateName)。

② 在“选择列”域中,输入同一列名(如StateName)。

③ 在“选择列”域中,输入一个或多个运算符(Sum、Count Avg、Min或Max)。请记住用逗号分隔开聚合运算符。

9.聚合函数

MapInfo提供以下聚合函数:

Count(*):计算一组中记录总数。它简单地使用*作参数,因为它应用到整条记录,而非某个特定字段。

Sum(表达式):计算一组中所有记录的〈表达式〉总计值。

Avg(表达式):计算一组中所有记录的〈表达式〉平均值。

Max(表达式):找出一组中所有记录的〈表达式〉最大值。

Min(表达式):找出一组中所有记录的〈表达式〉最小值。

三、获取单个对象的信息

使用“获取信息”可以显示地图或布局中的选中对象(可编辑或只读)的“区域对象”对话框。使用此对话框可以为对象设定地理属性。条件是地图窗口或布局被激活,且一个对象被选中。如果选中的对象可编辑(在可编辑图层内),那么可以通过访问该对象的属性对话框为该对象设定属性。对话框中的选项对于选中对象的类型是唯一的。如果对象不可编辑,那么只能访问只读对话框。

1.获取区域对象信息

使用“区域对象”对话框显示或设定区域位置、面积和周长、组成区域的线段数和多边形数。单位可通过“工具”菜单中的“选项…”命令按钮弹出的“地图选项对话框”中设置。如果该区域对象可编辑,还可以设置该区域对象的区域样式。

MapInfo教程:MapInfo Professional空间数据查询

可编辑“区域对象”对话框

2.获取折线对象信息

使用“折线对象”对话框显示或设定折线的位置、总长度、线段数目、部分及平滑性。如果该对象可编辑,还可以通过单击线样式按钮修改该折线对象的样式。

MapInfo教程:MapInfo Professional空间数据查询

不可编辑“折线对象”对话框

3.获取点对象信息

使用“点对象”对话框显示或设定点位置的X坐标和Y坐标。输入点的坐标按确定按钮后,该点对象定位在输入的坐标位置上,可以通过“查询”菜单中的“查找选中部分”命令将没有在本地图视图中显示改变到以该对象为中心的新地图视图中来。如果该对象可编辑,还可以通过单击符号样式按钮修改该符号的样式。

MapInfo教程:MapInfo Professional空间数据查询

可编辑“点对象”对话框

四、通过“更新列”对话框获取对象的信息

执行“表”菜单上的“更新列…”命令按钮,弹出“更新列”对话框。

MapInfo教程:MapInfo Professional空间数据查询

“更新列”对话框

1.获取表中图形对象信息

1)获取区域对象的面积:

首先修改表的数据结构,增加一个新的数值型字段,根据要求设置字段类型及小数位数,准备存放面积数据。设置面积使用的坐标类型,然后打开“更新列”对话框,选择要更新的表和要更新的列,在从中获得值的表中选择与要更新的表相同的表,单击“辅助”按钮,弹出“表达式”对话框,选择函数里的area()函数,修改面积单位后,按“确定”按钮,最后再单击“更新列”对话框中的“确定”按钮。表中的每个区域对象的面积值将在要更新的列中显示出来。

MapInfo教程:MapInfo Professional空间数据查询

“表达式”对话框

MapInfo教程:MapInfo Professional空间数据查询

设置好的“更新列”对话框

2)获取折线对象的长度:

首先修改表的数据结构,增加一个新的数值型字段,根据要求设置字段类型及小数位数,准备存放长度数据。设置长度使用的坐标类型,然后打开“更新列”对话框,选择要更新的表和要更新的列,在从中获得值的表中选择与要更新的表相同的表,单击“辅助”按钮,弹出“表达式”对话框,选择函数里的ObjectLen()函数,修改距离单位后,按“确定”按钮,最后再单击“更新列”对话框中的“确定”按钮。表中的每个折线对象的面长度值将在要更新的列中显示出来。

MapInfo教程:MapInfo Professional空间数据查询

“表达式”对话框

MapInfo教程:MapInfo Professional空间数据查询

设置好的“更新列”对话框

2.通过连接表获得属性信息

MapInfo教程:MapInfo Professional空间数据查询

要从另一表中获得该表的一些属性信息,两个表必须能建立连接关系,包括用两表中的列匹配和按两表中图形对象的地理关系连接两种,如下图所示:

MapInfo教程:MapInfo Professional空间数据查询

“指定连接”对话框

设置好连接方式后按“确定”按钮返回“更新列”对话框,如下图所示

MapInfo教程:MapInfo Professional空间数据查询

指定连接后的“更新列”对话框

选择计算的选项count(统计表中记录的个数)和数值两种,如选择了数值,则可选择“从中获得值的表”中的数值型字段或设置表达式,然后再单击确定按钮,即可将新的属性数据按照连接关系更新到“要更新的表”中的原有选择列或增加新的临时列中。

MapInfo Professional下载>>               MapInfo Professional视频教程>>


标签:GIS地图Mapinfo

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:慧都控件网

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP