明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習分享的學(xué)習平臺!

VB中使用MapX創(chuàng)建用戶定制工具

[摘要]摘要 本文介紹了VB中如何利用MapX創(chuàng)建用戶定制地圖工具,詳細地說明了整個創(chuàng)建過程,以及在創(chuàng)建定制工具的過程中所使用的關(guān)鍵方法! 1.前言  隨著地理信息系統(tǒng)的發(fā)展,國內(nèi)外已出現(xiàn)了不少GIS(地...
摘要 本文介紹了VB中如何利用MapX創(chuàng)建用戶定制地圖工具,詳細地說明了整個創(chuàng)建過程,以及在創(chuàng)建定制工具的過程中所使用的關(guān)鍵方法。

  1.前言

  隨著地理信息系統(tǒng)的發(fā)展,國內(nèi)外已出現(xiàn)了不少GIS(地理信息系統(tǒng))軟件,其中MapX是MapInfo公司的ActiveX控件產(chǎn)品。由于它是一種基于Windows操作系統(tǒng)的標準控件,因而MapX4.0支持絕大多數(shù)標準的可視化開發(fā)環(huán)境,如:VisualBasic,Delphi,PowerBuilder,VisualC++等面向?qū)ο笳Z言,而且可以使用Lotus Script將MapX4.0嵌入到Lotus Notes中。

  雖然MapX4.0提供了許多標準工具,可以直接使用,但是很多情況下,這些標準工具不能滿足實際的需要,這就要求通過定制地圖工具來規(guī)定工具能完成何種功能,例如畫橢圓工具,標尺工具(測線段長度)等等。下面,筆者就通過一具體實例來介紹一下VB中采用MapX4.0控件制作地圖的定制工具。

  2.VB環(huán)境下MapX編程

  利用MapX4.0創(chuàng)建用戶定制工具分為以下三步:

  2.1 創(chuàng)建定制工具

  本例創(chuàng)建的是畫橢圓工具。首先,宣稱全局常量miAddEllipseTool = 1,1就代表了畫橢圓這個工具。然后,在主窗體中創(chuàng)建畫橢圓工具。
關(guān)鍵方法(創(chuàng)建定制工具):

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

  OBJECT(對象):Map對象;

  ToolNumber(工具號)是創(chuàng)建出代表畫橢圓工具的miAddEllipseTool;

  Type(類型):描述了工具的行為,這個參數(shù)取的ToolTypeConstants(工具類型常量)值。本例,工具是按下鼠標左鍵到彈上鼠標左鍵的過程中畫橢圓。本例中取的是miToolTypePoint;

  Cursor(指針形狀):使用該工具時,該工具在地圖上顯示的形狀,該參數(shù)從CursorConstants(指針常量)中取值。本例選用的是miCrossCursor,那么當選擇該工具時,該工具將在地圖上顯示成十字叉形狀;

  ShiftCursor ,CtrlCursor:這兩個參數(shù)是可選的,缺省情況時,SHIFT鍵和CTRL鍵不起作用;

  InfoTips(工具提示): Boolean型。 如果要顯示工具提示,需要將此參數(shù)設(shè)為true;缺省值為false。

  實際編碼:

Public Const miAddEllipseTool = 1 注釋:定制的加橢圓工具
Public RectX1 As Double 注釋:新加橢圓(所需的矩形)的點1的X(經(jīng)緯度)坐標
Public RectY1 As Double 注釋:新加橢圓(所需的矩形)的點1的Y(經(jīng)緯度)坐標
Public RectX2 As Double 注釋:新加橢圓(所需的矩形)的點2的X(經(jīng)緯度)坐標
Public RectY2 As Double 注釋:新加橢圓(所需的矩形)的點2的Y(經(jīng)緯度)坐標
Private Sub Form_Load() 注釋:創(chuàng)建定制工具
Map1.CreateCustomTool miAddEllipseTool, _
miToolTypePoint, miCrossCursor
End Sub

  此時所創(chuàng)建的工具沒有任何功能,要工具具備相應(yīng)的功能由第二步實現(xiàn)。

2.2編寫工具句柄 (工具具備什么功能)。

  當按下鼠標左鍵時,需要記下橢圓的起始位置;當鼠標右鍵彈上時,需要記下橢圓的結(jié)束位置,這時,畫出橢圓。橢圓將以這兩點為矩形的對角線在矩形框中繪制橢圓。需要特別注意的是,MapX4.0中使用的坐標系統(tǒng)是經(jīng)/緯度系統(tǒng),而MouseDOwn,MouseUp事件中的坐標是屏幕坐標,因此,需要將屏幕坐標轉(zhuǎn)化為經(jīng)/緯度坐標,所畫橢圓才能顯示在正確的位置上。

  關(guān)鍵方法(繪制橢圓):

OBJECT.CreateEllipticalRegion(Rectangle,[Angle] , [Resolution] , [Style] )
OBJECT:FeatureFactory對象;
Rectangle(矩形):Rectangle對象,確定了橢圓的大;
Angle(角度):變量,決定橢圓繞中心點旋轉(zhuǎn)的角度;
Resolution(精度) :變量, 橢圓的精度,由多少點構(gòu)成;
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
 注釋:將屏幕坐標轉(zhuǎn)變?yōu)榻?jīng)緯度坐標
 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
  注釋:將地圖的坐標系統(tǒng)設(shè)為經(jīng)/緯度坐標
  Map1.NumericCoordSys.Set miLongLat, 0
  注釋:將屏幕坐標轉(zhuǎn)變?yōu)榻?jīng)緯度坐標
  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
 注釋:設(shè)置畫橢圓的矩形框
 RECT.Set x1, y1, x2, y2
 With frm.Map1
  注釋:創(chuàng)建橢圓
  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



  此時,畫橢圓工具具備了畫橢圓的功能,運用定制的這個工具由第三步實現(xiàn)。

  2.3調(diào)用定制工具

  注釋:設(shè)置當前工具為定制的畫橢圓工具

  Map1.CurrentTool=miAddEllipse

  或 Map1.currenttool=1

  3. 結(jié)束語

  本例畫橢圓時,從鼠標按下,一直到鼠標最后彈起時才可以看到橢圓出現(xiàn)在地圖上,這就是說在鼠標移動(MouseMove事件)時,從鼠標按下,到鼠標彈起的中間過程是看不到中間過程的橢圓出現(xiàn)的。為了實現(xiàn)在鼠標移動時,也可以看到橢圓,那么需要在MouseMove事件中畫橢圓,并且,每次畫橢圓時刪除掉前一次畫的橢圓。這樣的運行結(jié)果就是看到,從鼠標按下,到鼠標彈起的過程中,隨鼠標的移動而有了繪橢圓的變化過程。

   另外,本文是以VB5為例,進行的編程,但對于其它語言,如VC++,Delphi等,編程思路和關(guān)鍵方法都是相同的。