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. java中的包以及内部类的介绍

    1:形式参数和返回值的问题(理解)    (1)形式参数:        类名:需要该类的对象        抽象类名:需要该类的子类对象        接口名:需要该接口的实现类对象    (2)返 ...

  2. follow me learning sqlserver transql

    create DATABASE 教务管理系统on (name=教务管理系统_data,filename='E:\sql\教务管理系统_data.mdf ',size=5mb,maxsize=20mb ...

  3. tornado 协程的实现原理个人理解;

    tornado实现协程的原理主要是利用了(1)python里面的generator (2)future类和ioloop相互配合,两者之间的相互配合是通过gen.coroutine装饰器来实现的: 具体 ...

  4. (转)JAVA实现Windows拨号、IP切换

    原理: 通过调用windows下的dos命令实现拨号 PS:连接名称获取不一定都是适用,但苦于知道的dos命令太少了,只能将就这么用着. 如有更好的方法,烦请不吝赐教. public class Co ...

  5. PKU 1002解题总结

    闲来无事,研究了一下PKU1002的题目,大意就是把含有字母的电话号码,转换为数字,然后再计算每个电话号码出现的次数,输出.本来蛮简单的一道题,结果折腾了好久,主要也是自己的水平太菜了,先是直接用字符 ...

  6. [转]设置Android手机以使用ARM Streamline进行性能分析(一)

    本博客第一次转载的文章,原文访问不到了,这篇是从google cache里挖出来的,为有需要的同学准备.原文地址     Posted by Fang Bao,(鲍方) 4 Comments 11 J ...

  7. (基础篇)php中理解print EOT分界符和echo EOT的用法区别

    html与php编写中echo可以同时输出多个字符串,并不需要圆括号. print只可以同时输出一个字符串,需要圆括号. print的用法和C语言很像,所以会对输出内容里的%做特殊解释. echo无返 ...

  8. 【NOIP2005】过河

    感觉这题好玄--最后看了chty的代码才过,我现在这样必须看题解才能A题怎么办嘛qaq 原题: 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上 ...

  9. 为 C# 代码生成 API 文档(译)

    原文地址:http://broadcast.oreilly.com/2010/09/build-html-documentation-for-y.html#comments Sandcastle 功能 ...

  10. Windows Service 开发,安装与调试

    Visual Studio.net 2010 Windows Service 开发,安装与调试 本示例完成一个每隔一分钟向C:\log.txt文件写入一条记录为例,讲述一个Windows Servic ...