zoukankan      html  css  js  c++  java
  • Layer相关的一些函数总结(VB.Net源码)

    本文是一些和layer相关的函数,如获得某一类型的所有layer,根据图层名获得layer,获得某layer所属的grouplayer等。 

      

    ''' <summary>
      ''' 得到pMap中所有的FeatureLayer图层
      ''' </summary>
      ''' <param name="pMap">IMap对象</param>
      ''' <returns>查询图层列表</returns>
      ''' <remarks></remarks>
      Public Shared Function GetAllFeatureLayer(ByVal pMap As IMap) As IEnumLayer
        If pMap Is Nothing OrElse pMap.LayerCount = 0 Then Return Nothing
        Dim pEnumLayer As IEnumLayer
        Dim pId As New UID
        Try
          pId.Value = "{" & GetType(IFeatureLayer).GUID.ToString & "}" ''查找出所有的IFeatureLayer对象(包括IAnnotationLayer)
          pEnumLayer = pMap.Layers(pId, True)
          Return pEnumLayer
        Catch ex As Exception
          Return Nothing
        End Try
      End Function
      
      ''' <summary>
      ''' 获得当前地图中所有某一类型的图层
      ''' </summary>
      ''' <param name="pMap">IMap对象</param>
      ''' <param name="pType">图层类型,形式如:GetType(ILayer)</param>
      ''' <returns>该类型图层的list</returns>
      ''' <remarks></remarks>
      Public Shared Function GetAllLayers(ByVal pMap As IMap, ByVal pType As Type) As List(Of ILayer)
        If pMap Is Nothing OrElse pMap.LayerCount = 0 Then Return Nothing
        Dim pLayers As New List(Of ILayer)
        Dim pEnumLayer As IEnumLayer
        Dim pId As New UID
        Try
          pId.Value = "{" & pType.GUID.ToString & "}" ''查找出所有的IFeatureLayer对象(包括IAnnotationLayer)
          pEnumLayer = pMap.Layers(pId, True)

          Dim pLayer As ILayer = pEnumLayer.Next()
          While Not pLayer Is Nothing
            pLayers.Add(pLayer)
            pLayer = pEnumLayer.Next()
          End While
          Return pLayers
        Catch ex As Exception
          Return Nothing
        End Try
      End Function
      ''' <summary>
      ''' 在地图中选择出对应为pFClass的第一个图层
      ''' </summary>
      ''' <param name="pMap">IMap对象</param>
      ''' <param name="pFClass">IFeatureClass对象</param>
      ''' <returns></returns>
      ''' <remarks></remarks>
      Public Shared Function GetLayerByFeatureClass(ByVal pMap As IMap, ByVal pFClass As IFeatureClass) As IFeatureLayer
        If pMap Is Nothing OrElse pFClass Is Nothing Then Return Nothing
        Dim pEnumLayer As IEnumLayer
        Dim pId As New UID
        Try
          pId.Value = "{" & GetType(IFeatureLayer).GUID.ToString & "}" ''查找出所有的IFeatureLayer对象(包括IAnnotationLayer)
          pEnumLayer = pMap.Layers(pId, True)
          Dim pLayer As IFeatureLayer = pEnumLayer.Next()
          While Not pLayer Is Nothing
            If pLayer.FeatureClass Is pFClass Then
              Return pLayer
            End If
            pLayer = pEnumLayer.Next()
          End While
          Return Nothing
        Catch ex As Exception
          Return Nothing
        End Try
      End Function
      ''' <summary>
      ''' 查询pLayer所在的IGroupLayer
      ''' </summary>
      ''' <param name="pMap">IMap对象</param>
      ''' <param name="pLayer">ILayer对象</param>
      ''' <returns>IGroupLayer对象</returns>
      ''' <remarks>
      ''' 无或异常返回Nothing
      ''' </remarks>
      Public Shared Function GetGroupLayerByLayer(ByVal pMap As IMap, ByVal pLayer As ILayer) As IGroupLayer
        If pMap Is Nothing OrElse pLayer Is Nothing Then Return Nothing
        Dim pEnumLayer As IEnumLayer
        Dim pId As New UID
        Try
          pId.Value = "{" & GetType(IGroupLayer).GUID.ToString & "}" ''查找出所有的IFeatureLayer对象(包括IAnnotationLayer)
          pEnumLayer = pMap.Layers(pId, True)
          Dim pGLayer As IGroupLayer = pEnumLayer.Next()
          While Not pGLayer Is Nothing
            Dim i As Integer
            For i = 0 To CType(pGLayer, ICompositeLayer).Count - 1
              If CType(pGLayer, ICompositeLayer).Layer(i) Is pLayer Then
                Return pGLayer
              End If
            Next
            pGLayer = pEnumLayer.Next()
          End While
          Return Nothing
        Catch ex As Exception
          Return Nothing
        End Try
      End Function
      ''' <summary>
      ''' 查找出pFeature所在的图层
      ''' </summary>
      ''' <param name="pFeature">IFeature对象</param>
      ''' <param name="pMap">IMap对象</param>
      ''' <returns>查询图层</returns>
      ''' <remarks>
      ''' 通过比对IMap中图层的FeatureClass.AliasName和IFeature.Class.AliasName进行判断
      ''' </remarks>
      Public Shared Function SearchLayer(ByVal pFeature As IFeature, ByVal pMap As IMap) As IFeatureLayer
        Try
          If pFeature Is Nothing Or pMap Is Nothing OrElse pMap.LayerCount = 0 Then Return Nothing

          Dim pEnumLayer As IEnumLayer
          Dim pLayer As IFeatureLayer
          Dim pId As New UID

          pId.Value = "{" & GetType(IFeatureLayer).GUID.ToString & "}"
          pEnumLayer = pMap.Layers(pId, True)
          pEnumLayer.Reset()
          pLayer = pEnumLayer.Next
          While pLayer IsNot Nothing
            If pLayer.FeatureClass IsNot Nothing Then
              If pLayer.FeatureClass.AliasName = pFeature.Class.AliasName Then  '当pLayer中没有对象时,pLayer.FeatureClass为空
                Return (pLayer)
              End If
            End If
            pLayer = pEnumLayer.Next
          End While
          Return Nothing
        Catch ex As Exception
          Return Nothing
        End Try
      End Function
      ''' <summary>
      ''' 查询Map中的图层名为sLayerName的图层
      ''' </summary>
      ''' <param name="pMap">IMap对象</param>
      ''' <param name="sLayerName">图层名称</param>
      ''' <returns></returns>
      ''' <remarks></remarks>
      Public Shared Function GetLayerByName(ByVal pMap As IMap, ByVal sLayerName As String) As ILayer
        If pMap Is Nothing OrElse pMap.LayerCount = 0 Then Return Nothing

        Try
          Dim pId As New UID
          pId.Value = "{" & GetType(ILayer).GUID.ToString & "}"

          Dim pEnumLayer As IEnumLayer = pMap.Layers(pId, True)
          pEnumLayer.Reset()
          Dim pLayer As ILayer
          pLayer = pEnumLayer.Next
          While pLayer IsNot Nothing
            If pLayer.Name = sLayerName Then
              Exit While
            End If
            pLayer = pEnumLayer.Next
          End While
          Return pLayer
        Catch ex As Exception
          Return Nothing
        End Try
      End Function
      ''' <summary>
      ''' 根据图层名称取得其图层所在编号,如果没有此图层,则返回-1
      ''' </summary>
      ''' <param name="LayerName"></param>
      ''' <param name="pMap"></param>
      ''' <returns></returns>
      ''' <remarks></remarks>
      Public Shared Function GetFeatureLayerIndex(ByVal LayerName As String, ByVal pMap As IMap) As Integer
        If pMap Is Nothing OrElse pMap.LayerCount = 0 Then Return -1

        Dim Counter As Long
        Try
          For Counter = 0 To pMap.LayerCount - 1
            If TypeOf pMap.Layer(Counter) Is IFeatureLayer Then
              If pMap.Layer(Counter).Name = LayerName Then
                Return Counter
              End If
            End If
          Next Counter
          Return -1
        Catch ex As Exception
          Return -1
        End Try
      End Function
      
      ''' <summary>
      ''' 根据文件路径创建layer
      ''' </summary>
      ''' <param name="pFilePath">文件全路径</param>
      ''' <returns>返回创建的layer</returns>
      ''' <remarks></remarks>
      Shared Function CreateLayerFromPath(ByVal pFilePath As String) As ILayer
        Try
          'Get the ILayerFactoryHelper interface
          Dim pLayerFactoryHelper As ILayerFactoryHelper
          pLayerFactoryHelper = New LayerFactoryHelper
          'Get the IEnumLayer interface through the ILayerFatcoryHelper interface
          Dim pFileName As IFileName = New FileName
          pFileName.Path = pFilePath
          Dim pEnumLayer As IEnumLayer
          pEnumLayer = pLayerFactoryHelper.CreateLayersFromName(pFileName)
          pEnumLayer.Reset()
          'Get the ILayer interface
          Dim pLayer As ILayer
          pLayer = pEnumLayer.Next
          'Loop through layers
          Dim pReLayer As ILayer = Nothing
          Do While Not pLayer Is Nothing
            'Add the layer to the map
            pReLayer = pLayer
            pLayer = pEnumLayer.Next
          Loop
          Return pReLayer
        Catch ex As Exception
          Return Nothing
        End Try
      End Function

  • 相关阅读:
    JS中 try...catch...finally (转)
    Npm基本指令(转)
    常用Dos(转)
    理解Node.js异步非阻塞I/O与传统线性阻塞IO的区别(转)
    Java 连接 Access数据库方式
    感知器-从零开始学深度学习
    Oracle的SQL语句中如何处理‘&’符号
    (转)远程桌面超出最大连接数怎么办
    url中含有%
    (转)silverlight应用程序中未处理的错误代码:2104 类别:InitializeError
  • 原文地址:https://www.cnblogs.com/holygis/p/1777948.html
Copyright © 2011-2022 走看看