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. C# winform程序如何打包64位安装程序

    故事背景: 原来在客户电脑上工作的很正常的程序,在客户将其操作系统从32位换为64位之后,出现了不能正常使用的问题. --------------------------- 解决办法: 1:将解决方案 ...

  2. docker 源码分析 二(基于1.8.2版本),docker client与daemon交互

    (2) 那我们通过docker客户端发送一个命令,docker是怎样接收到并处理的呢,我们就举个例子来看一下,比如docker pull 命令: 我们回到 docker/docker.go 中,在上一 ...

  3. 网页中模拟Excel电子表格实例分享

    原文来自http://www.6excel.com/doc/20049 一.电子表格中用到的快捷键: ← → ↑ ↓  :左,右,上,下 Home :当前行的第一列 End  :当前行的最后一列 Sh ...

  4. BZOJ 1798 (线段树||分块)的标记合并

    我原来准备做方差的.. 结果发现不会维护两个标记.. 就是操作变成一个 a*x+b ,每次维护a , b 即可 加的时候a=1 ,b=v 乘的时候a=v ,b=0 #include <cstdi ...

  5. 图片过大导致OOM

    原文:http://www.codeceo.com/article/android-load-image-oom.html 一.分析 在加载图片过程中出现的OOM的几种情况: 1. 加载的图片过大 2 ...

  6. Android TextView图文混合编排

    Android TextView图文混合编排 实现技术细节不难,两个要点:1.html代码的混合编写.2,重写ImageGetter.例如:布局: <?xml version="1.0 ...

  7. overflow 清除浮动

    对overflow的理解还停留在“规定当内容溢出元素框时发生的事情”,这种简单的认识上,今天发现overflow还可以清除浮动. <style> .outside{ height:auto ...

  8. WindowsPhone开发—— 使用手绘图片做景区导览地图

    前些日子在做景区App遇到需求,使用手绘图片做一个简易的地图,支持放大缩小平移以及显示景点Mark,安卓上可以使用一个叫做“mAppWidget”的开源库来完成,WP上有人建议用ArcGIS,但是考虑 ...

  9. NPOI设置Excel保护

    有时,我们可能需要某些单元格只读,如在做模板时,模板中的数据是不能随意让别人改的.在Excel中,可以通过“审阅->保护工作表”来完成,如下图:  那么,在NPOI中有没有办法通过编码的方式达到 ...

  10. Js控制滚动条

    1>全局控制 //向上滑动显示 var initTop = 0; var i = 1; $(window).scroll(function(){ var scrollTop = $(docume ...