ArcEngine语法笔记(VB)

1、获取图层字段

    Dim pTable As ITable = pLayer
    Dim pField As IField
    For i As Integer = 0 To pTable.Fields.FieldCount - 1

      pField = pTable.Fields.Field(i)
     
    Next

 2、布局视图中的Element分离和合并

  Private Sub PartEleMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PartEleMenuItem.Click
    Dim graphicsContainer As IGraphicsContainer = TryCast(PageLayoutPrint.ActiveView, IGraphicsContainer)
    Dim pGraphContSel As IGraphicsContainerSelect = TryCast(graphicsContainer, IGraphicsContainerSelect)

    pGraphContSel.UnselectAllElements()
    Dim pGroupEle As IGroupElement = Right_MenuStrip.Tag
    If IsNothing(pGroupEle) Then Exit Sub
    For i As Integer = 0 To pGroupEle.ElementCount - 1
      Dim pElement As IElement = pGroupEle.Element(i)
      pGraphContSel.SelectElement(pElement)
      graphicsContainer.AddElement(pElement, 0)
    Next
  
    Right_MenuStrip.Tag = Nothing
    PageLayoutPrint.ActiveView.Refresh()
  End Sub
  '合并Element
  Private Sub MargerEleMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MargerEleMenuItem.Click
    Dim graphicsContainer As IGraphicsContainer = TryCast(PageLayoutPrint.ActiveView, IGraphicsContainer)
    Dim pGraphContSel As IGraphicsContainerSelect = TryCast(graphicsContainer, IGraphicsContainerSelect)
    Dim pGroupEle As IGroupElement = New GroupElement()
    For i As Integer = 0 To pGraphContSel.ElementSelectionCount - 1
      pGroupEle.AddElement(pGraphContSel.SelectedElement(i))
    Next
    pGraphContSel.UnselectAllElements()
    Dim pElement As IElement = CType(pGroupEle, IElement)
    graphicsContainer.AddElement(pElement, 0)
    pGraphContSel.SelectElement(pElement)
    PageLayoutPrint.ActiveView.Refresh()
  End Sub

效果如下图:

 合并前:

合并后:

3、批量修改字段值

VB

  ''' <summary>
  ''' 字段值更新,将Int型的字段值转换成date类型的字段值
  ''' </summary>
  ''' <param name="pFeatureLayer">需要转换的图层</param>
  ''' <returns></returns>
  ''' <remarks></remarks>
  Private Function UpdateFieldValue(ByVal pFeatureLayer As IFeatureLayer)
    Dim pFeatureClass As IFeatureClass = pFeatureLayer.FeatureClass
Dim pFeatureCursor As IFeatureCursor = pFeatureClass.Search(Nothing, False) Dim pFeature As IFeature = pFeatureCursor.NextFeature() While Not IsNothing(pFeature) Dim timevalue As String = pFeature.Value(6).ToString() & "/01/01" '这里的字段索引固定 Dim time As DateTime = CType(timevalue, DateTime) pFeature.Value(19) = time '这里的字段索引固定 pFeature.Store() pFeature = pFeatureCursor.NextFeature() End While System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor) End Function

 C#

 /// <summary>
        /// 字段值更新根据字段名
        /// </summary>
        /// <param name="pFeatureLayer">要素图层</param>
        /// <param name="fieldName">字段名</param>
        private void  UpdateFieldValue(IFeatureLayer pFeatureLayer,string fieldName)
        {
            IFeatureClass pFeatureClass =pFeatureLayer.FeatureClass;
            IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, false);
            IFeature pFeature = pFeatureCursor.NextFeature();
            while(pFeature!=null)
            {
                pFeature.set_Value(pFeatureClass.FindField(fieldName), 70);
                pFeature.Store();
                pFeature = pFeatureCursor.NextFeature();
            }
            System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor);
        }

4、ImageComboBoxEdit 加载字段

Friend WithEvents cboLayerList As DevExpress.XtraEditors.ImageComboBoxEdit
  Private Sub AddLayer()
    cboLayerList.Properties.Items.Clear()
    For i As Integer = 0 To m_AssetApplication.MainMapCon.LayerCount - 1
      Dim icbi As ImageComboBoxItem = New ImageComboBoxItem
      Dim pLayer As ILayer = m_AssetApplication.MainMapCon.get_Layer(i)
      icbi.Description = pLayer.Name
      icbi.Value = pLayer
      cboLayerList.Properties.Items.Add(icbi)
    Next
    cboLayerList.EditValue = m_AssetApplication.MainMapCon.get_Layer(0)
  End Sub

 5、图层查询 IFeatureSelection

  Protected Overridable Function QueryByType(ByVal querystring As String) As Boolean
    Dim pQueryFilter As IQueryFilter = New QueryFilter
    pQueryFilter.WhereClause = querystring
    Dim pFeatureLayer As IFeatureLayer = tmpLayer
    Dim pSelection As IFeatureSelection = pFeatureLayer
    If CheckSearchFromSelection.Checked Then '从选择集中查询数据
      pSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultAnd, False)
    Else    ‘从图层中查询数据
      m_AssetApplication.MainMapCon.Map.ClearSelection() '清空选择集
      pSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultNew, False)
    End If
    If pSelection.SelectionSet.Count = 0 Then
      MessageBox.Show("查询结果为空!")
      Return True
    End If
    Return False
  End Function

 6、查询删除数据

 Dim pQueryFilter As IQueryFilter = New QueryFilter()
 pQueryFilter.WhereClause = PointId & " in (" & ids & ")" 'ids='1','2'
 Dim pTable As ITable = pPointFeaCs
 pTable.DeleteSearchedRows(pQueryFilter)

 7、添加REST服务地址

Dim pRestLayer As IMapServerRESTLayer = New MapServerRESTLayer
pRestLayer.Connect("http://172.0.0.1:7080/PBS/rest/services/MyPBSService1/MapServer")
pMap.AddLayer(pRestLayer)
原文地址:https://www.cnblogs.com/GIScore/p/5303123.html