热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于.NET平台的MapX开发

MapX是MapInfo公司向用户提供的具有强大地图分析功能的ActiveX组件。尽管MapX组件开发技术已趋于成熟,但在.NET平台上进行MapX开发还是一个新课题

MapX是MapInfo公司向用户提供的具有强大地图分析功能的ActiveX组件。尽管MapX组件开发技术已趋于成熟,但在.NET平台上进行MapX开发还是一个新课题。本文以VB.NET为例,就在.NET平台上开发MapX进行初步的探讨。

 

1. MapX与.NET平台结合的意义

  Visual Basic .NET(简称VB.NET)是Microsoft公司向用户提供的具有强大

地图分析功能的Microsoft Visual Studio .NET(简称VS.NET)的四种编程语言之一,是继Visual Basic 6.0简单的升级,而是发生了质的变化。与VB6.0相比较,VB.NET无论在语法上还是框架结构上,都发生了较大的变化,功能上也大大增强,完成从最初的控制台应用程序、Windows应用程序到Web应用程序的各种不同要求,是一种真正面向对象的语言,是一次历史性的飞跃。VB.NET的出台,使之能与JAVA相抗衡。在GIS二次开发方面,由于VB.NET是Microsoft的产品,因此在Windows操作系统中利用组件技术开发GIS,比JAVA更加方便、快速、得心应用。VB.NET有着广阔的应用前景,并必将被越来越多的人所接受,VB.NET取代VB进行GIS二次开发,是大势所趋。因此,在.NET平台上进行MapX的开发是一个值得研究的课题。

2. MapX控件与.NET平台的绑定

  在VB.NET中使用MapX并不复杂,与在VB中一样,不需要编写一行代码就可以在应用程序中显示一张地图。安装好MapX后,启动VB.NET,在集成开发环境中选择 文件|添加项目|新建项目命令,打开新建项目对话框,创建一个名为MapX的应用程序,项目自动生成Form1窗体,此时选择 工具|添加/移除工具箱项命令(如图1)。

  在出现的自定义工具箱中选择COM组件,在Mapinfo MapX V4选项上打勾,点击确定按钮(如图2),这时在工具箱上出现一个新的控件,这个

新控件就是MapX控件。这样,就能在VB.NET中使用MapX控件了。

3. 在.NET平台上进行MapX开发

  地图控件用于显示地图。因此要显示地图,首先需要在窗体中加入一地图控件。可以通过在工具箱上双击地图控件,在窗体中加入地图控件,并根据需要再适当调整地图控件的大小和位置。也可以先选择该地图控件,然后在窗体中按住鼠标左键并拖动鼠标,指定地图控件的位置和大小。当在窗体中加入地图控件时,默认显示一美国地图,即地图控件MapX的Geoset默认属性为United State(如图3)。添加MapX控件后,开发者就可以像对其他对象一样修改MapX控件的属性和方法,调用各种功能了。在MapX中,提供了标准的地图工具,可以很容易地利用常用的标准工具开发出方便易用的地理信息系统,而不必针对每一种地图操作都完全靠开发者自已编程。MapX内置了常用的标准地图工具,主要分为两类:一是对象创建工具,用来创建地图图元;另一类是选择工具。在选择工具的使用时,可以配合功能键Shift和Ctrl键。它们包括:

  (1)改变地图比例尺和地图导航的工具:放大工具、缩小工具、平移工具和居中工具。

  (2)通过单击地图图元进行标注的标注工具。

  (3)以不同方式选择地图图元的选择工具集合。具体开发方法是:在程序适当位置激活某一个标准工具,把CurrentTool属性设为某一个常量,或直接用值。例如,在窗体中MapX控件为axMap1对象,当需要放大工具时:


    AxMap1.CurrentTool=MapXLib.ToolConstants.miZoomInTool

  或者:


  AxMap1.CurrentTool=1003

  运行程序就会看到此鼠标光标变为了放大镜。其他工具设定的方法与此相同。在具体实现中经常会为用户提供一些工具条,上面有地图的标准操作工具,以方便用户操作地图,例如提供放大、缩小、平移和选择这4种常用的工具按钮,在按钮的命令中可以编写为: 对于一般的应用,MapX提供的标准工具就足够用了。至此,就实现了MapX在.NET平台上的应用与开发。

    '地图放大工具

    Private Sub Button3_Click(ByVal sender As System.Object,ByVal As System.EventArgs) Handles Button3.Click

    AxMap1.CurrentTool=mapXLib.ToolConstants.miZoomInTool

    End Sub

    '地图缩小工具

    Private Sub Button4_Click(ByVal sender As System.Object,ByVal As System.EventArgs) Handles Button4.Click

    AxMap1.CurrentTool=mapXLib.ToolConstants.miZoomOutTool

    End Sub

    '地图平移工具

    Private Sub Button1_Click(ByVal sender As System.Object,ByVal As System.EventArgs) Handles Button1.Click

    AxMap1.CurrentTool=mapXLib.ToolConstants.miPanTool

    End Sub

    '地图选择工具

    Private Sub Button7_Click(ByVal sender As System.Object,ByVal As System.EventArgs) Handles Button7.Click

    AxMap1.CurrentTool=mapXLib.ToolConstants.miSelectTool

    End Sub

对于一般的应用,MapX提供的标准工具就足够用了。至此,就实现了MapX在.NET平台上的应用与开发。

4. 应注意的几个问题

  VB.NET的集成开发环境较之VB要复杂一些,尽管用VB.NET和VB开发MapX的基本思想和基本方法大体相同,但是两者的语法和架构有较大区别,不能照搬照套VB开发MapX的经验,尤其是源代码,更不能相互利用。

  4.1正确添加MapX控件

  要在.NET平台开发MapX,首先要正确安装MapX软件包,否则,在 COM组件中就找不到MapInfo MapX V4选项。只须按照MapX安装指南按步骤安装即可。但要注意的是,随着MapX4.0之后的版本推出,MapInfo公司改变了版权控制的方式——采用计算机系统编号的方法控制。用户除了购买MapX软件本身之外,要针对每一台欲安装MapX的计算机单独购买软件许可(License),否则,软件将不能正常使用。其次,要正确将MapX控件添加到VB.NET集成开发环境的工具箱上,用惯了VB的编程人员都知道,是在工程|部件命令中打开对话框,选择Mapinfo MapX V4控件,但在VB.NET中没有工程|部件命令,要用工具|添

加/移除工具箱项命令打开对话框。

  4.2合理使用MapX标准工具

  为了在地图中创建新的图元,或者修改已有的图元,需要地图编辑功能。MapX的标准工具提供了miAddPoint、ToolmiAddLine、ToolmiAddPolyLineTool、miAddRegionTool四种添加工具,分别属于添加点、添加线、添加折线和添加区域工具。对于添加工具,MapX指定将添加的图元放在Insertionlayer图层中。

  因此需要在添加的图层前,先设定insertionlayer图层,并将其设为可编辑的。方法如下:   其中(1)表示:打开图层对话框,在图层对话框中将当前图层设为可编辑;(2)表示:将Insertionlayer图层设定为当前层。

    Private Sub MenuItem132_Click(ByVal sender As Systeme.Object, ByVal e As System.EventArgs)Handles MenuItem132.Click

    AxMap1.Layers.LayersDlg()                     (1)

    AxMap1.Layers.InsertionLayer=AxMap1.Layers.Item(1)      (2)

    End Sub

  其中(1)表示:打开图层对话框,在图层对话框中将当前图层设为可编辑;(2)表示:将Insertionlayer图层设定为当前层。

  4.3关于更改初始界面

  在窗体中加入MapX控件时,默认的是美国地图,因此,在应用程序运行时,初始界面是美国地图。如何将初始界面改为自已需要的地图呢?首先,将需要的地图(扩展名为.gst)放到MapX安装路径的Maps文件夹下,例:D:/Program Files/MapInfo MapX 4.0/Maps。其次,在窗体MapX控件中点击鼠标右键,选择属性,出现如图4所示中间的地图属性页。


  在对话框中点击General选项卡,找到GeoSet选项,选择所需地图,并修改底部的Title内容,即可将初始界面的地图更改为自己需要的地图。

推荐阅读
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
author-avatar
天之苍
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有