• [vb+mo] visual baisc 6.0 基于mapobjects 2.4 开发的数字化校园电子地图


    程序的源代码下载地址:

    https://docs.google.com/

    请安装VB6.0企业版(不是企业版运行会报错,因为缺少相应的控件)和ESRI MO2.4

    程序的质量一般,因为时间仓促,主要是毕业设计时间仓促.希望大家多多改进.有什么问题可以发邮件欢迎交流.

    程序的主窗口代码:

    '通用变量定义
    Private lyrname As String
    Private Const Searchtolpixels = 3
    Public mark As Integer
    Public fd As Boolean, sx As Boolean, my As Boolean, cX As String
    Public lineMy As New MapObjects2.line
    Public poly As New MapObjects2.Polygon
    Public rect As New MapObjects2.Rectangle
    Public cir As New MapObjects2.Ellipse
    Public pt1 As New MapObjects2.Point
    Public BufPoly As New MapObjects2.Polygon
    Dim HasRec As Boolean
    Dim recsParcel As MapObjects2.Recordset
    Dim sym  As New Symbol
    Dim SymBuf As New Symbol
    Dim SymSel As New Symbol
    Dim isLabelShow As Integer
    Dim dr1 As DrawRect
    Dim dd As String

    ' 面积计算
    Private Sub AreaCal_Click()
        mark = 2
        Map1.MousePointer = moCross
    End Sub

    '输入查询地物名称
    Private Sub Command1_Click()
        If Text1.Text = "" Then
            MsgBox "请输入要查询的地物!", vbOKOnly, "提示!"
       Else
           If HasRec = False Then
        End If
        '查询三个图层的名称并且显示
        For i = 0 To 2
            Set mylyr = Map1.Layers(i)
        Set recsParcel = mylyr.SearchExpression("名称  like " + "'" + "%" + Text1.Text + "%" + "'")

        If i <> 3 Then
       
        End If

        Next i
        Dim stats As MapObjects2.Statistics
        Set stats = recsParcel.CalculateStatistics("FeatureID")
        iParcel = stats.Count

        If stats.Count < 1 Then
            MsgBox "没有找到"
       
        Else: Map1.FlashShape recsParcel.Fields("Shape").Value, 3
      If Not recsParcel.EOF Then
                form5.ListView1.ListItems.Clear
                For Each fld In recsParcel.Fields
                    Set newItem = form5.ListView1.ListItems.Add
                    newItem.Text = fld.Name
                    newItem.SubItems(1) = fld.ValueAsString
                  Next fld
                    aString = recsParcel.Fields("名称").ValueAsString
                    If aString = "运动场" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "3.jpg"
                         form5.Image1 = LoadPicture(dd)
                          form5.Show
                    ElseIf aString = "图书馆" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "11.jpg"
                         form5.Image1 = LoadPicture(dd)
                          form5.Show
                    ElseIf aString = "校行政楼" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "9.jpg"
                         form5.Image1 = LoadPicture(dd)
                   form5.Show
                    ElseIf aString = "B1教学楼" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "8.jpg"
                         form5.Image1 = LoadPicture(dd)
                   form5.Show
                    ElseIf aString = "A1教学楼" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "2.jpg"
                         form5.Image1 = LoadPicture(dd)
                   form5.Show
                    ElseIf aString = "八一路" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "7.jpg"
                         form5.Image1 = LoadPicture(dd)
                   form5.Show
                    ElseIf aString = "弘毅广场" Then
                   
                        dd = App.Path + "\..\" + "图片" + "\" + "11.jpg"
                         form5.Image1 = LoadPicture(dd)
                   form5.Show
                    ElseIf aString = "综合教学楼2" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "17.jpg"
                         form5.Image1 = LoadPicture(dd)
                   form5.Show
                    ElseIf aString = "综合实验楼1" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "16.jpg"
                         form5.Image1 = LoadPicture(dd)
                   form5.Show
                    ElseIf aString = "艺术楼" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "14.jpg"
                         form5.Image1 = LoadPicture(dd)
                   form5.Show
                    ElseIf Text1.Text = "" Then
                   Else: dd = App.Path + "\..\" + "图片" + "\" + "13.jpg"
             form5.Image1 = LoadPicture(dd)
                   form5.Show
               End If
                   form5.Image1 = LoadPicture(dd)
                   form5.Show
                End If

                Map1.Refresh
        End If
        End If
    End Sub

    '显示属性窗口
    Private Sub Command4_Click()
    If Text1.Text = "" Then
            MsgBox "请输入要查询的地物!", vbOKOnly, "提示!"
    Else
        If HasRec = False Then
        End If
        '查询三个图层的名称并且显示
        For i = 0 To 2
        Set mylyr = Map1.Layers(i)
     
        Set recsParcel = mylyr.SearchExpression("名称  = " + "'" + Text1.Text + "'")

        If i <> 3 Then
        End If

        Next i
        Dim stats As MapObjects2.Statistics
        Set stats = recsParcel.CalculateStatistics("FeatureID")
        iParcel = stats.Count

        If stats.Count < 1 Then
            MsgBox "没有找到"
       
        Else: Map1.FlashShape recsParcel.Fields("Shape").Value, 3
      If Not recsParcel.EOF Then
                form5.ListView1.ListItems.Clear
                For Each fld In recsParcel.Fields
                    'Set Recs = l.SearchByDistance(Loc, theTol, "")
                    Set newItem = form5.ListView1.ListItems.Add
                    newItem.Text = fld.Name
                    newItem.SubItems(1) = fld.ValueAsString
                  Next fld
                    aString = recsParcel.Fields("名称").ValueAsString
                    If aString = "运动场" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "3.jpg"
                         form5.Image1 = LoadPicture(dd)
                        form5.Show
                    ElseIf aString = "图书馆" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "11.jpg"
                         form5.Image1 = LoadPicture(dd)
                        form5.Show
                    ElseIf aString = "校行政楼" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "9.jpg"
                         form5.Image1 = LoadPicture(dd)
                        form5.Show
                    ElseIf aString = "B1教学楼" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "8.jpg"
                         form5.Image1 = LoadPicture(dd)
                        form5.Show
                    ElseIf aString = "A1教学楼" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "2.jpg"
                         form5.Image1 = LoadPicture(dd)
                        form5.Show
                    ElseIf aString = "八一路" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "7.jpg"
                         form5.Image1 = LoadPicture(dd)
                        form5.Show
                    ElseIf aString = "弘毅广场" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "11.jpg"
                         form5.Image1 = LoadPicture(dd)
                        form5.Show
                    ElseIf aString = "综合教学楼2" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "17.jpg"
                         form5.Image1 = LoadPicture(dd)
                        form5.Show
                    ElseIf aString = "综合实验楼1" Then
                   
                        dd = App.Path + "\..\" + "图片" + "\" + "16.jpg"
                         form5.Image1 = LoadPicture(dd)
                        form5.Show
                    ElseIf aString = "艺术楼" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "14.jpg"
                         form5.Image1 = LoadPicture(dd)
                        form5.Show
                   Else: dd = App.Path + "\..\" + "图片" + "\" + "13.jpg"
                    form5.Image1 = LoadPicture(dd)
                        form5.Show

               End If
                   form5.Image1 = LoadPicture(dd)
                   form5.Show
                End If

                Map1.Refresh
        End If
       End If
    End Sub

    ' 清理缓冲图形
    Private Sub command6_Click()
        Me.Map1.TrackingLayer.ClearEvents
        Option1.Value = False
        Option2.Value = False
        Option3.Value = False
        Option4.Value = False
        Option5.Value = False
    End Sub

    ' 距离量算
    Private Sub DistanceCal_Click()
        mark = 1
        Map1.MousePointer = moCross
    End Sub

    Sub AddLegend()
         ' 加载图例
        legend1.LoadLegend
        ' 获得活动图层的索引号
        legend1.Active(0) = True
        Dim Index As Long
        Index = legend1.getActiveLayer
        ' 如果索引号有效
        Exit Sub
    End Sub

    Private Sub Form_Load()
        Form1.Picture = LoadPicture()
        Call addlayers
        Call SetUpRenderers
        Call SetUpPointLabelRenderers
        Call SetUpLineLabelRenderers
        updateScale
        legend1.Active(0) = True
        legend1.setMapSource Map1
        legend1.LoadLegend True
        legend1.Visible = True
        '将图层名称添加到列表框里
        Dim mylyr As MapObjects2.MapLayer
        Map1.Refresh
        '详细定义符号
        Text3.Text = "100"
        Map1.TrackingLayer.SymbolCount = 4
        With Map1.TrackingLayer.Symbol(0)
            .SymbolType = moPointSymbol
            .Style = moTriangleMarker
            .Color = moRed
            .Size = 3
        End With
     
        With Map1.TrackingLayer.Symbol(1)
            .SymbolType = moLineSymbol
            .Color = moRed
            .Size = 3
        End With
     
        With Map1.TrackingLayer.Symbol(2)
            .SymbolType = moFillSymbol
            .Style = moGrayFill
            .Color = moRed
            .OutlineColor = moRed
        End With
     
        With Map1.TrackingLayer.Symbol(3)
            .SymbolType = moFillSymbol
            .Style = moGrayFill
            .Color = moBlue
            .OutlineColor = moBlue
        End With
    End Sub

    '添加数据方法
    Sub addlayers()
        Dim DCONN As New MapObjects2.DataConnection
        DCONN.Database = App.Path + "\..\" + "数据" + "\"
        If Not DCONN.Connect Then
            MsgBox "没找到数据"
        End If
        '添加东区面
        Dim myMaplayer As New MapObjects2.MapLayer
        Set myMaplayer.GeoDataset = DCONN.FindGeoDataset("东区面")
        myMaplayer.Symbol.Color = moWhite
        Map1.Layers.Add myMaplayer
        AddLegend
        '添加东区线
        Set myMaplayer = New MapObjects2.MapLayer
        Set myMaplayer.GeoDataset = DCONN.FindGeoDataset("东区线")
        myMaplayer.Symbol.Color = moLightGray
        myMaplayer.Symbol.Style = moSolidLine
        myMaplayer.Symbol.Size = 2
        Map1.Layers.Add myMaplayer
        AddLegend
        '添加东区点
        Set myMaplayer = New MapObjects2.MapLayer
        Set myMaplayer.GeoDataset = DCONN.FindGeoDataset("东区点")
        myMaplayer.Symbol.Color = moTeal
        myMaplayer.Symbol.Style = moSolidLine
        myMaplayer.Symbol.Size = 3
        Map1.Layers.Add myMaplayer
        AddLegend
        'map2中添加底图
        Set yMaplayer = New MapObjects2.MapLayer
        Set yMaplayer.GeoDataset = DCONN.FindGeoDataset("东区面")
        yMaplayer.Symbol.Color = RGB(232, 241, 13)
        yMaplayer.Symbol.Style = mosolide
        Map2.Layers.Add yMaplayer
    End Sub

    Private Sub legend1_AfterSetLayerVisible(Index As Integer, isVisible As Boolean)
        Map1.Refresh
    End Sub

    Private Sub legend1_LayerDblClick(Index As Integer)
        Dim i As Integer
        i = legend1.getActiveLayer
        Dim str As String
        str = Map1.Layers.Item(i).Name
        If str = "东区点" Then
            Set Map1.Layers("东区点").Renderer = Nothing
            SetUpPointLabelRenderers
            CommonDialog1.ShowColor
            Map1.Layers("东区点").Symbol.Color = CommonDialog1.Color
            legend1.LoadLegend
        ElseIf str = "东区线" Then
            If MsgBox("修改颜色", vbYesNo) = vbNo Then
                Map1.Layers("东区线").Symbol.Color = moLightGray
                legend1.LoadLegend
            Else
                Set Map1.Layers("东区线").Renderer = Nothing
                SetUpLineLabelRenderers
                CommonDialog1.ShowColor
                Map1.Layers("东区线").Symbol.Color = CommonDialog1.Color
                legend1.LoadLegend
            End If
        ElseIf str = "东区面" Then
            If MsgBox("修改颜色", vbYesNo) = vbNo Then
                SetUpRenderers
                legend1.LoadLegend
            Else
                Set Map1.Layers("东区面").Renderer = Nothing
                CommonDialog1.ShowColor
                Map1.Layers("东区面").Symbol.Color = CommonDialog1.Color
                legend1.LoadLegend
            End If
        End If
        Map1.Refresh
    End Sub

    Private Sub legend1_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
        Dim i As Integer
        Dim str As String
        i = legend1.getActiveLayer
        'MsgBox i
        If i = -1 Then i = 2
       
        str = Map1.Layers(i).Name
        lyrname = str
      '  i = 0
    End Sub

    '标注部分
    Private Sub Map1_AfterLayerDraw(ByVal Index As Integer, ByVal canceled As Boolean, ByVal hdc As stdole.OLE_HANDLE)
        If Index = 0 Then Map2.TrackingLayer.Refresh True
        Dim mylyr As MapLayer
        Dim myrcs As MapObjects2.Recordset
        Dim iCount As Integer
        Dim i As Integer
        iCount = Map1.Layers.Count
        HasRec = False
        If Text1.Text <> "" Then
            '模糊查询部分<三个图层一起查询>
            For i = 0 To iCount - 1
                Set mylyr = Map1.Layers(i)
                Set myrcs = mylyr.SearchExpression("名称 like " + "'" + "%" + Text1.Text + "%" + "'")
                Set g_symSelection = New MapObjects2.Symbol

                With g_symSelection
                    .SymbolType = Map1.Layers(i).Symbol.SymbolType
                    .Color = moRed
                    .Size = 5.2
                End With

                If mylyr.shapeType = moShapeTypePolygon Then
                    g_symSelection.Outline = False
                End If


                If Not myrcs.EOF Then
                    Map1.DrawShape myrcs, g_symSelection
                    HasRec = True
                End If
            Next i
        End If
        Map1.Refresh
    End Sub

    Private Sub Map1_BeforeLayerDraw(ByVal Index As Integer, ByVal hdc As stdole.OLE_HANDLE)

        Map1.Refresh
        Map2.Refresh
    End Sub


    Private Sub Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
        '********************************距离统计******************************************
        If mark = 1 Then
            Dim line1 As MapObjects2.line   ' Line Object: A Line object represents a
                ' geometric shape that has two or more vertices.
                Set line1 = Map1.TrackLine  ' TrackLine Method: Rubber-bands a multi-point
                ' line on the Map and returns a Line object.
                Map1.TrackingLayer.Refresh True
                Me.StatusBar1.Panels(5).Text = "地图距离为: " + Format(line1.Length, "#.00") + " Meters"
                ' Panels属性功能:返回对Panel对象的(Panels)集合的引用     Length Property:
                ' Returns the length of a Line object in map units.
        End If
        '*********************************面积统计*****************************************
        If mark = 2 Then
                Dim poly1 As MapObjects2.Polygon
                Set poly1 = Map1.TrackPolygon
                Map1.TrackingLayer.Refresh True
                Me.StatusBar1.Panels(5).Text = "面积为: " + Format(poly1.Area, "#.00") + " Square Meters"
                ' Area Property: Returns the area of an object in square map units.
        End If
        '**********************************************************************************
        Dim r As MapObjects2.Rectangle
        If fd = True Then  '放大
            Map1.MousePointer = moZoomIn
            Set r = Map1.TrackRectangle
            Set Map1.Extent = r
            Map1.Refresh
            Map2.Refresh
            updateScale
        End If

        If my = True Then
            Map1.Pan   '漫游
            Map1.MousePointer = moPan
        End If
       
        If sx = True Then  '缩小
           
            Map1.MousePointer = moZoomOut
            Dim Loc As New MapObjects2.Point
            Dim mapwidth As Double, mapheigth As Double
            Set Loc = Map1.ToMapPoint(X, Y)
            Set r = Map1.Extent
            mapwidth = Map1.Extent.Width
            mapheight = Map1.Extent.Height
            r.Right = Loc.X + mapwidth
            r.Left = Loc.X - mapwidth
            r.Top = Loc.Y + mapheight
            r.Bottom = Loc.Y - mapheight
            Set Map1.Extent = r
            Map1.Refresh
            Map2.Refresh
            updateScale
        End If
        '显示属性<分图层显示>
        If Toolbar1.Buttons(5).Value = 1 Then
            mark = 0
            Map1.MousePointer = moIdentify
            If lyrname <> "" Then
                Call identify(X, Y)
            Else
                MsgBox "请在图层显示框中单击地物所在的图层!", vbOKOnly, "提示!"
            End If
        End If
     
        '点缓冲
        If Option1.Value Then
            Dim pt As New MapObjects2.Point
            Dim eventPt As New MapObjects2.GeoEvent
            Dim buffPt As New MapObjects2.Polygon
            Dim buffEventPt As New MapObjects2.GeoEvent
       
            Set pt = Map1.ToMapPoint(X, Y)
            Set eventPt = Map1.TrackingLayer.AddEvent(pt, 0)
            Set buffPt = pt.Buffer(Text3.Text, Map1.FullExtent)

            Set buffEventPt = Map1.TrackingLayer.AddEvent(buffPt, 3)
           
        '线缓冲
        ElseIf Option2.Value Then
            Dim line As New MapObjects2.line
            Dim eventLine As New MapObjects2.GeoEvent
            Dim buffLine As New MapObjects2.Polygon
            Dim buffEventLine As New MapObjects2.GeoEvent
       
            Set line = Map1.TrackLine
            Set eventLine = Map1.TrackingLayer.AddEvent(line, 1)
            Set buffLine = line.Buffer(Text3.Text, Map1.FullExtent)
            Set buffEventLine = Map1.TrackingLayer.AddEvent(buffLine, 3)

       
        '矩形缓冲
        ElseIf Option3.Value Then
            Dim rect As New MapObjects2.Rectangle
            Dim eventRect As New MapObjects2.GeoEvent
            Dim buffRect As New MapObjects2.Polygon
            Dim buffEventRect As New MapObjects2.GeoEvent
       
            Set rect = Map1.TrackRectangle
            Set eventRect = Map1.TrackingLayer.AddEvent(rect, 2)
            Set buffRect = rect.Buffer(Text3.Text, Map1.FullExtent)
            Set buffEventRect = Map1.TrackingLayer.AddEvent(buffRect, 3)

        '多边形缓冲
        ElseIf Option4.Value Then
            Dim poly As New MapObjects2.Polygon
            Dim eventPoly As New MapObjects2.GeoEvent
            Dim buffPoly As New MapObjects2.Polygon
            Dim buffEventPoly As New MapObjects2.GeoEvent
       
            Set poly = Map1.TrackPolygon
            Set eventPoly = Map1.TrackingLayer.AddEvent(poly, 2)
            Set buffPoly = poly.Buffer(Text3.Text, Map1.FullExtent)
            Set buffEventPoly = Map1.TrackingLayer.AddEvent(buffPoly, 3)
     
        '椭圆缓冲

        ElseIf Option5.Value Then
            Dim arect As New MapObjects2.Rectangle
            Dim elli As New MapObjects2.Ellipse
            Dim eventElli As New MapObjects2.GeoEvent
            Dim buffElli As New MapObjects2.Polygon
            Dim buffEventElli As New MapObjects2.GeoEvent
       
            Set arect = Map1.TrackRectangle
            elli.Top = arect.Top
            elli.Bottom = arect.Bottom
            elli.Left = arect.Left
            elli.Right = arect.Right
       
            Set eventElli = Map1.TrackingLayer.AddEvent(elli, 2)
            Set buffElli = elli.Buffer(Text3.Text, Map1.FullExtent)
            Set buffEventElli = Map1.TrackingLayer.AddEvent(buffElli, 3)
            'Else: MsgBox "请选择缓冲类型并且输入缓冲距离"
       
        End If
       
    End Sub

    Private Sub identify(X As Single, Y As Single) '******地物属性查询*******************
     
        Dim theTol As Double
        Dim Loc As New Point
       
        If lyrname = "" Then
            MsgBox "请选中要查询的图层"
        Else
            Set l = Map1.Layers(lyrname)
            Set Loc = Map1.ToMapPoint(X, Y)
            theTol = Map1.ToMapDistance(Searchtolpixels * Screen.TwipsPerPixelX)
       
            Set Recs = l.SearchByDistance(Loc, theTol, "")
     
            If Not Recs.EOF Then
                form5.ListView1.ListItems.Clear
                For Each fld In Recs.Fields
                    'Set Recs = l.SearchByDistance(Loc, theTol, "")
                    Set newItem = form5.ListView1.ListItems.Add
                       newItem.Text = fld.Name
                    newItem.SubItems(1) = fld.ValueAsString
                Next fld
                    aString = Recs.Fields("名称").ValueAsString
                   
                    If aString = "运动场" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "3.jpg"
                        form5.Image1 = LoadPicture(dd)
                        form5.Show
                    ElseIf aString = "图书馆" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "11.jpg"
                         form5.Image1 = LoadPicture(dd)
                        form5.Show
                    ElseIf aString = "校行政楼" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "9.jpg"
                         form5.Image1 = LoadPicture(dd)
                        form5.Show
                    ElseIf aString = "B1教学楼" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "8.jpg"
                         form5.Image1 = LoadPicture(dd)
                        form5.Show
                    ElseIf aString = "A1教学楼" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "2.jpg"
                         form5.Image1 = LoadPicture(dd)
                        form5.Show
                    ElseIf aString = "八一路" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "7.jpg"
                         form5.Image1 = LoadPicture(dd)
                        form5.Show
                    ElseIf aString = "弘毅广场" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "11.jpg"
                         form5.Image1 = LoadPicture(dd)
                        form5.Show
                    ElseIf aString = "综合教学楼2" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "17.jpg"
                         form5.Image1 = LoadPicture(dd)
                        form5.Show
                    ElseIf aString = "综合实验楼1" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "16.jpg"
                         form5.Image1 = LoadPicture(dd)
                        form5.Show
                    ElseIf aString = "艺术楼" Then
                        dd = App.Path + "\..\" + "图片" + "\" + "14.jpg"
                         form5.Image1 = LoadPicture(dd)
                        form5.Show
                   Else: dd = App.Path + "\..\" + "图片" + "\" + "13.jpg"
                    form5.Image1 = LoadPicture(dd)
                    form5.Show
            End If
                End If
                    End If
    End Sub

    Private Sub Map2_AfterTrackingLayerDraw(ByVal hdc As stdole.OLE_HANDLE)
         Dim sym As New MapObjects2.Symbol  ' Symbol Object: A Symbol object consisits
         ' of attributes that control how a features or graphic shape in displayed.
         sym.OutlineColor = moGreen ' OutlineColor Property: Returns or sets the outline
         ' color of a Polygon object's Symbol.
         sym.Style = moTransparentFill  ' Style Property: Returns or sets the style of
         ' a Symbol object.
         Map2.DrawShape Map1.Extent, sym
    End Sub

    Private Sub Map2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
        ' convert to map point
        Dim p As MapObjects2.Point
        Set p = Map2.ToMapPoint(X, Y)
       
        ' if the click happended inside the indicator, then start dragging
        If Map1.Extent.IsPointIn(p) Then    ' IsPointIn Method: Returns a value that indicates
        ' whether a Point falls within an object.
            Set dr1 = New DrawRect
            dr1.DragStart Map1.Extent, Map2, X, Y
        End If
    End Sub

    Private Sub Map2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Not dr1 Is Nothing Then
            dr1.DragMove X, Y
        End If
        ' 鼠标在鹰眼上移动,状态栏中显示相应的坐标
        Dim pt As New MapObjects2.Point
        Set pt = Map1.ToMapPoint(X, Y)
        StatusBar1.Panels(2).Text = "X = " & pt.X
        StatusBar1.Panels(3).Text = "Y = " & pt.Y
    End Sub

    Private Sub Map2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Not dr1 Is Nothing Then
            Set Map1.Extent = dr1.DragFinish(X, Y)
            Set dr1 = Nothing
        End If
    End Sub

    Private Sub Map1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        '更新状态条的坐标显示
        Dim curPoint As Point
        Dim curX As Double
        Dim curY As Double
        '将屏幕目标转换为地理坐标
        Set curPoint = Map1.ToMapPoint(X, Y)
        curX = curPoint.X
        curY = curPoint.Y
        '压缩取小数点后2位
        Dim cX As String, cy As String
        cX = curX
        cy = curY
        cX = Left(cX, InStr(cX, ".") + 2)
        cy = Left(cy, InStr(cy, ".") + 2)
        StatusBar1.Panels(2).Text = "X := " & cX
        StatusBar1.Panels(3).Text = "Y := " & cy
    End Sub

    ' 更新比例尺
    Public Sub updateScale()
        ScaleBar1.MapExtent.MaxX = Map1.Extent.Right
        ScaleBar1.MapExtent.MinX = Map1.Extent.Left
        ScaleBar1.MapExtent.MaxY = Map1.Extent.Bottom
        ScaleBar1.MapExtent.MinY = Map1.Extent.Top
       
        ScaleBar1.PageExtent.MinX = Map1.Left / Screen.TwipsPerPixelX
        ScaleBar1.PageExtent.MinY = Map1.Top / Screen.TwipsPerPixelY
        ScaleBar1.PageExtent.MaxX = (Map1.Left + Map1.Width) / Screen.TwipsPerPixelX
        ScaleBar1.PageExtent.MaxY = (Map1.Top + Map1.Height) / Screen.TwipsPerPixelY
       
        ScaleBar1.Refresh
        isLabelShow = ScaleBar1.RFScale
        'MsgBox isLabelShow
        StatusBar1.Panels(4).Text = "比例尺 1 : " & Format$(ScaleBar1.RFScale, "###,###,###,###,###")
    End Sub

    Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
        If Toolbar1.Buttons(1).Value = tbrPressed Then
            Map1.MousePointer = moZoomIn '鼠标成放大形状
            fd = True
            sx = False
            my = False
            mark = 0
        End If

        If Toolbar1.Buttons(2).Value = tbrPressed Then
            Map1.MousePointer = moZoomOut '鼠标成缩小状
            sx = True
            my = False
            fd = False
            mark = 0
        End If

        If Toolbar1.Buttons(3).Value = tbrPressed Then
            Map1.MousePointer = moPan   '鼠标成漫游状
            my = True
            sx = False
            fd = False
            mark = 0
        End If

        If Toolbar1.Buttons(4).Value = tbrPressed Then
            Map1.MousePointer = moArrow  '全图显示
            Map1.Extent = Map1.FullExtent
            Map1.Refresh
            Toolbar1.Buttons(4).Value = tbrUnpressed
            mark = 0
        End If
        If Toolbar1.Buttons(5).Value = tbrPressed Then
            Map1.MousePointer = moIdentify
        End If
        If Toolbar1.Buttons(6).Value = tbrPressed Then
            Map1.MousePointer = moCross  '鼠标成十字
            mark = 1
        End If
        If Toolbar1.Buttons(7).Value = tbrPressed Then
            Map1.MousePointer = moCross  '鼠标成十字
            mark = 2
        End If
         If Toolbar1.Buttons(8).Value = tbrPressed Then
         Option1.Value = True
          ' MsgBox "请在右面板中选择缓冲区的类型及距离并且在地图上操作"
            mark = 0
        End If
        If Toolbar1.Buttons(9).Value = tbrPressed Then
            Map1.MousePointer = moArrow
            mark = 3
            IsClear = Not IsClear
            Text1.Text = ""
            mark = 0
            Me.Map1.TrackingLayer.ClearEvents
            Option1.Value = False
            Option2.Value = False
            Option3.Value = False
            Option4.Value = False
            Option5.Value = False
            Map1.Refresh
            Toolbar1.Buttons(9).Value = tbrUnpressed
        End If
    End Sub

    Private Sub 打印_Click()
        Map1.PrintMap "MyMap", "", True
    End Sub

    Private Sub 地点查询_Click()
    MsgBox "请在右面板输入要查询的地名然后点击查询按钮"
        Map1.MousePointer = moIdentify
        my = True
        fd = False
        sx = False
    End Sub

    '判断实现地图的放大,缩小,漫游,全图
    Private Sub 放大_Click()
        Map1.MousePointer = moZoomIn
        fd = True
        my = False
        sx = False
        updateScale
        mark = 0
    End Sub

    Private Sub 漫游_Click()
        Map1.MousePointer = moPan
        my = True
        fd = False
        sx = False
        mark = 0
    End Sub

    Private Sub 全图_Click()
        Set Map1.Extent = Map1.FullExtent
        updateScale
        mark = 0
    End Sub

    Private Sub 缩小_Click()
        Map1.MousePointer = moZoomOut
        sx = True
        my = False
        fd = False
        updateScale
        mark = 0
    End Sub


    Private Sub 关于_Click()
        Form4.Show
        mark = 0
    End Sub

    Private Sub 退出_Click()
        End
    End Sub

    '加载图片
    Private Sub 许昌学院风光图_Click()
        Form3.Show
    End Sub
    '加在规划图
    Private Sub 许昌学院规划图_Click()
        Form2.Show
    End Sub

    ' 按类型显示图层颜色
    Sub SetUpRenderers()
        Dim ly As New MapObjects2.MapLayer
        Set ly = Map1.Layers("东区面")
        Set ly.Renderer = New ValueMapRenderer
        ly.Renderer.SymbolType = moFillSymbol
        ly.Renderer.Field = "类型"
       
        ly.Renderer.ValueCount = 9
        ly.Renderer.Value(0) = "水域"
        ly.Renderer.Value(1) = "道路"
        ly.Renderer.Value(2) = "公寓"
        ly.Renderer.Value(3) = "教学楼"
        ly.Renderer.Value(4) = "绿地"
        ly.Renderer.Value(5) = "林地"
        ly.Renderer.Value(6) = "办公楼"
        ly.Renderer.Value(7) = "运动场"
        ly.Renderer.Value(8) = "其他"
       
        '为不同类型设置不同颜色
        ly.Renderer.Symbol(0).Color = RGB(20, 157, 255)
        ly.Renderer.Symbol(1).Color = moLightGray
        ly.Renderer.Symbol(2).Color = moWhite
        ly.Renderer.Symbol(3).Color = moWhite
        ly.Renderer.Symbol(4).Color = moGreen
        ly.Renderer.Symbol(5).Color = moGreen
        ly.Renderer.Symbol(6).Color = moWhite
        ly.Renderer.Symbol(7).Color = RGB(251, 197, 4)
        ly.Renderer.Symbol(8).Color = moLightYellow
    End Sub


    ' 添加点注记
    Sub SetUpPointLabelRenderers()
        Dim ly1 As New MapObjects2.MapLayer
        Dim fnt1 As New StdFont
        Set ly1 = Map1.Layers("东区点")
        fnt1.Name = "Arial"
        fnt1.Bold = False
        fnt1.Size = 2
        fnt1.Strikethrough = True
        Dim lr1 As New MapObjects2.LabelRenderer
        ly1.Renderer = lr1
       
        With lr1
            .Field = "名称"
            .SymbolCount = 1
            .AllowDuplicates = True
            .SplinedText = True
            .Symbol(0).Color = moRed
        End With
    End Sub

    ' 添加线注记
    Sub SetUpLineLabelRenderers()
        Dim ly2 As New MapObjects2.MapLayer
        Dim fnt2 As New StdFont
        Dim lr2 As New LabelRenderer
        Set ly2 = Map1.Layers("东区线")
        fnt2.Name = "Arial"
        fnt2.Bold = True
        fnt2.Size = 2
        fnt2.Strikethrough = True
        ly2.Renderer = lr2
       
        With lr2
            .Field = "名称"
            .SymbolCount = 1
            .AllowDuplicates = True
            .SplinedText = False
            .Symbol(0).Color = moPurple
        End With
    End Sub

    最后运行时候的界面:

     

    转载请注明出处,有技术问题,欢迎互相交流,或者留言.
  • 相关阅读:
    可以将class文件反编译成java文件
    软件开发者面试百问
    马云说
    反编译工具jad的使用(将*.class文件变成*.java文件,附带jad.zip包)[转]
    Rose与PowerDesigner:两款建模工具对比分析比较[转]
    Javascript中最常用的55个经典技巧
    如何将.class文件转换成.java文件——JAVA反编译工具总结[转]
    SQL Server补丁版本的检查
    SQL Server 2000 从哪里看是哪个版本
    什么是模式?什么是框架?软件为什么要分层?
  • 原文地址:https://www.cnblogs.com/sunliming/p/1745402.html
Copyright © 2020-2023  润新知