• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

        VB中運用MapX創建用戶定制工具

        VB中運用MapX創建用戶定制工具

        更新時間:2022-05-01 文章作者:未知 信息來源:網絡 閱讀次數:

        摘要 本文介紹了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;

          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

          此時所創建的工具沒有任何功能,要工具具備相應的功能由第二步實現。

        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等,編程思路和關鍵方法都是相同的。

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 91在线亚洲综合在线| 国产精品久久永久免费| 97在线视频免费公开观看| 免费观看国产小粉嫩喷水| 亚洲蜜芽在线精品一区| 最新国产乱人伦偷精品免费网站| 亚洲国产精品碰碰| 白白色免费在线视频| 亚洲?V乱码久久精品蜜桃| 高清免费久久午夜精品| 黑人大战亚洲人精品一区 | 亚洲国产美女在线观看 | 69成人免费视频无码专区| 亚洲日本乱码卡2卡3卡新区| 女人18毛片水真多免费看| 无码一区二区三区亚洲人妻| 亚洲国产高清在线一区二区三区| 日日躁狠狠躁狠狠爱免费视频 | 亚洲熟妇无码久久精品| 在线视频免费观看高清| 亚洲乱码国产乱码精华| 亚洲福利精品一区二区三区| 一区二区三区免费电影| 亚洲AV无码久久精品蜜桃| 日韩欧毛片免费视频| 亚洲AV无码一区二区三区电影| 免费在线观看你懂的| 久久免费福利视频| 色偷偷女男人的天堂亚洲网| 全亚洲最新黄色特级网站 | 老牛精品亚洲成av人片| 在线观看亚洲精品国产| 最好看最新的中文字幕免费| 亚洲一区二区三区在线观看网站| jizzjizz亚洲| 亚洲人成在线免费观看| 国产亚洲综合久久| 亚洲视频国产精品| 免费亚洲视频在线观看| 久久国产乱子免费精品| 亚洲欧美日韩综合俺去了|