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组件 + 面向对象可视化编程语言”的模式就比较适合于各种应用的需要。

3S基础知识:在VC++中嵌入MapX的集成二次开发相关推荐

  1. SAP SD基础知识之订单中装运相关的功能 II

    SAP SD基础知识之订单中装运相关的功能 II 一,计划Scheduling 当业务人员创建一张订单时,系统能够决定基于客户要求的delivery date的物料可用日期:需要交货的货物必须在该时点 ...

  2. SAP SD基础知识之订单中装运相关的功能 I

    SAP SD基础知识之订单中装运相关的功能 I 一,装运点决定Shipping Point Determination 每个订单行项目都会决定一个shipping point:系统会自动带出一个shi ...

  3. SAP SD基础知识之交货中的控制元素

    SAP SD基础知识之交货中的控制元素 一,交货类型Delivery Type Delivery type控制整个的交货,我们可以在delivery header中看到delivery type: D ...

  4. SAP SD 基础知识之定价中的条件技术(Condition Technique in Pricing)

    SAP SD 基础知识之定价中的条件技术(Condition Technique in Pricing) 一,定价程序Pricing Procedure 所有定价中允许的条件类型都包含在定价程序中: ...

  5. [WPF 基础知识系列] —— 绑定中的数据校验Vaildation

    [WPF 基础知识系列] -- 绑定中的数据校验Vaildation 原文:[WPF 基础知识系列] -- 绑定中的数据校验Vaildation 前言: 只要是有表单存在,那么就有可能有对数据的校验需 ...

  6. java里面value_「Java基础知识」Java中包含哪些运算符

    原标题:「Java基础知识」Java中包含哪些运算符 在Java中包含的运算符有:算数运算符,逻辑运算符,关系运算符等. 算数运算符也就是我们平时的加减乘除余等操作:在Java中都是将右边的值赋值给左 ...

  7. 在vc中作用mapx

    在vc中作用mapx(从二次开发教程书本中扫描)在VisualC++中使用MapX    本章将通过一些实例来介绍如何在VisualC++中使用MapX.    17.1  访问MapX的属性和方法 ...

  8. java里面string什么意思_「Java基础知识」Java中的字符串是什么

    原标题:「Java基础知识」Java中的字符串是什么 字符串顾名思义就是一些字符组合在一起组成的一串数据,称作字符串,在Java中字符串用双引号包围起来,格式为String string = &quo ...

  9. 3S基础知识:VC6.0+MapX编程总结

    一.MapX的帮助 MapX的官方帮助文档是<MapX在线帮助>. 个人认为,这套文档过于简单,系统性偏差,与ArcEngine的帮助文档不可比.很多MapX的开发技巧在<MapX在 ...

  10. 【UI设计培训基础知识】设计中的点线面-线

    UI设计所要学习的知识有很多,想要在后期的工作中稳稳当当,基础知识一定要扎实,下面就是小编为大家整理的一份关于UI设计培训基础知识的相关内容,主要讲的是设计中的点线面-线,来看看下面的详细资料吧. 点 ...

最新文章

  1. GPT-3 再更新,新增编辑和插入文本功能,简直不要太好用!
  2. 2019嵌入式智能国际大会圆满落幕,7大专场精彩瞬间释出!
  3. III 25 git
  4. 404 错误页面_如何设计404错误页面,以使用户留在您的网站上
  5. Python协程--实现斐波那契数列(Fibonacci)的几种方式
  6. SAP License:SAP中的容差
  7. ios知识点扩充(1)
  8. android 寺库trytry_寺库与美图达成战略合作美图美妆APP将由TryTry运营_联商网
  9. Google手机移动网站适配(双向注释)
  10. vb.net 教程 6-1 进程 Process类初探
  11. OutMan——Foundation框架中的NSDate类、NSCalendar类以及NSFileManager类
  12. JS新增基本数据类型--BigInt
  13. 天视通支持海康威视摄像头吗_海康威视突然做电脑,到底有胜算吗?
  14. MATLAB使用radon函数和iradon函数计算图像的投影并从投影中重构图像
  15. 云呐|仓储企业固定资产多样化流程管理
  16. 开源正当时,共赢新未来 OpenHarmony开发者大会成功召开
  17. 基于Java+Springmvc+vue+element实现高校心理健康系统详细设计和实现
  18. [Extjs6]清除数组内容
  19. 海康监控平台投屏电视墙方案切换失败故障
  20. qiime微生物分析

热门文章

  1. 十六进制编辑器_Windows最佳免费十六进制编辑器
  2. Java服务端获取微信小程序openid(简单实现,搞懂原理)
  3. 第四卷 风起海外 第三百九十四章 修士、妖兽、小岛
  4. c语言编程数字炸弹,C语言实现数字炸弹小游戏
  5. CentOS 7.4 安装Teamviewer 14
  6. 佳能ts9020墨盒不识别_canon佳能TS9010 TS9020清零软件5B00佳能TS9040废墨盒清零1700
  7. C语言趣味小游戏——扫雷(详解版)
  8. 简单谈一谈git小乌龟操作
  9. Oracle SqlLoader使用
  10. 电脑上没有tts信息服务器,TTS——让你的电脑会说话-win7 tts