VB中利用MapX创建用户定制工具

leon_wu水瓶

leon_wu水瓶

2016-02-19 17:16

今天图老师小编要跟大家分享VB中利用MapX创建用户定制工具,精心挑选的过程简单易学,喜欢的朋友一起来学习吧!

  摘要 本文介绍了VB中如何利用MapX创建用户定制地图工具,详细地说明了整个创建过程,以及在创建定制工具的过程中所使用的关键方法。

  1.前言

  随着地理信息系统的发展,国内外已出现了不少GIS(地理信息系统)软件,其中MapX是MapInfo公司的ActiveX控件产品。由于它是一种基于Windows操作系统的标准控件,因而MapX4.0支持绝大多数标准的可视化开发环境,如:VisualBasic,Delphi,PowerBuilder,VisualC++等面向对象语言,而且可以使用Lotus Script将MapX4.0嵌入到Lotus Notes中。

  虽然MapX4.0提供了许多标准工具,可以直接使用,但是很多情况下,这些标准工具不能满足实际的需要,这就要求通过定制地图工具来规定工具能完成何种功能,例如画椭圆工具,标尺工具(测线段长度)等等。下面,笔者就通过一具体实例来介绍一下VB中采用MapX4.0控件制作地图的定制工具。

  2.VB环境下MapX编程

  利用MapX4.0创建用户定制工具分为以下三步:

  2.1 创建定制工具

  本例创建的是画椭圆工具。首先,宣称全局常量miAddEllipseTool = 1,1就代表了画椭圆这个工具。然后,在主窗体中创建画椭圆工具。

  关键方法(创建定制工具):

  OBJECT.CreateCustomTool (ToolNumber, Type, Cursor, [ShiftCursor] , [CtrlCursor], [InfoTips])

  OBJECT(对象):Map对象;

  ToolNumber(工具号)是创建出代表画椭圆工具的miAddEllipseTool;

  Type(类型):描述了工具的行为,这个参数取的ToolTypeConstants(工具类型常量)值。本例,工具是按下鼠标左键到弹上鼠标左键的过程中画椭圆。本例中取的是miToolTypePoint;

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  Cursor(指针形状):使用该工具时,该工具在地图上显示的形状,该参数从CursorConstants(指针常量)中取值。本例选用的是miCrossCursor,那么当选择该工具时,该工具将在地图上显示成十字叉形状;

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  ShiftCursor ,CtrlCursor:这两个参数是可选的,缺省情况时,SHIFT键和CTRL键不起作用;

  InfoTips(工具提示): Boolean型。 如果要显示工具提示,需要将此参数设为true;缺省值为false。

  实际编码:

  

Public Const miAddEllipseTool = 1 '定制的加椭圆工具
Public RectX1 As Double '新加椭圆(所需的矩形)的点1的X(经纬度)坐标
Public RectY1 As Double '新加椭圆(所需的矩形)的点1的Y(经纬度)坐标
Public RectX2 As Double '新加椭圆(所需的矩形)的点2的X(经纬度)坐标
Public RectY2 As Double '新加椭圆(所需的矩形)的点2的Y(经纬度)坐标
Private Sub Form_Load() '创建定制工具
Map1.CreateCustomTool miAddEllipseTool, _
miToolTypePoint, miCrossCursor
End Sub

  此时所创建的工具没有任何功能,要工具具备相应的功能由第二步实现。

  2.2编写工具句柄 (工具具备什么功能)。

  当按下鼠标左键时,需要记下椭圆的起始位置;当鼠标右键弹上时,需要记下椭圆的结束位置,这时,画出椭圆。椭圆将以这两点为矩形的对角线在矩形框中绘制椭圆。需要特别注意的是,MapX4.0中使用的坐标系统是经/纬度系统,而MouseDOwn,MouseUp事件中的坐标是屏幕坐标,因此,需要将屏幕坐标转化为经/纬度坐标,所画椭圆才能显示在正确的位置上。

  关键方法(绘制椭圆):

  

OBJECT.CreateEllipticalRegion(Rectangle,[Angle] , [Resolution] , [Style] )
OBJECT:FeatureFactory对象;
Rectangle(矩形):Rectangle对象,确定了椭圆的大小;
Angle(角度):变量,决定椭圆绕中心点旋转的角度;
Resolution(精度) :变量, 椭圆的精度,由多少点构成;
Style(样式): 变量,定义了所画椭圆的样式,如颜色,线型等。
实际编码:
Private Sub Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton And (Map1.CurrentTool = miAddEllipseTool) Then
 Map1.NumericCoordSys.Set miLongLat, 0
 '将屏幕坐标转变为经纬度坐标
 Map1.ConvertCoord X, Y, RectX1, RectY1, miScreenToMap
 End if
End Sub
Private Sub Map1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
 If Button = vbLeftButton And (Map1.CurrentTool = miAddEllipseTool) Then
  '将地图的坐标系统设为经/纬度坐标
  Map1.NumericCoordSys.Set miLongLat, 0
  '将屏幕坐标转变为经纬度坐标
  Map1.ConvertCoord X, Y, RectX2, RectY2, miScreenToMap
  '鼠标弹起时,画椭圆
  Call AddEllipse(form1,RectX1,RectY1,RectX2,RectY2)
 Endif
End sub
'画椭圆过程
Public Sub AddEllipse(frm As Form, x1 As Double, _
y1 As Double,x2 As Double,y2 As Double, EditLayer As Variant)
  Dim RECT As New MapXLib.Rectangle '画椭圆的矩形框
  Dim CreatedEllipse As Feature '所画的椭圆
  Dim I as integer,EditLayer as integer
  '设置画椭圆的矩形框
  RECT.Set x1, y1, x2, y2
  With frm.Map1
   '创建椭圆
   Set CreatedEllipse = .FeatureFactory. _
   CreateEllipticalRegion(RECT, , 500, .DefaultStyle)
   '确定哪一层是可编辑层,椭圆只能画在可编辑层上
   For I=1 to .map1.layers.count
    If .map1.layers(I).editable=true then
     Editlayer=I
     Exit for
    Endif
   Next I
   '将椭圆添加到所画的图层上
   .Layers.Item(EditLayer).AddFeature CreatedEllipse
  End With
End Sub
 

  此时,画椭圆工具具备了画椭圆的功能,运用定制的这个工具由第三步实现。

  2.3调用定制工具

  '设置当前工具为定制的画椭圆工具

  Map1.CurrentTool=miAddEllipse

  或 Map1.currenttool=1

  3. 结束语

  本例画椭圆时,从鼠标按下,一直到鼠标最后弹起时才可以看到椭圆出现在地图上,这就是说在鼠标移动(MouseMove事件)时,从鼠标按下,到鼠标弹起的中间过程是看不到中间过程的椭圆出现的。为了实现在鼠标移动时,也可以看到椭圆,那么需要在MouseMove事件中画椭圆,并且,每次画椭圆时删除掉前一次画的椭圆。这样的运行结果就是看到,从鼠标按下,到鼠标弹起的过程中,随鼠标的移动而有了绘椭圆的变化过程。

  另外,本文是以VB5为例,进行的编程,但对于其它语言,如VC++,Delphi等,编程思路和关键方法都是相同的。

展开更多 50%)
分享

猜你喜欢

VB中利用MapX创建用户定制工具

编程语言 网络编程
VB中利用MapX创建用户定制工具

VB创建、修改、删除WIN2K用户

编程语言 网络编程
VB创建、修改、删除WIN2K用户

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

中望CAD教程之定制工具栏

cad教程 autocad教程 CAD
中望CAD教程之定制工具栏

VB中利用WinRAR进行文件压缩

编程语言 网络编程
VB中利用WinRAR进行文件压缩

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

创建表 创建行 创建列(VB.NET)

电脑网络
创建表 创建行 创建列(VB.NET)

利用VB提取HTML文件中的EMAIL地址

编程语言 网络编程
利用VB提取HTML文件中的EMAIL地址

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

隐身 是为了让谁发现我不在 - QQ伤感分组

隐身 是为了让谁发现我不在 - QQ伤感分组

老谢徒弟:网络营销 如何提高软文的杀伤力

老谢徒弟:网络营销 如何提高软文的杀伤力
下拉加载更多内容 ↓