用VC++进行MapX二次开发

来源:互联网 发布:c语言课程设计通讯录 编辑:程序博客网 时间:2024/06/05 14:57
 

用VC++进行MapX二次开发之一------地理信息系统概述

发表于:2007年12月10日 11时33分12秒来源:权限: 公开阅读(2)评论(2) 举报本文链接:http://user.qzone.qq.com/191189187/blog/1197257592
用VC++进行MapX二次开发之一------地理信息系统概述
Writer:Bluedy  er-huang@163.com
1.1 地理信息系统概念
地理信息系统(Geographical Information System),简称GIS,是一种决策支持系统。所谓决策支持系统(Decision Support Syetem),是能从管理信息系统中获得信息,帮助管理者制定决策的系统。从“地理信息系统”的名称上可以看出,地理信息系统可以分成两个部分,即“地理”和“信息”。“地理”代表空间信息,“信息”代表属性信息,两者通过地理编码,组成一个完整的系统。比如,在Mapinfo中,“地理”数据存储在MAP文件中,“信息”即属性数据存储在TAB和DAT文件中,“地理”数据和“信息”数据通过ID文件连接(地理编码)起来。理解这两者的概念,对学习GIS的应用是很有益处的。
1.2 地理信息系统的组成
硬件组成:至于硬件嘛,一台微机+外设。微机的配置要看具体的系统而定,不过,对于Mapinfo来说,要求是很低的,只要你运行Windows98不是很慢就可以了。外设就是个无底洞了,什么数字化仪、解析测图仪、扫描仪、工程打印机、测绘仪器、航测仪器……太多啦,视具体情况而定。当然,微机的一般外设是肯定要的(键盘鼠标等)。
软件组成:那要看选用什么GIS平台了,我们进行MapX二次开发,当然是MapX了,编译器为VC++5.0以上版本,操作系统为Windows系列(当然是Windows95以上了)。
1.3 地理信息系统的功能
至于GIS的功能,你想听学术上所说的功能呢还是想听听老百姓说的功能,学术说的功能,那真是太多了,简直把GIS说得天下独尊了、无所不用、无所不能了,你自己去找找相关的资料吧。就让我们来听听老百姓说的功能------画个地图、写几个字、换个样子。呵呵,神圣的GIS就是这个样子的吗?“群众的眼睛是雪亮的”,差不多吧。GIS的功能首先是显示地理位置(画个地图):我们接触到的很多信息都是与位置有关的,应用也很广泛,比如,你家住在哪里,哪里有商店,车辆开到了哪里,移动基站设在哪里合适,这些都可以用地图轻易地表现出来。GIS的功能其次是记录与位置相关的信息(写几个字):比如,你家的房子面积是多大,几时建的,建筑材料是什么,有几层,这些都可以用地物的属性记录下来。GIS的另外一个功能、也是非常重要的一个功能是:分析和建模。把所得的空间信息和属性信息综合起来进行分析,得到一些新的信息,以满足人们的需要。或建立数学模型,对现实中的事物进行模拟。
1.4 地理信息系统的发展
地理信息系统是随着计算机图形学的发展而发展起来的,在20世纪60年代,GIS还处于研究阶段,70年代就开始快速发展,80年代开始大量应用。不过,这可是国际上的GIS历史,对于我国,则是在80年代才开始研究: 80年代初中科院遥感所成立;武汉测绘科技大学、中国地质大学(武汉)、北京大学着手开发GIS系统;1989年武汉测绘科技大学开设信息工程(GIS)专业……随后,我国的GIS技术有了长足的发展,开始接近世界水平。但由于影像处理、数据库技术等相关技术的制约,GIS的开发还处在一个较浅的层次上。

题外话:由于前美国副总统戈尔提出数字地球的概念,让一直过于专业应用的GIS走到大众面前,GIS着实火了起来。“数字**城市”充斥于各个媒体上,人们都争相“开发”GIS,只要与GIS有一点关系的应用,就把这个庞大的家伙拿出来,“我这个系统采用最新的GIS技术”,浪费人力物力。拿个WEBGIS来说吧,本来GIS最重要的一个功能是空间分析,可人们就是不用桌面的应用程序来分析,却要用慢的象蜗牛功能简陋的象马王堆出土的地图一样的“WEBGIS”来做,至于哪个的分析功能强,我不说了。毕竟,“WEB热”+“GIS热”=“WEBGIS热”是符合数学公式的,我也就不必去推翻了。只是,劳动人民的血汗钱啊,几十万几百万的用来折纸飞机……。

用VC++进行MapX二次开发
                     之二------使用MapX的基石
Writer:Bluedy  er-huang@163.com
在开始之前,我假设读者熟悉VC++编程(了解一些可以),且使用的系统安装好了VC++5.0(或以上版本,建议VC++6.0)和MapX4.0(或以上版本)。若你还没完成以上步骤,GetReader().Stop();请你满足前面的if语句。
好,现在让我们来开始我们的MapX之旅吧!
对于C++程序来说,每个MapX对象(Objects)都在MapX.h 和 MapX.cpp中用一个类来实现,类的名字和MapX对象的名字相同,且已经在CmapX中定义了。例如,DataSet对象用类CmapXDataset实现。这和C++类的定义相一致。
那么,每个对象的属性(Properties)呢?MapX的属性是用类的成员函数来实现的。比如刚才的DataSet对象的名字(Name),就是用Name()函数来实现的,不过,Name()有两种使用方法,即Get和Set。如:
CString GetName();//获取对象名字
void SetName(LPCTSTR);//设置对象名字
你是不是觉得Get和Set有点熟悉?那你看看下面的函数:
GetButtomInfo();GetButtomText();
SetButtomInfo();SetButtomText();
上面的函数可是MFC标准的、而且常用的函数哦。所以,你学MapX开发,可以想象成MapX里面的对象和属性就是MFC里面的类和成员函数。如此而已。
现在让我们来创建我们的MapX基石吧。
第一步:用VC++的程序向导来创建一个单文档程序MapXSample。
第二步:Project> Add To Project>Files,选择MapX.cpp和MapX.h。
第三步:定义一个CmapX对象。
class CMapxSampleView : public CView
{
      ……
    protected:
        CMapX  m_ctrlMapX;
     ……
}
第四步:声明一个常量。View > Resource Symbols>New>name为IDC_MAP。
第五步:在类向导中为CMapXSampleView创建WM_SIZE 和 WM_CREATE的处理消息:
void CMapxSampleView::OnCreate(UINT nType, int cx, int cy)
{
  m_ctrlMapX.Create(NULL, WS_VISIBLE, CRect(0,0,100,100), this,IDC_MAP);
}
void CMapxSampleView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
      
       m_ctrlMapX.MoveWindow(0,0,cx,cy,TRUE);
}
第六步:在类向导中为CMapXSampleView创建WM_SETFOCUS的处理消息,以确保当窗口处于活动状态时得到焦点。
void CMapxSampleView::OnSetFocus(CWnd* pOldWnd)
   {
      CView::OnSetFocus(pOldWnd);
      m_ctrlMapX.SetFocus();
}
然后编译运行。看到了吗?这个就是一个最基本的MapX程序了,我把它称为“MapX的基石”,因为以后的程序都是在这个程序的基础上“缝缝补补”而来的。

 

用VC++进行MapX二次开发
                     之三------使用MapX工具
Writer:Bluedy  er-huang@163.com
对于一个“标准”的Windows应用程序,一般都有一个工具栏。如果你用过某个GIS系统,一定用过工具栏上的工具。工具栏上的工具为我们提供了一个快速调用某个功能的捷径。我们这就来创建一个MapX的工具栏。
先来实现什么功能呢?我们来个模仿Mapinfo: 放大工具、 缩小工具。
要对图象进行放大缩小,该用什么算法呢?不必你操心!我们是进行二次开发,这些算法的实现,MapX都有了,我们只需要调用它的功能就行了。更绝的是,MapX已经内建了常用的“工具”。放大工具就是miZoomInTool,缩小工具就是miZoomOutTool。怎么使用能?好说,CmapX类有个CurrentTool函数,“属性和函数的名字一样”------当前工具,调用之即可。还记得前面的吧------Get和Set,现在不需要“获得”,而要“设置”,那么,该调用的函数为:
m_ctrlMapX.SetCurrentTool(miZoomInTool);//放大工具
m_ctrlMapX.SetCurrentTool(miZoomOutTool);//缩小工具
至于程序的实现,就是为工具栏的按钮添加消息处理函数,在函数体内添加上面的代码就可以了。调式运行,看看效果吧。
简单吧?就这么简单。别人都说vb进行MapX二次开发简单,你说呢?
MapX内建的工具有:
miArrowTool;
miPanTool ;
miCenterTool ;
miZoomInTool ;
miZoomOutTool ;
miSymbolTool ;
miTextTool ;
miSelectTool ;
miRadiusSelectTool;
miRectSelectTool ;
miPolygonSelectTool ;
miLabelTool ;
miAddLineTool ;
miAddPolylineTool ;
miAddRegionTool ;
miAddPointTool;

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 如果别人用电脑登了你的微信怎么办 消逝的光芒买错了买的普通版怎么办 在人人车卖了个车买家不过户怎么办 应用锁密码和密保问题都忘了怎么办 不小心在微信公众号发了消息怎么办 微信漂流瓶不能用了被投诉了怎么办 货物少了拉货的不承认少了怎么办 寄的快递号码留错了已经寄走怎么办 网购快递放在单位门卫室丢了怎么办 顺丰生鲜速配时效内食物坏了怎么办 竟尤理财跑路怎么办钱追的回来吗 博贝游戏用支付宝提不了现该怎么办 陌陌钱包没绑支付宝就体现了怎么办 鞋子让太阳晒的一只大一只小怎么办 美团不让上饿了么平台们商家怎么办 在汇通信诚租贷款买车被骗后怎么办 我的网银账户里的钱被盗了怎么办 老赖跑到国外去了还换了国籍怎么办 内裤把屁股两边磨得又肿又疼怎么办 京东在面临供货商不供货时怎么办的 打错的消息想撤回但按了删除怎么办 顺丰快递寄的黄皮和荔枝坏了怎么办 我发快递写错地址备签收不还怎么办 新买的床上四件套用着全身痒怎么办 华为畅玩6x锁屏密码忘了怎么办 我在淘宝上买了货不发货咋怎么办 在快递公司寄的东西丢了我该怎么办 不小心给了快递员子一个差评怎么办 不小心用发霉了的杯子喝了水怎么办 唐三复活了小舞失去的魂环怎么办了 我该怎么办?身陷动漫城输了很多钱 庄家开2球大小球踢成2球怎么办 去哪儿网订机票时邮箱写错了怎么办 在南航航班上把手机丢飞机上怎么办 买了品牌鞋穿了一周就破了怎么办 狗让狠狠的打了一顿不理人了怎么办 调好米粉宝宝吃的时候就凉了怎么办 情人间闹分手删了微信后悔了怎么办 8个月宝宝不坐椅子一直要抱怎么办 2个月婴儿3天没有拉大便了怎么办 8个月的宝宝不吃米糊和稀饭怎么办