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. CSS行内元素和块级元素的居中

    一.水平居中 行内元素和块级元素不同,对于行内元素,只需在父元素中设置text-align=center即可; 对于块级元素有以下几种居中方式: 1.将元素放置在table中,再将table的marg ...

  2. BZOJ 1833 count 数字计数

    sb数位dp. #include<iostream> #include<cstdio> #include<cstring> #include<algorith ...

  3. M5: 使用StorageFile

    本小节介绍UWP中的文件操作,使用到了FileOpenPickerAPI(在Windows.Storage.Pickers中).本例中,单击打开文件按钮,然后在图片库中选择照片,将选择的照片用作贺卡背 ...

  4. 快速判断ie10及以上版本浏览器

    if (!(/msie [6|7|8|9]/i.test(navigator.userAgent))){ //ie10以上 }; 快速判断ie10及以上版本浏览器

  5. ubuntu下mysql的常用命令,MySQL数据库的基本操作命令

    一.mysql服务操作 0.查看数据库版本 sql-> status; 1.net start mysql //启动mysql服务 2.net stop mysql //停止mysql服务  3 ...

  6. UML学习笔记

    目前转岗到业务开发,业务逻辑用到了大量的类库.UML则是理解.指导其代码实现的利器. 有6种重要的关系,按照关系的强弱排序如下: 实现 = 泛化 > 组合(关联) >聚合 > 依赖 ...

  7. AFX_MANAGE_STATE(AfxGetStaticModuleState())DLL导出函数包含MFC资源

    AFX_MANAGE_STATE(AfxGetStaticModuleState()) 先看一个例子: .创建一个动态链接到MFC DLL的规则DLL,其内部包含一个对话框资源.指定该对话框ID如下: ...

  8. 基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用

    在前面介绍了两篇关于我的基于MVC4+EasyUI技术的Web开发框架的随笔,本篇继续介绍其中界面部分的一些使用知识,包括控件的赋值.取值.清空,以及相关的使用. 我们知道,一般Web界面包括的界面控 ...

  9. 【转】C++怎么读写windows剪贴板的内容?比如说自动把一个字符串复制.

    // 复制数据至剪切板BOOL CopyToClipboard(const char* pszData, const int nDataLen){ if(::OpenClipboard(NULL)) ...

  10. Network Address Translation(转载)

    Network Address Translation  来源:http://alexanderlaw.blog.hexun.com/9791596_d.html       地址转换用来改变源/目的 ...