『公告』 预祝您龙年大吉,万事如意, 过节期间, 大家如需数据服务,请拨打400 或直接添加客服微信,再祝大家龙年,心想事成。
关注我们 新浪 腾讯
首页 -> 3S基础知识 -> MapInfo-> 正文

VC6.0+MapX编程总结

VC6.0+MapX编程总结
       MapX的官方帮助文档是《MapX在线帮助》。这套文档过于简单,系统性偏差,与ArcEngine的帮助文档不可比。很多MapX的开发技巧在《MapX在线帮助》中查找不到,只能在互联网上搜索。
       一、MapX的帮助

       MapX的官方帮助文档是《MapX在线帮助》。

       个人认为,这套文档过于简单,系统性偏差,与ArcEngine的帮助文档不可比。很多MapX的开发技巧在《MapX在线帮助》中查找不到,只能在互联网上搜索。

       本文试图从一个程序员的视角展开,来整理一下MapX的开发技巧。需要强调的是,VB+MapX模式是在《MapX在线帮助》中重点描述内容,本文将侧重于VC+MapX

 

       二、MapX的对象组织

       MapInfo作为地图编辑平台,需要解决一个核心问题: 如何组织地理世界的空间数据和属性数据,以及如何在电脑屏幕上绘制出来。MapX作为二次开发控件,其对象组织结构将直接体现MapInfo对于地理世界的理解。

       在阅读本文的同时,请读者打开《MapX在线帮助》,定位到“The MapX Objects=〉“Intro - The MapX Objects”。注意:《MapX在线帮助》是安装MapX后的帮助文档,比如我安装了MapX4.0,那么通过“开始”=〉“程序”=〉“MapInfo MapX 4.0”可以打开《MapX在线帮助》。

这里是MapX的对象结构图(OMD),ArcEngine的帮助文档也有类似的图。学习二次开发,需要熟悉这张图。这样能“一览众山小”,心里有谱,知道如何下手去搜索对象。

       从图中可以发现,OMD有两条核心主线。一条是用于表达空间数据的Layers->Layer->Feature->Parts等对象系列;另一条是用于表达属性数据的Datasets->Dataset->Fields->Field等对象系列。

 

       这两条对象系列是MapInfo的精华所在。其他对象诸如注记、专题、查询等对象都是在两条主线上衍生出来的支线。有能力的读者,如果想从底层写一个地图编辑平台,也可以借鉴此OMD来组织自己的程序数据结构。

       在上一篇文章中,大致描述了MapX的帮助文档以及MapX的体系结构。那么,接下来,我们开始VC6.0 + MapX之旅。

 

       一、准备工作

       开发前,需要安装Visual Studio 6MapX,以及搭建测试环境。

       测试环境并不是指程序员进行开发的计算机软件环境,这种环境只能进行单元测试,最理想的测试环境应该是尽可能的模仿用户使用环境。什么是用户环境?有一点可以肯定,用户环境不会安装Visual Studio 6

       如果没有条件购置第二台电脑搭建测试环境,可以使用虚拟机(比如VMWare等)工具在本机安装双系统,甚至是多系统。

 

 

       二、在VC6工程中创建MapX Control

       在MapX的帮助文档《MapX在线帮助》中,已经很详尽的描述创建的方法。具体位置:

       1、“开始”=〉“程序”=〉“MapInfo MapX 4.0”可以打开《MapX在线帮助》。

       2、“The MapX User Guide=〉“Working With Visual C++=〉“Create a MapX Control Using C++”。

       OK。按照上面的操作,您就已经开始了丰富多彩的MapX开发之旅。

       不过,需要注意两点。

       1、如何将MAPX.H/MAPX.CPP添加进VC6工程?很简单,从例程中找到这两个文件,然后复制到自己的工程目录就可以。而不要使用VC6中安装组建和控件的方法添加(菜单:“project=>Add To Project=>Components and Controls”)。

       2、按照默认的方法创建的工程在编译运行后,会自动打开一个gst地图。如果想让程序运行时不显示任何地图数据,需要将gst清空,方法如下:

 

       int CMapxSampleView::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

       if (CView::OnCreate(lpCreateStruct) == -1)

              return -1;

     

       //创建mapx控件

       CRect rc(0,0,100,100);

       if( !m_ctrlMapX.Create(NULL, WS_VISIBLE, rc, this, IDC_MAP) )

              return -1;

 

       //清空 gst 地图

       m_ctrlMapX.SetGeoSet("");

            

return 0;

      京ICP备08100627号-22 京公网安备 11010802030428号