http://www.gissky.net- GIS空间站

我要投稿 投稿指南 RSS订阅 网站资讯通告:
搜索: 您现在的位置: GIS空间站 >> 技术专栏 >> MapInfo >> 正文

MapX中的专题图分析

作者:未知    文章来源:GIS空间站    点击数:    更新时间:2006-6-28
摘要:MapInfo的一个显著特征就是能将数据库中的信息进行直观的可视化分析。专题地图就是用于分析和表现数据的一种强有力的方式。用户可以通过使用专题地图的方式将数据图形化,使数据以更直观的形式在地图上体现出来。当使用专题渲染在地图上显示数据时,可以清楚地看出在数据记录中难以发现的模式和趋势,为用户的决策支持提供依据。专题地图是MapInfo中的一个重要概念,是用户使用好MapInfo的一种体现。
1、 专题地图的概念
MapInfo的一个显著特征就是能将数据库中的信息进行直观的可视化分析。专题地图就是用于分析和表现数据的一种强有力的方式。用户可以通过使用专题地图的方式将数据图形化,使数据以更直观的形式在地图上体现出来。当使用专题渲染在地图上显示数据时,可以清楚地看出在数据记录中难以发现的模式和趋势,为用户的决策支持提供依据。专题地图是MapInfo中的一个重要概念,是用户使用好MapInfo的一种体现。
制作专题地图是根据某个特定专题对地图进行“渲染”的过程。所谓的专题渲染,就是以某种图案或颜色填充来表明地图对象(点、线、区域)的某些信息(例如人口、大小、年降雨量、日期等等),也就是说,这类渲染存在着主题,经过这样渲染的地图就是专题地图。利用MapInfo,可根据数据库表中特定的值来赋给地图对象颜色、图案或符号,从而创建不同的专题地图。
2、 专题图的六种类型
MapInfo为创建专题地图提供了强有力的支持。用户可以使用范围值、等级符号、点密度、独立值、直方图和饼图等多达六种方式来创建不同的专题地图。
(1)、 范围值
按照设置的范围显示数据。这些范围用颜色和图案进行渲染。范围专题地图能够通过点、线和区域来说明数值,在反映数值和地理区域的关系(如销售数字,家庭收入),或显示比率信息如人口密度(人口除以面积)时是很有用的。
(2)、 等级符号
等级符号为表中每条记录显示一个符号,符号大小与数据值成比例。等级符号地图用特定的数值来显示数据点,对于阐明定量信息(如由高到低依次变化)很有用处。符号的大小与该点对应的数值成比例,数值越大点就越大,数值越小点就越小。因此,等级符号最适合数据值数据。
(3)、 点密度
在地图上用点来显示数据,每一点都代表一定数量,某区域中点的总数与该区域数值成比例。每个点代表一定数量的单元,该数乘以区域内总的点数,就等于该区域的数据值。
(4)、 独立值
按独立数值渲染地图,可以表达多个变量。根据独立值绘制地图对象的专题地图有助于强调数据的类型差异而不是显示定量信息(如给定区域内的商店类型、分区类型等等)。
(5)、 直方图
将表中每条记录的专题变量显示为一个直方图。使用直方图可分析地图中每条记录的多个变量。比较每个直方图中各直方条的大小可考察表中某条记录,比较所有直方图中某一条的大小可考察所有记录的某个变量,而比较各直方图的高度可考察整张表。用直方图来表达负值时,该条会沿直方图反方向伸展。在叠加直方图中不显示负值。
(6)、 饼图
以饼图显示表中各记录的专题变量。饼图可包含多个变量。在地图上使用饼图可一次分析多个变量,比较每个图中饼扇的大小可考察表中某条记录,比较所有饼图中某一个饼扇,可考察所有记录中某个变量的变化,比较各饼图的直径可考察整张表。
3、 MapX对专题图的支持
MapX中使用Themes集合与Theme对象来实现对专题图的支持,每个Themes集合中可以包含多个Theme对象,也就是说,针对一个Dataset,可以创建多幅不同的专题地图。
每个Dataset都拥有一个Themes集合,并以其属性的形式存在,即Dataset.Themes。使用Themes的Add、Remove、RemoveAll等方法可以控制专题的添加和删除。
Ø Add方法:创建一个专题并将其加入到某个特定的DataSet的Themes集合中,
Map1.Datasets(1).Themes.Add(miThemeRanges,’’’area’,’Myranges Theme’)
Ø Remove方法:从集合中删除某一特定的专题图
Map1.Datasets(1).Themes.Remove "My Ranges Theme"
Ø RemoveAll方法:从集合中删除所有的的专题图
Map1.Datasets(1).Themes.RemoveAll
Theme对象用于设置每个专题图的属性。
比较重要的有
Ø Layer:返回一个Layer对象,表示该专题图所在的图层
Ø Legend:控制 对专题地图的说明,即图例
Ø ComputeTheme 控制是否可以对原始数据进行计算,默认为True
Ø Type 即专题图类型,取值范围为ThemeTypeConstants
Ø Fields 只读属性,返回该专题图所基于的Dataset中的字段集合
ThemeProperties 复合型属性,对应ThemeProperties对象,包含了专题图详尽的定义信息,如范围定义、显示风格设置等。
4、 专题图的规划
在创建专题图的过程中,有几个关键因素,包括专题图变量的确定、属性数据的获取以及专题图层的显示与控制。
(1)、 确定专题图变量
在专题图中显示的数据就是专题图变量。例如在行政区面积专题图中,表示面积的字段“area”就是这个专题地图的专题地图变量。
一个专题变量可以是一个字段或表达式。取决于专题图的类型,在一张地图上可以显示一个或多个专题图变量。范围值、等级符号、点密度和独立值地图都只检查一个变量。可以利用饼图或直方图一次显示多个专题变量。也可以创建双变量专题地图,其中一个地图对象可代表两个不同的数据,入符号的颜色代表一个专题变量,符号的大小代表另一个专题变量。
(2)、 属性数据的获取
在创建专题地图之前,必须确定需要显示何种信息,信息存储在什么位置。它可以在创建地图时所基于的表中,也可以在ODBC支持的外部数据库中。数据来源于Field对象或Field集合,在Themes.Add方法中通过Fields参数传递。
(3)、 创建专题图
首先应将某个产生专题图数据的dataset引入地图中,之后使用Themes.Add方法创建一个Theme对象。
curmap.Datasets(1).Themes.Add(miThemeRanges,‘TotPop’,‘’);
语法: Themes.Add [Type], [Field], [Name]
Type用于定义要创建的专题图的类型,它的取值范围是ThemeTypeConstants,该参数可选,如果没有定义或者定义为miThemeAuto,MapX会根据字段数以及已经存在的专题图类型自动在ThemeTypeConstants中选择一个。如果MapX无法自行确定专题类型,就会产生一个错误。
Field(s)定义在专题图中使用的一个或多个字段,可以通过字段名、字段索引或字段对象来引用。当创建多变量专题图时,可以使用数组表示。该字段是可选的,若不特意指定,MapX会使用DataSet中的第一个数字型字段。
Name,即专题图的名称,String类型参数,若不指定,MapX会自动生成一个名字。
(4)、 专题图类型常量
专题图变量由Theme.Typeproperty取得,其定义如下:
miThemeRanged = 0
miThemeBarChart = 1
miThemePieChart = 2
miTheme GradSymbol = 3
miThemeDotDensity = 4
miThemeIndividualvalue = 5
miThemeAuto = 6
miThemeNone = 9
5、 控制专题地图
有两种方法可以控制专题地图。
(1)、 使用Theme.ThemeDlg方法
该方法显示一个对话框,用户可以直接修改专题图特性。语句如下:
curmap.Datasets(1).Themes(1).ThemeDlg;
这种方法虽然简单,但是而且很难与自己的程序风格相一致,用户界面不友好,而且在这个默认的对话框中,用户可以随意改变任何设置,使得程序的控制难度加大。
(2)、 改变ThemeProperties对象属性
通过设置ThemeProperties对象属性,可以使用自己定制的界面,给用户有限的修改能力,实现起来也非常简单,而且对用户的操作有全部的控制权。
ThemeProperties对象是Themes集合中的一员,主要用于定义专题地图的显示,包括颜色、符号等。不同类型的专题图有自己与众不同的一些特性,在ThemeProperties中有其分别的定义。如DotSize专用于设定点密度专题图中点的大小,NumRanges专用于设定范围值专题图中的范围分布,SymbolStyle控制等级符号专题图使用的符号类型,valuePerDot用于在点密度专题图中每个点所代表的值。
ThemeProperties对象的属性中有许多又属于其他对象,如RangeCategory、Individualvalue、Style 等,可进行更深层次的设定。
6、 自定义图例
专题地图被创建后,MapX会自动生成一个图例来解释颜色、符号或大小所代表的含义。同ThemeDlg一样,可以直接用LegendDlg 方法调用默认的Legend对话框,但更常用的依旧是访问Theme.Legend 属性来进行一些个性化的设置。
如在程序中可以做如下设置:
var lgd: CMapXLegend;
lgd:=curmap.datasets.item(1).themes.item(1).legend;
with lgd do
begin
title:=´面积专题图´;
subtitle:=´图例´;
ShowCount := false;//去掉默认生成的结果个数
end;
需要注意的是,Legend的Width和Height属性是只读的,显示位置应该由Top和Left改变,单位为屏幕象素点。
7、 代码分析
以下是面积专题图的实现代码:
procedure Tmainform.Ntheme1Click(Sender: TObject);
var
par : Variant;
ds : CMapXdataset;
fields: CMapXFields;
begin
try
curmap.datasets.removeall;//清空数据集中的所有Dataset对象
par := CreateOleObject(´MapX.ODBCQueryInfo.4´);//创建ODBCQueryInfo对象
//设定ODBCQueryInfo的参数
par.SqlQuery := ´select * from T_DJQH´;
par.DataSource := maindm.MYDB.AliasName;
//par.ConnectString := ´ODBC;user=user1;pwd=aaa;dlg=2´;
//对应ODBC表将要使用的字段引入fields
fields := CoFields.Create;
fields.Add(´xzqybh´,´xzqybh´,miAggregationIndividual,miTypeNumeric);
fields.Add(´area´, ´area´, miAggregationIndividual,miTypeFloat);
//生成Dataset,并建立关联
ds := Map1.Datasets.Add(miDataSetODBC, par, EmptyParam,
´xzqybh´, EmptyParam, ´Djqh´, fields, EmptyParam);
//专题图
ds.Themes.Add(miThemeIndividualvalue, ´area´, ´mytheme1´,true);
//自定义图例
with ds.Themes.Item(1).legend do
begin
title:=´面积专题图´;
subtitle:=´图例´;
ShowCount := false;
end;
except
on E: EOleException do
Application.MessageBox(PChar(E.Message),
´错误´, MB_OK or MB_IConERROR);
end;
end;

说明:
(1)、 curmap是主界面中的地图变量;
(2)、 ds也可定义成variant类型变量,但这时无法使用ds.Themes.Item(1).legend,而且,定义为CmapXdataset后可使用Delphi中的智能代码功能,激活实时帮助系统,编程更方便;
(3)、 当使用Datasets.Add方法连接ODBC数据源数据时,第一个参数dataset类型应为miDatasetODBC,同时需要使用ODBCQueryInfo对象作为Datasets.Add方法的第二个参数,
Ø DataSource属性
用于设置ODBC数据源的名字。如果保留不写,则在程序运行时会出现一个对话框,要求用户选择。ODBC数据源可以在Windows控制面板中设置。
Ø SqlQuery属性
即从ODBC数据库中选取数据的SQL字符串。
Ø ConnectString属性
包含与ODBC数据源连接的信息,通常包括"ODBC;"、"uid=", "pwd=", or "DLG="。"uid="表示登录名, "pwd="表示登录密码,"DLG=" 控制登录对话框的显示:
DLG=0表示不显示对话框
DLG=1表示总显示对话框
DLG=2只有当信息不完整时显示登录对话框。

Tags:MapInfo,MapX  
责任编辑:gissky
  • 上一篇文章: 没有了
  • 下一篇文章:
  • 关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 中国地图