应用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 增删站点图标功能