应用MapX编程两例[1]

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 citylamp 的 blog

                                 应用mapx编程两例      
                                           citylamp     

       0 mapx简介 
       mapx是mapinfo公司提供的具有强大地图分析功能的activex控件产品。由于它是一种基于windows操作系统的标准控件,因而能支持绝大多数标准的可视化开发环境,如visual c++、visual basic、delphi、powerbuilder、visual studio.net等。编程人员在开发过程中可以选用自己最熟悉的开发语言,轻松地将地图功能嵌入到应用中,并且可以脱离mapinfo的软件平台运行。利用mapx,能够简单快速地在软件中嵌入地图化功能,增强软件的空间分析能力。mapx采用基于mapinfo professional相同的地图化技术,可以实现mapinfo professional具有的绝大部分地图编辑和空间分析功能。          
       mapx的主要功能包括: 
       [1]专题地图绘制  使用专题地图绘制可以直观地表示数据。将数据与地图上的对象相关联,然后使用颜色编码(或其它样式)来直观地表现数据。可使用六种不同样式的任何一种(颜色范围、点密度、单独值、分级符号、饼图或条形图)查看数据。
       [2]逐层细化地图绘制  通过简单的点击即可详查数据。对于olap/dss,可以通过点击让用户逐层细化到地图上的区域。
       [3]数据绑定  地图可以与嵌套了mapx的容器、odbc或dao数据源相连。mapx 提供了若干不同类型的数据绑定,包括邮政编码级别的地理编码。
       [4]注释  可以自行定义注释的显示方位。突出显示特定数据。还可加入文本、符号、表格使地图信息更加丰富直观。
       [5]图层化  可以显示和控制地图图层,使其缩放程度在预设的距离内时才显示。可以使用或创建无缝图层,从而就像处理一个表一样处理一组表。可以通过特殊图层来支持特殊的应用,这些特殊图层包括动画图层(用于实时跟踪)和userdraw 图层(用于在地图顶部绘制特殊地图元素,例如徽标)。
       [6]栅格图像  在图层中加入一个栅格图像层作为背景可以使最终的地图更加清晰、美观。
       [7]自动标签  可以自动向地图添加标签,并可以控制其属性和显示。
       [8]选取对象  可在地图上拖动鼠标在圆、矩形或特定的点上选择一个或多个对象或记录以供分析。
       [9]特征工厂  用featurefactory对象可以创建、合并、缓冲或清除点、线、区域对象。
       [10]工具集  用户可以通过单击和拖放操作来与地图交互。可以使用mapx内置的导航、选择、标签、缩放工具,或者创建自定义的工具来满足程序的要求。
       [11]地图编辑  允许用户添加、修改、删除地图上的文本、编辑区域、点等特殊对象。
       [12]投影和坐标系  通过支持各种坐标系统和地图投影,mapx允许微调地图的显示并在本地坐标中处理x-y坐标数据。
       [13]远程空间服务器连接  可以访问存储在oracle 8i 和mapinfo spatialware中的远程地图数据。空间数据服务器如spatialware和oracle 8i等都提供了先进的查询处理能力 ,提高了空间数据组织的性能。将空间数据存储到关系型数据库中,可以增加应用程序的灵活性和地图数据的安全性。


      1 简单的gis功能 
      对于地图缩放、平移、选取、标签等比较简单的功能,可以通过设置mapx控件对象的currenttool属性方便地获得。如平移功能就可以简单地用以下语句获得:
    map1.currenttool = mipantool  (假设mapx控件名字是map1)         

 
      2 对象闪烁功能
      很多gis系统中要用到图形对象的闪烁功能。比如:节点在状态未知时显示灰色,在接受查询时以闪烁以表明状态。这部分功能是借助定时器控件实现的。程序代码主要部分如下:
  
    '记录目前正在处理的节点图标
    dim curcussym as new mapxlib.feature
    '两个交替显示的图标
    dim newstyle as new mapxlib.style, oldstyle as new mapxlib.style
    '用于更换图标的布尔值
    dim blnold as boolean
    …………
 private sub timer1_timer()  (每次定时器间隔时间到时调用此函数)
    set lyr = map1.layers.item(1)
    set feafac = map1.featurefactory
    with newstyle
     .symboltype = misymboltypebitmap
     .symbolbitmapsize = 24
     .symbolbitmaptransparent = true
     .symbolbitmapname = "red.bmp"   (要显示的第一张图片)
    end with
   
    with oldstyle
     .symboltype = misymboltypebitmap
     .symbolbitmapsize = 24
     .symbolbitmaptransparent = true
     .symbolbitmapname = "gray.bmp"   (要显示的第二张图片)
    end with
   
    map1.autoredraw = false     (禁止自动刷新)
    if (blnold = true) then     (如果正显示第一张图片,就替换为第二张图片)
    curcussym.style = oldstyle
    blnold = false
    else
    curcussym.style = newstyle  (如果正显示第一张图片,就替换为第二张图片)
    blnold = true
    end if
    curcussym.update  (刷新图片)
 end sub  

      3  增删站点图标功能

本文关键:MapX
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top