1.开始编辑,save feature property,停止编辑

IWorkspace workspace = ((IDataset)pFeatureClass).Workspace;
IWorkspaceEdit workspaceEdit = workspace as IWorkspaceEdit;

然后开启编辑状态:

bool startEdit = workspaceEdit.IsBeingEdited();
if (!startEdit)
{
    workspaceEdit.StartEditing(false);
}
workspaceEdit.StartEditOperation();

然后获取IFeatureCursor和IFeature:

pFeatureCursor = pFeatureClass.Search(pQueryFilter, false);

//注意这里一定要为false,因为http://forums.arcgis.com/threads/45879-Cannot-call-Store-on-a-recycled-row-while-editing

//如果为true可能会产生0x80040958的错误
pFeature = pFeatureCursor.NextFeature();

然后用IFeature.set_Value()方法对Feature进行属性表值的修改:

pFeature.set_Value(i, valueToSet);

修改完成,要用IFeature.store()方法保存:

pFeature.Store();

然后最好将Feature释放掉,再进行接下来的修改:

System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeature);
pFeature = null;
pFeature = pFeatureCursor.NextFeature();

接下来用IFeatureCursor.Flush():

pFeatureCursor.Flush();
System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor);

最后停止编辑状态:
workspaceEdit.StopEditOperation();
startEdit = workspaceEdit.IsBeingEdited();
if (!startEdit)
{
   workspaceEdit.StopEditing(true);
}

2.获取图层

        public IFeatureLayer GetFeatureLayerFromMap(string LayerName, IMap pMap)
{
IFeatureLayer rLayer = null;
for (int i = 0; i < pMap.LayerCount; i++)
{
ESRI.ArcGIS.Carto.ILayer lyr = pMap.get_Layer(i);
if (lyr is FeatureLayer)
{
if (lyr.Name.ToUpper() == LayerName.ToUpper())
{
rLayer = lyr as IFeatureLayer;
break;
}
else
{
IFeatureClass tFeaCls = (lyr as IFeatureLayer).FeatureClass;
if (tFeaCls != null && (tFeaCls as IDataset).Name.ToUpper() == LayerName.ToUpper())
{
rLayer = lyr as IFeatureLayer;
return rLayer;
}
else if (tFeaCls != null && (tFeaCls as IDataset).Name.Contains("."))
{
if ((tFeaCls as IDataset).Name.Substring((tFeaCls as IDataset).Name.IndexOf(".") + 1).ToUpper() == LayerName.ToUpper())
{
rLayer = lyr as IFeatureLayer;
return rLayer;
}
}
}
}
else if (lyr is IGroupLayer)
{
rLayer = GetFeatureLayerFromGroupLayer(lyr, LayerName);
if (rLayer != null)
break;
}
}
return rLayer;
} private static LayerHelper _mAppConst = null;
private static readonly object _lockAssistant = new object();
public static LayerHelper Instance
{
get
{
if (_mAppConst == null)
{
lock (_lockAssistant)
{
if (_mAppConst == null)
_mAppConst = new LayerHelper();
}
}
return _mAppConst;
}
}
private LayerHelper() { } ///
/// 根据图层名(要素名)得到组合图层中的图层
///
///图层
///图层名(要素名)
/// 图层
public IFeatureLayer GetFeatureLayerFromGroupLayer(ESRI.ArcGIS.Carto.ILayer pLyr, string LyrName)
{
if (pLyr is ESRI.ArcGIS.Carto.IGroupLayer)
{
ICompositeLayer pCompLayer = pLyr as ICompositeLayer; for (int i = 0; i < pCompLayer.Count; i++)
{
IFeatureLayer rLayer = GetFeatureLayerFromGroupLayer(pCompLayer.get_Layer(i), LyrName);
if (rLayer != null)
{
return rLayer;
}
}
}
else if (pLyr is ESRI.ArcGIS.Carto.IFeatureLayer)
{
if (pLyr.Name.ToUpper() == LyrName.ToUpper())
{
return pLyr as IFeatureLayer;
}
else
{
IFeatureClass tFeaCls = (pLyr as IFeatureLayer).FeatureClass;
if (tFeaCls != null && (tFeaCls as IDataset).Name.ToUpper() == LyrName.ToUpper())
return pLyr as IFeatureLayer;
else if (tFeaCls != null && (tFeaCls as IDataset).Name.Contains("."))
{
if ((tFeaCls as IDataset).Name.Substring((tFeaCls as IDataset).Name.IndexOf(".") + 1).ToUpper() == LyrName.ToUpper())
return pLyr as IFeatureLayer;
}
return null;
}
}
return null;
}

  

arcgis engine 基础代码的更多相关文章

  1. ArcGIS Engine 10.2 如何发布服务

    http://blog.csdn.net/arcgis_all/article/details/17376397 1 ArcGIS Engine 10.2 如何发布服务 ArcGIS Engine的代 ...

  2. ArcGIS Engine开发前基础知识(3)

    对象模型图 一.对象模型图中的类与接口 ArcGIS Engine 提供大量的对象,这些对象之间存在各种各样的关系,如继承.组合.关联等.对象模型图(Object model diagram,ODM) ...

  3. ArcGIS Engine开发前基础知识(4)

    ArcGIS不同开发方式的比较 关于GIS应用软件的开发,通常有三种方式:C/S架构.网络GIS和移动GIS.ArcGIS平台提供了对三种开发方式的支持,对于采用从C/S架构的大多数开发者来讲,首先想 ...

  4. ArcGIS Engine开发前基础知识(2)

    ArcGIS基本控件简介 ArcGIS Engine控件是一组可视化的开发组件,每个ArcGIS Engine控件都是一个COM组件.这些组件包括MapControl,PageLayoutContro ...

  5. J2EE(java)后台调用ArcGIS Engine(AE)的部署和代码

    arcgis的BS开发解决方案一直是个坑,主推的地图服务查询速度慢,需要异步,功能少.相对来说主要用于CS的AE功能更强大全面,只是部署有点复杂 本文软件环境: win7 sp1 64位 MyEcli ...

  6. ArcGIS Engine开发基础总结(一)

    标准Engine功能 地图浏览    地图制作 数据查询 数据分析 及 所有的开发控件 —MapControl, PageLayout, Toolbar, TOC, ArcReader 对所有矢量和栅 ...

  7. ArcGIS Engine开发鹰眼图的功能(基础篇)

    鹰眼是用于调节全视域范围内主地图显示范围情况的副地图.它体现了地图整体与详细局部的关系. 用户可以通过鼠标单击或者画框等动作实现鹰眼与主地图的交互情况. 鹰眼功能的原理是通过主地图窗口的地图控件和鹰眼 ...

  8. vs.net调试ArcGIS Engine代码查看变量时,提示“要检查本机对象,请启用本机代码调试。” 的解决方法

    用vs2017 调试 查看ArcGIS Engine 的变量时 会提示如下图所示的错误: 解决方法: 工具->选项->调试->常规->使用托管的兼容模式 如下图所示: 2.设置 ...

  9. ArcGIS Engine开发前基础知识(1)

    ArcGIS二次开发是当前gis领域的一项重要必不可少的技能.下面介绍它的基本功能 一.ArcGIS Engine功能 在使用之前首先安装和部署arcgis sdk,(在这里不在赘述相关知识)可以实现 ...

随机推荐

  1. Android 生成颜色器

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...

  2. 《Java中方法的重写》

    //方法的重写 /* 注意:方法的重写要遵循“两同两小一大”规则 “两同”即方法名相同.形参列表相同: “两小”(1)指的是子类方法返回值类型比父类方法的返回值类型更小或相等,[什么意思?] (2)子 ...

  3. WebView WebViewClient WebChromeClient

    在android中,浏览器的功能分成几个部分,每个部分分工明确,互相协作.其中: 1. WebView :专门负责网页数据解析和渲染: 2. WebViewClient :帮助WebView处理各种请 ...

  4. php中json_encode UTF-8中文乱码问题

    最近在接口代码当中用到过json_encode,在网上找到说json_encode编码设置为UTF-8中文就不会乱码,经验证这办法确实是有效果的,但是不知道为什么,代码在用过一段时间之后就不太管用了. ...

  5. Unity UGUI RectTransform图解

    UGUI RectTransform.Unity RectTransform详解 The first:look look API. http://docs.unity3d.com/ScriptRefe ...

  6. Linux压缩那些事儿

    tar简介 Linux的压缩命令的源文件只能有一个,这意味在压缩之前不得不先将要压缩的所有文件打包成一个包,然后再压缩包,这样来完成对多个文件的压缩.所以在了解解压缩之前就必须先了解打包命令. Lin ...

  7. Equal

    package com; public class StringEquals { public static void main(String[] args) { String s1=new Stri ...

  8. 在Bootstrap中 强调相关的类

    .text-muted:提示,使用浅灰色(#999) .text-primary:主要,使用蓝色(#428bca) .text-success:成功,使用浅绿色(#3c763d) .text-info ...

  9. 2016HUAS_ACM暑假集训2L - Points on Cycle(圆上的点)

    一个简单的几何题,自己在纸上列出方程解出结果的表达式,再用程序表达出来就行了. 不过老司机(老司机的woodcoding)说用旋转向量法比较简单,有时间要去看一看. 大致题意:一个圆心在原点的圆,半径 ...

  10. [BZOJ 3503][Cqoi 2014]和谐矩阵

    我觉得这一题的样例输出一点都不和谐,大家千万别像我一样被坑了…… 题目不算难,果然是进错省系列555,不过搞出 O(n*m*2m) 的还是不要挣扎的比较好 我们暴力地推出第 n 行 第 m 列中每个数 ...