中英文核心期刊咨询网

当前位置:首页>>电子论文 > 正文

MapX的多字段专题饼图设计职称发表论文

发布时间:2013-09-09

  摘要:本文以小灵通路测系统中同步与漂移测试数据为例,提出如何在VC++开发环境中利用MapX创建多字段的专题饼图,特别是如何利用安全数组进行数据绑定创建多字段的专题饼图。

  关键字:MapX 安全数组 专题地图

  引言

  组件式软件技术已经成为当今软件技术的潮流之一,组件式GIS技术将给整个GIS技术体系和应用模式带来巨大的影响。MapX 是MapInfo 公司提供的具有强大地图分析功能的 ActiveX控件,支持大多数标准的可视化开发环境并且可以脱离MapInfo的软件平台运行。利用MapX,能够简单快速地在企业应用中嵌入地图功能,增强应用的空间分析能力。

  在MapX中,专题地图是用来分析和表现数据的一种强有力的方式。利用专题地图,可根据表中特定的值来赋予地图对象颜色、图案和符号,从而把各种数据图形化,很直观地显示在地图上,为用户的决策支持提供依据。专题地图数据通常在创建地图时所基于的表中或在ODBC支持的外部数据源中,也可以在COM数据集安全数组中。在小灵通信号的测试分析系统中,地图格式支持栅格图与矢量地图,为提高效率、满足实时性的要求,相关待处理数据存放在安全数组中,创建专题地图时利用安全数组进行数据绑定。

  1 安全数组(SAFEARRAY)

  MapX既是一个自动化对象,也是一个标准的COM对象,它支持结构化存储技术、自动化技术等。自动化继承了COM的语言无关性、进程透明性等优点,也简化了COM的一些底层细节。但自动化技术有一组专用于自动化的数据类型,SAFEARRAY便是Automation中的标准数组存储方式。SAFEARRAY类型实际是一个结构类型,但它可用于描述各种数组,指定了数组每一维的边界信息。安全数组类型的使用主要是要定义一个安全数组及维数与维的边界。COM提供了一套API用于处理SAFEARRAY。为了保证程序和SAFEARRAY结构无关,程序中建立、读取、更改和释放SAFEARRAY都应该通过这些API进行,而不应该直接读写SAFEARRAY结构。其方法如下:

  ⑴ 定义安全数组

  ColeSafeArray theData;//或SAFEARRAY theData,用SAFEARRAYBOUND来设定维中的元素的个数及维的下界。

  ⑵ 设定维中元素的个数

  unsigned long dims[2]={row,col};//row是行数,col为列数。

  ⑶ 创建安全数组

  theData.Create(VT_VARIANT,2,dims);//创建一个二维的存放任意类型的安全数组,边界值为dims。

  ⑷ 定义安全数组元素索引

  long index[2];//index[0]为行标,index[1]为列标。

  ⑸ 数据的存放

  theData.putElement(index,ColeVariant(data));//把data放入安全数组中index 单元内。

  2 数据绑定

  数据绑定是将数据源中的数据导入MapX 的过程。为了增强GIS系统数据处理的灵活性,系统分开存储涉及的图形矢量数据及空间属性数据。MapX通过数据集集合(Datasets)对象,可以将用户的属性数据与地图的空间数据连接起来,属性数据与几何数据的关联是通过数据绑定实现的。数据绑定的数据源可以是ODBC数据源、MapInfo Table文件、安全数组等。要绑字一个数据源,首先要指定所绑定的图层,然后需要指定与图层中地图对象相匹配的关键字段。数据绑定主要有两个作用:以地图中的图形对象来显示数据及将属性数据绑定到地图中,并创建专题图。数据绑定的实现是通过Datasets.Add方法实现的。

  ⑴ DataSets.add方法原型如下:

  Datasets.Add ( Type, SourceData, [Name], [Geofield], [SecondaryGeofield], [BindLayer], [Fields], [Dynamic])//详解参见相关资料

  ⑵ 创建BindLayer

  当绑定时数据包含经度和纬度,且要在新的图层相应的位置上创建这些点,需使用BindLayer 对象。通过数据绑定,可以将BindLayer对象作为一个参数,使用Datasets.Add方法将自己的数据转变为一个DataSet。

  CMapXBindLayer BindLayer;

  BindLayer.CreateDispatch(BindLayer.GetClsid());

  BindLayer.SetLayerName(Customers);

  BindLayer.SetLayerType(miBindLayerTypeXY);//类型

  BindLayer.SetRefColumn1(X);//经度

  BindLayer.SetRefColumn2(Y);//纬度

  ⑶ 用Fields 集合

  在MapX中有Field对象和Fields对象。在数据绑定时,MapX 对绑定的每个数据列均需要开销,通过Field对象和Fields对象只绑定地图中需要的数据。使用Datasets.Add 的Fields 参数建立要绑定到地图上的字段。字段集合对象的Add方法的原型如下:

  [Field=]OBJECT.Add (DataSourceCol, [Name], [AggregateFunction], [Type]) // DataSourceCol取值为数据源中字段名或索引值,在本文中数据源为安全数组,其取值为索引值(COleVariant(1l)或COleVariant(2l)),详解参见相关资料。

  ⑷ 据绑定

  使用Datasets.Add可以将用户数据绑定到地图中。

  3 专题地图

  主题地图绘制是用于分析和可视化数据的一种强大方法。为数据提供图形格式,以便可以在地图上查看数据。制作专题地图是根据某个特定专题对地图进行“渲染”的过程。所谓的专题渲染,就是以某种图案或颜色填充来表明地图对象(点、线、区域)的某些信息(例如信号的同步状态、人口等等),也就是说,这类渲染存在着主题,经过这样渲染的地图就是专题地图。在小灵通信号的测试中,需要获取分析信号的多组数据与状态,本文以同步与漂移状态为例。通过使用饼状图的主题地图绘制,可以每行同时检查多个变量,可以显示每个统计组的统计数据,并查看其在每个饼状图中所占的比例。在创建专题图的过程中,有几个关键因素,包括专题图变量的确定、属性数据的获取以及专题地图的显示与控制。

  ⑴ 定专题图变量。在专题地图上显示的数据称为专题变量。根据要执行的专题分析的类型,地图可能会显示一个或多个专题变量,饼状图可以同时显示多个专题变量(Fields 集合),本文中包括三个专题变量:同步、单时隙同步、双时隙同步。

  ⑵ 属性数据的获取。数据来源于Field对象或Field集合,在Themes.Add方法中通过Fields参数传递。

  ⑶ 专题集(Themes)对象。MapX中使用Themes集合与Theme对象来实现对专题图的支持,每一个数据集对象都拥有一个专题集对象。

  ⑷ 创建专题地图,使用Themes.Add 方法为数据集创建Theme 对象。Add方法原型如下

  立刻注册,免费享受三天的试用收看期,火爆,激情 让您免费欣赏三天

  OBJECT.Add ([Type],[Field],[Name],[ComputeTheme])//Type取miThemePieChart

  ⑸ 通过处理ThemeProperties 对象,更改专题的属性,使用GetMultivarCategories ()。

  ⑹ 设置自定义图例。

  4 实例

  本文以小灵通信号路测中漂移数据为实验数据,以VC++6.0、MapX5.0为开发环境。在实施过程中利用芝测公司生产的接收仪器接收小灵通信号,分析提取出漂移与同步的数据。漂移分为:不漂移、漂移一、漂移二;同步分为:同步、单时隙异步、双时隙异步。其数据结构如下:

  struct PY

  {

  double lo;//经度

  double la;//纬度

  union{

  struct{

  long p1;// 不漂移或同步

  long p2;// 漂移一或单时隙异步

  long p3;// 漂移二或双时隙异步

  }pytb;

  int power;//值

  };

  将接收的数据放入安全数组中,绑定数据,创建专题地图,最后效果下如图:

  4 总结

  随着GIS技术的不断发展,组件GIS以其巨大的优势得到越来越广泛的应用。本文实现了利用MapX创建具有多专题变量的专题地图及控制专题地图的相关属性,实例运用于小灵通路测系统中。

  参考文献

  [1] MapInfo MapX v5.0 Developer’s

  [2] MSDN MSDN Library ht

  [3] 刘光 地理信息系统二次开发教程——组件篇 北京:清华大学出版社 2003

  [4] 潘爱民 COM原理与应用 北京:清华大学出版社 1999

回到顶部