• VBA+AO入门50例完全注释版(转载)


     

    VBA+AO入门50例完全注释版

    1.
    Sub MyMacro()
    Dim pMxDocument As IMxDocument '
    地图文档
    Set pMxDocument = Application.Document '
    获取当前应用程序的文档
    MsgBox pMxDocument.FocusMap.Name '
    显示当前地图的名称
    End Sub


    2.
    Sub MyMacro()
    Dim pMxDocument As IMxDocument '
    地图文档
    Dim pMaps As IMaps '
    地图集
    Dim pMap As IMap '
    地图
    Set pMxDocument = Application.Document '
    获取当前应用程序的文档
    Set pMaps = pMxDocument.Maps '
    获取当前地图文档的地图集
    If pMaps.Count > 1 Then '
    如果该地图集的地图数大于1
    Set pMap = pMaps.Item(1) '
    获取该地图集中的第一幅地图
    MsgBox pMap.Name '
    显示该地图的名称
    End If
    End Sub


    3.
    Sub MyMacro()
    Dim pMxDocument As IMxDocument '
    地图文档
    Dim pMap As IMap '
    地图
    Dim lCount As Long
    Dim lIndex As Long
    Set pMxDocument = Application.Document '
    获取当前应用程序的文档
    Set pMap = pMxDocument.FocusMap '
    获取当前地图
    lCount = 0
    For lIndex = 0 To (pMap.LayerCount - 1)
    If TypeOf pMap.Layer(lIndex) Is IFeatureLayer Then '
    如果当前地图的第lIndex层的类型是IFeatureLayer
    lCount = lCount + 1 '
    计数器加1
    End If
    Next lIndex
    MsgBox "Number of the feature layers " & _
    "in the active map: " & lCount '
    显示当前地图的要素层的总数
    End Sub


    4.
    Sub MyMacro()
    Dim pMxDocument As IMxDocument '
    获取当前应用程序的文档
    Dim pMaps As IMaps '
    地图集
    Dim pMap As IMap '
    地图
    On Error GoTo SUB_ERROR '
    错误处理
    Set pMxDocument = Application.Document '
    获取当前应用程序的文档
    Set pMaps = pMxDocument.Maps '
    获取当前地图文档的地图集
    Set pMap = pMaps.Item(1) '
    获取该地图集中的第一幅地图
    MsgBox pMap.Name '
    显示该地图的名称
    Exit Sub
    SUB_ERROR: '
    行标签
    MsgBox "Error: " & Err.Number & "-" & Err.Descripttion '
    显示错误数和错误信息
    End Sub


    5.
    '
    是图层可视
    Public Sub MakeLayerVisible()
    Dim pMxDocument As IMxDocument '
    地图文档
    Dim pMap As IMap '
    地图
    Dim pFeatureLayer As IFeatureLayer '
    要素层
    Dim pActiveView As IActiveView '
    活动视图
    Dim pContentsView As IContentsView '
    窗口内容表

    '
    获取地图的第一层
    Set pMxDocument = ThisDocument '
    获取当前应用程序的文档
    Set pMap = pMxDocument.FocusMap '
    获取当前地图
    Set pFeatureLayer = pMap.Layer(0) '
    获取当前地图的第一层

    '
    如果要素层不可见,则使其可见
    If Not pFeatureLayer.Visible Then
    pFeatureLayer.Visible = True
    End If

    '
    刷新地图
    Set pActiveView = pMap '
    将当前地图设为活动地图
    pActiveView.Refresh '
    刷新

    '
    刷新窗口内容表
    Set pContentsView = pMxDocument.CurrentContentsView '
    获取当前地图文档的窗口内容表
    pContentsView.Refresh pFeatureLayer '
    刷新
    End Sub


    6.
    '
    NAME查询要素
    Private Function GetCountyFeature(pFeatureLayer As IFeatureLayer, strCountyName As String) As IFeature

    '
    查找要素类
    Dim pFeatureClass As IFeatureClass '
    要素类
    Dim pQueryFilter As IQueryFilter '
    查询过滤器
    Dim pFeatureCursor As IFeatureCursor

    Set pFeatureClass = pFeatureLayer.FeatureClass '
    从要素层获取要素类
    Set pQueryFilter = New QueryFilter '
    创建一个新的查询过滤器
    pQueryFilter.WhereClause = "NAME = '" & strCountyName & "'" '
    按郡名查找
    Set pFeatureCursor = pFeatureClass.Search (pQueryFilter, False) '
    获取查询到的要素对象

    '
    获取要素
    Dim pFeature As IFeature '
    要素

    Set pFeature = pFeatureCursor.NextFeature '
    获取查询结果的下一个要素
    If pFeature Is Nothing Then '
    如果该要素不存在
    Set GetCountyFeature = Nothing '
    返回值设为空
    Else
    Set GetCountyFeature = pFeature '
    将该要素设为返回值
    End If
    End Function

    '放大/缩小
    Sub MyZoom()

    Dim pDoc As IMxDocument '
    地图文档
    Dim pActiveView As IActiveView '
    活动地图
    Dim pEnv As IEnvelope '
    显示范围

    Set pDoc = Application.Document '
    获取当前文档,等同于ThisDoucument
    Set pActiveView = pDoc.ActiveView '
    获取当前活动地图

    Set pEnv = pActiveView.Extent '
    获取当前显示范围
    pEnv.Expand 0.5, 0.5, True '
    按比例放大两倍,把0.5改为2则为缩小一半
    pActiveView.Extent = pEnv '
    更新显示范围
    pActiveView.Refresh '
    刷新

    End Sub


    MxApplication
    代表ArcMap本身,只管理一个文档MxDocumentArcMap是单文档界面)。MxDocument管理一组Map对象和一个PageLayout对象。在数据视图下,ActiveView是一个Map;而在页面视图下,ActiveViewPageLayout。无论在何种视图下,总是只有一个FocusMap,显示操作都是对ActiveView进行。





    '
    全图:
    Sub FullExtentPlus()

    Dim pDoc As IMxDocument '
    地图文档
    Dim pActiveView As IActiveView '
    活动地图

    Set pDoc = Application.Document '
    获取当前地图文档
    Set pActiveView = pDoc.activeView '
    获取当前活动地图

    pActiveView.Extent = pDoc.ActiveView.FullExtent '
    全图显示
    pActiveView.Refresh '
    刷新当前视图

    End Sub






    '
    清除图层
    Private Sub ClearLayers()

    Dim pDoc As IMxDocument '
    地图文档
    Dim pActiveView as IActiveView '
    活动地图
    Dim pMap As IMap '
    地图

    Set pDoc = Application.Document '
    获取当前地图文档
    Set pActiveView = pDoc.ActiveView '
    获取当前活动地图

    If TypeOf pActiveView Is IMap Then '
    如果当前活动地图为数据视图模式
    Set pMap = pActiveView '
    获取当前地图
    pMap.ClearLayers '
    清除所有图层
    pDoc.UpdateContents '
    更新窗口内容表
    pActiveView.Refresh '
    刷新
    End If

    End Sub





    '
    查找图层
    Function FindLayer(map As IMap, name As String) As ILayer

    Dim i As Integer

    For i = 0 To map.LayerCount - 1 '
    第一层的索引为1
    If map.Layer(i).name = name Then '
    如果第i层的名称为name
    Set FindLayer = map.Layer(i) '
    获取并返回该层
    Exit Function
    End If
    Next

    End Function







    '
    添加图层
    Sub AddLayer()

    Dim wksFact As IWorkspaceFactory '
    工作空间管理器
    Dim wks As IFeatureWorkspace '
    要素工作空间
    Dim fc As IFeatureClass '
    要素类
    Dim lyr As IFeatureLayer '
    要素层
    Dim ds As IDataset '
    数据集
    Dim mxDoc As IMxDocument '
    地图文档
    Dim map As IMap '
    地图

    Set wksFact = New ShapefileWorkspaceFactory '
    创建Shape工作空间管理器
    Set wks = wksFact.OpenFromFile(“c:\Data\shp”, 0) '
    获取工作空间
    Set fc = wks.OpenFeatureClass(“BigCypress”) '
    获取要素类
    Set lyr = New FeatureLayer '
    创建要素层
    Set lyr.FeatureClass = fc '
    向要素层中添加要素类
    Set ds = fc '
    获取数据集
    lyr.Name = ds.Name '
    用要素类的名称命名要素层
    Set pDoc = Application.Document '
    获取当前地图文档
    Set mxmap = mxDoc.FocusMap '
    获取当前地图
    map.AddLayer lyr '
    添加图层

    End Sub







    '
    添加文本
    Private Sub Hello()

    Dim pDoc As IMxDocument '
    地图文档
    Dim pActiveView As IActiveView '
    活动地图
    Dim sym As ITextSymbol '
    文本符号
    Dim bnds As IArea '


    Set pDoc = Application.Document '
    获取当前地图文档
    Set pActiveView = pDoc.activeView '
    获取当前活动地图

    Set sym = New TextSymbol '
    创建文本符号
    sym.Font.size = 18 '
    设置字体大小

    With pActiveView.ScreenDisplay '
    对显示屏操作
    Set bnds = .DisplayTransformation.VisibleBounds '
    获取可视范围
    .StartDrawing .hDC, esriNoScreenCache
    .SetSymbol sym '
    设置要绘制的符号
    .DrawText bnds.Centroid, "Hello" '
    添加文本
    .FinishDrawing '
    完成绘制
    End With

    End Sub







    '
    选择要素
    Sub SelectFeatures()

    Dim mxDoc As IMxDocument '
    地图文档
    Dim lyr As IFeatureLayer '
    要素层
    Dim sel As IFeatureSelection '
    选择集
    Dim filter As IQueryFilter '
    查询过滤器
    Dim selEvents As ISelectionEvents '
    ???

    Set mxDoc = Application.Document '
    获取当前地图文档
    Set lyr = FindLayer(mxDoc.FocusMap, "BUILDING") '
    调用FindLayer函数查找图层
    Set sel = lyr '
    将找到的图层设为选择集
    Set filter = New QueryFilter '
    创建查询过滤器
    filter.WhereClause = "BDNAME ='
    实验楼A'" '设置where子句
    sel.SelectFeatures filter, esriSelectionResultNew, False '
    选中满足条件的要素
    mxDoc.ActiveView.PartialRefresh esriViewGeoSelection, Nothing, Nothing '
    绘出选中的要素
    Set selEvents = mxDoc.FocusMap '
    ???
    selEvents.SelectionChanged '
    通知系统选择已经改变了

    End Sub








    '
    监听

    Dim WithEvents g_Map As map

    Private Sub UIButtonControl1_Click()
    Dim mxDoc As IMxDocument '
    地图文档
    Dim lyr As IFeatureLayer '
    要素层
    Dim sel As IFeatureSelection '
    选择集
    Dim filter As IQueryFilter '
    查询过滤器
    Dim selEvents As ISelectionEvents '
    ???

    Set g_Map = mxDoc.FocusMap '
    获取当前地图

    Set mxDoc = Application.Document '
    获取当前地图文档
    Set lyr = FindLayer(mxDoc.FocusMap, "BUILDING") '
    调用FindLayer函数查找图层
    Set sel = lyr '
    将找到的图层设为选择集
    Set filter = New QueryFilter '
    创建查询过滤器
    filter.WhereClause = "BDNAME ='
    实验楼A'" '设置where子句
    sel.SelectFeatures filter, esriSelectionResultNew, False '
    选中满足条件的要素
    mxDoc.activeView.PartialRefresh esriViewGeoSelection, Nothing, Nothing '
    绘出选中的要素
    Set selEvents = mxDoc.FocusMap '
    ???
    selEvents.SelectionChanged '
    通知系统选择已经改变了

    End Sub

    '
    查找图层
    Function FindLayer(map As IMap, name As String) As ILayer

    Dim i As Integer

    For i = 0 To map.LayerCount - 1 '
    第一层的索引为1
    If map.Layer(i).name = name Then '
    如果第i层的名称为name
    Set FindLayer = map.Layer(i) '
    获取并返回该层
    Exit Function
    End If
    Next

    End Function

    Private Sub g_Map_SelectionChanged()

    Dim activeView As IActiveView '
    活动地图
    Dim featureEnum As IEnumFeature '
    列举的要素?
    Dim feat As IFeature '
    要素
    Dim index As Long
    Dim Msg As String

    Set activeView = g_Map '
    获取当前地图
    Set featureEnum = activeView.Selection '
    列举所选的要素
    featureEnum.Reset '
    还原至初始顺序
    Set feat = featureEnum.Next '
    获取选择集中第一个要素
    Do While Not feat Is Nothing '
    如果要素存在
    index = feat.Fields.FindField(“Name”) '
    获取Name字段的索引值
    If index <> -1 Then MsgBox Msg & chr(13) & chr(10) & feat.Value(index) '
    显示该要素的Name
    Set feat = featureEnum.Next '
    移至选择集中的下一个要素
    Loop

    End Sub

     

  • 相关阅读:
    Spark Sort-Based Shuffle具体实现内幕和源码详解
    Spark-2.0原理分析-shuffle过程
    Spark Shuffle 中 JVM 内存使用及配置内幕详情
    Spark中的Spark Shuffle详解
    Spark Shuffle Write阶段磁盘文件分析
    Spark Sort Based Shuffle内存分析
    Spark Storage(二) 集群下的broadcast
    Spark SQL metaData配置到Mysql
    TweenJS----前端常用的js动画库,缓动画和复制动画的制作,效果非常好。
    Storm入门
  • 原文地址:https://www.cnblogs.com/atravellers/p/1646606.html
Copyright © 2020-2023  润新知