免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 2615|回复: 3
收起左侧

在VC++中嵌入MapX集成二次开发

[复制链接]

2072

主题

100000万

铜板

363

好友

地信专家组

每一次的分离都是为了下一次的相聚

Rank: 14Rank: 14Rank: 14Rank: 14

积分
17622

精华勋章宣传勋章爱心勋章组织勋章地信元老灌水勋章荣誉会员勋章活跃勋章贡献勋章

发表于 2009-12-4 20:48 | 显示全部楼层 |阅读模式
    结合GIS工具软件与当今可视化开发语言的集成二次开发方式是GIS应用开发的主流。它的优点是既可以充分利用GIS工具软件对空间数据库的管理、分析功能,又可以利用其它可视化开发语言具有的高效、方便等编程优点,集二者之所长……

  MapX是MapInfo公司向用户提供的具有强大地图分析功能的ActiveX控件产品。由于它是一种基于Windows操作系统的标准控件,因而能支持绝大多数标准的可视化开发环境如Visual C++、Visual Basic、Delphi、PowerBuilder等。编程人员在开发过程中可以选用自己最熟悉的开发语言,轻松地将地图功能嵌入到应用中,并且可以脱离MapInfo的软件平台运行。这里谈到的VC++嵌入MapX进行二次开发可分为以下几个步骤来实现:
  1 对应用工程的预设置
  在创建MapX控件之前,必须将MapX.h和MapX.cpp文件加入到工程中。对于Visual C++5.0及以上版本,从Project菜单中选择Add To Project -> Files命令,打开InsertFiles into Project对话框,选择MapX.cpp和MapX.h文件加入到工程中(在MapX自带的C++例子中有这两个文件)。
  注意:不要选择Project菜单中的Add TO Project->Components And Controls命令。如果选择该命令加入MapX控件,将创建一新的.cpp文件,但是该文本没有包括所有的MapX对象。
  2 对MapX属性的操作
  对于C++程序来说,每个MapX对象(Objects)都在MapX.h 和 MapX.cpp中用一个类来实现,类的名字和MapX对象的名字相同,且已经在CmapX中定义了。
  例如,DataSet对象用类CmapXDataset实现。这和C++类的定义相一致。而每个MapX对象的属性(Properties)是用类的成员函数来实现的。比如DataSet对象的名字(Name),就是用Name()函数来实现的,不过,Name()有两种使用方法,即Get和Set。如:
  CString GetName();//获取对象名字
  void SetName(LPCTSTR);//设置对象名字 
  3 部分MapX工具的应用
  (1) “全图”工具的改进
  一般全图工具的代码为:
  m_ctrlMapX.SetZoom(m_ctrlMapX.GetGeoSetWidth());
  此方法的缺点是重新显示全图后,实际上是以上一个视图的中心作为屏幕中心进行显示,如果上一个视图在全图中的边缘位置,点击全图工具后实际上不是初始设置的全图。因此可以用如下代码实现:
  CString mapname=m_ctrlMapX.GetGeoSet();//取得当前地图的名字
  m_ctrlMapX.SetGeoSet(mapname);//设置该地图为主视区显示图
  (2) 创建“信息”工具
  MapX没有提供信息工具,该工具是自定制工具。有两种实现方法,其基本思想是:
  (1) 创建工具的鼠标指针类型(一般为“+”),当在工具栏上选择此工具后,设置为当前工具,然后跟踪鼠标在地图上点击的位置,触发ToolUsed事件,根据位置信息确定相应的对象,然后读取对象属性或绑定的数据库,弹出对话框,实现信息显示。此种方法只适用于显示地图的最上层对象(在MapX自带的C++例子“Buffer”中有具体实现代码)。
  (2) 用选择工具选中地图上所要显示信息的对象,然后再点击工具栏上的信息工具,弹出对话框,实现信息显示。此信息工具的实现代码与(1)不同,没有鼠标指针,实际上就是读取选中对象的属性或绑定的数据库的操作。此方法适合显示地图上的任意图层。
  两种方法各有特点,第一种方法直接,但在实际应用中容易出现异常,第二种方法要多点击一次,但应用稳定,而且适用地图上的任意图层。
  (3) “测距”工具的使用注意事项
  MapX的Distance()函数是针对地球地图的,在非地球地图中使用要注意数值转换。否则测出的数据与实际相差甚远。

  4 用MapX进行GIS二次开发

  (1) 创建数据库
  空间数据库可以通过两种方法创建,一种是通过MapX的图层生成功能创建。MapX生成的每一图层都对应一张表(table),该表中除了存有地理对象的位置坐标以外,还可以包含其他属性字段;另一种方法是通过导入带有地理位置信息的其他数据库生成。MapX可以通过数据绑定把这些数据库中的地理信息映射到地图图层上,MapX支持对多种常用数据库的访问。
  (2) 设置图层控制和地图投影
  在把地图加入到MapX之前,我们可以使用MapX附带的图层管理工具Geoset Manager把要加入的图层匹配在一起,建成一个图层组,该图层组规定了其中各个图层的名称、内容、属性及各图层之间的显示顺序。MapX中可以给图层设置四种属性:可显示、可选择、可编辑和自动标注。一般图层的属性是可显示的,需要查询的图层设置为可选择,需要修改的图层设置为可编辑,而自动标注可以自动显示图层中地理对象的标签。合理地设置这些属性将有助于系统实现地理信息的维护和查询功能。在匹配各个图层时,应该注意各个图层投影的设置。全部图层必须使用一致的投影方法才能精确匹配。MapX中的地图分为地球地图和非地球地图,地球地图中对象的坐标用经纬度来表示,非地球地图中对象的坐标通常是相对坐标,是相对于图中的某个基准点来设置的。如果图层的坐标不一致的话,必须先转换坐标才能进行匹配。
  (3) 设计编辑功能
  MapX提供标准的地理对象类型定义,在MapX所提供的点、线、面类型选择对话框中可以方便地选择地理对象的类型,包括所使用的符号的形状、颜色、大小等属性。利用MapX提供的画图工具,可以为用户设计出多种多样的地理对象生成工具。利用MapX提供的多种地理信息对象的选择工具(如矩形、圆形选择工具),用户可以调用这些选择工具并和MapX所提供的编辑(删除、修改等)地理对象功能相结合,以完成地理信息系统中地理对象的编辑操作。但要注意,对于地理数据和非地理数据要分别对待。
  (4) 设计查询功能和分析统计功能
  对于地理信息系统中所要求的有关地理信息查询功能和分析统计功能,MapX提供了一定的查询和分析手段,如MapX可以根据图层表中的字段值查询相对应的地理对象;可以提供对应于图层表中某个或某几个字段的分析饼图等。对于非地理信息,就要依据系统的具体要求用面向对象的语言设计查询和分析统计功能。
  结束语
  在开发GIS的过程中,首先要考虑的就是选择好的开发工具。单独使用可视化的编程语言不能方便地实现地理地图功能,而通常的GIS软件是一个非常专业的界面,并且不能完全满足各种GIS用户的需要,而使用“GIS组件 + 面向对象可视化编程语言”的模式就比较适合于各种应用的需要。

0

主题

4

铜板

0

好友

助理工程师

Rank: 5Rank: 5

积分
142
发表于 2010-4-22 16:00 | 显示全部楼层
谢谢楼主分享

0

主题

3318

铜板

6

好友

助理工程师

Rank: 5Rank: 5

积分
350
发表于 2011-4-5 20:05 | 显示全部楼层
好东东,下来看看.,

0

主题

2638

铜板

0

好友

教授级高工

Rank: 12Rank: 12Rank: 12

积分
1542
发表于 2025-1-9 14:40 | 显示全部楼层
探矿者软件可以提高矿体的命中率,减少找矿的成本和难度,主要功能:数据管理、二维制图、三维建模、储量估算、三维立体预测等,有需要免费试用可以联系负责人邓帅15377311476(微信同号),软件针对单位或者企业试用,不面向个人试用
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表