VB中利用MapX创建用户定制工具
2008-04-09 04:42:54来源:互联网 阅读 ()
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;
Cursor(指针形状):使用该工具时,该工具在地图上显示的形状,该参数从CursorConstants(指针常量)中取值。本例选用的是miCrossCursor,那么当选择该工具时,该工具将在地图上显示成十字叉形状;
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
此时所创建的工具没有任何功能,要工具具备相应的功能由第二步实现。
当按下鼠标左键时,需要记下椭圆的起始位置;当鼠标右键弹上时,需要记下椭圆的结束位置,这时,画出椭圆。椭圆将以这两点为矩形的对角线在矩形框中绘制椭圆。需要特别注意的是,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)
'确定哪一层是可编辑层,椭圆只能画在可编辑层上
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:找出计算机上当前登录入网的用户
下一篇:在VB.NET中使用抽象类
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash