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

原创 2007年10月14日 00:20:00

 

MapX是MapInfo公司向用户提供的具有强大地图分析功能的ActiveX控件产品。由于它是一种基于Windows操作系统的标准控件,因而能支持绝大多数标准的可视化开发环境如Visual C++、Visual Basic、Delphi、PowerBuilder等。编程人员在开发过程中可以选用自己最熟悉的开发语言,轻松地将地图功能嵌入到应用中,并且可以脱离MapInfo的软件平台运行。这里谈到的VC++嵌入MapX进行二次开发可分为以下几个步骤来实现:
1 对应用工程的预设置

  在创建MapX控件之前,必须将MapX.hMapX.cpp文件加入到工程中。Project菜单中选择Add To Project -> Files命令,打开InsertFiles into Project对话框,选择MapX.cppMapX.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可以根据图层表中的字段值查询相对应的地理对象;可以提供对应于图层表中某个或某几个字段的分析饼图等。对于非地理信息,就要依据系统的具体要求用面向对象的语言设计查询和分析统计功能。

 

MFC应用程序中嵌入一个谷歌cef浏览器

声明:文章来自http://www.codeproject.com/Articles/1105945/Embedding-a-Chromium-browser-in-an-MFC-applicatio...
  • zuoyefeng1990
  • zuoyefeng1990
  • 2016年07月26日 11:00
  • 3964

利用C#进行CATIA自动化二次开发的入门指南

本文包括以下内容: Automation(以下简称自动化)与CAA的区别 用C#创建Automation根对象的代码 Automation文档的使用方法以下是正文 Automation(以下简称自动化...
  • just0kk
  • just0kk
  • 2017年02月26日 11:25
  • 1871

AutoCAD界面移植到VB.net应用程序窗体中

最近因为需要将AutoCAD界面移植到VB.net应用程序窗体中,琢磨、搜索了很久,终于搞清楚,贴出来。。。 1.首先涉及两个按钮,第一个是启动CAD进程,第二个是打开图形界面 2.第一个按...
  • HeWaiZhiXing
  • HeWaiZhiXing
  • 2015年12月15日 10:46
  • 1152

用VC++对MapX进行二次开发总结(二)(

3.MapX在VC++ 环境下GIS基本功能的实现 在进行MapX 开发之前,确保已经在计算机中正确的安装了MapX 控件。下面就用一个具体的实例,介绍在VC+ +中集成MapX 的方法。 3.1...
  • zhihu008
  • zhihu008
  • 2012年07月23日 21:47
  • 7289

用VC++对MapX进行二次开发总结(二)

http://blog.csdn.net/zhihu008/article/details/7777089 3.MapX在VC++ 环境下GIS基本功能的实现 在进行MapX 开发之前,确...
  • Nickter
  • Nickter
  • 2013年08月14日 01:14
  • 866

vc+mapx二次开发示例程序

  • 2009年06月14日 19:29
  • 2.39MB
  • 下载

VC++ 的UG二次开发

  • 2009年07月22日 21:45
  • 38KB
  • 下载

基于VC++6.0对solidworks二次开发手工修改注册表的方法(手把手教你解决solidworks不显示自编译插件问题).doc

  • 2014年10月28日 11:23
  • 164KB
  • 下载

基于VC++的Ansys二次开发源代码

  • 2009年11月10日 20:00
  • 1.01MB
  • 下载

C#进行MapX二次开发之开篇介绍及资源汇总

关于地理信息的开发有好多控件工具可以选择,GIS软件包括三家美国GIS开发商ESRI,Intergraph和MapInfo的软件产品,以及国产软件:MapGIS,GeoStar和Citystar,Su...
  • javaweb_research
  • javaweb_research
  • 2011年07月24日 12:47
  • 510
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在VC++中嵌入MapX的集成二次开发
举报原因:
原因补充:

(最多只允许输入30个字)