Layer相關的一些函數總結(VB.Net源碼)

來源:互聯網
上載者:User

本文是一些和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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.