Arcgis Engine(ae)接口详解(3):featureClass的feature编辑和删除
//由于测试数据不完善,featureClass在此要只设null值,真实功能要设实际的值
IFeatureClass featureClass = null; //获取某个字段的索引,后面取字段值用到
int xxxFieldIdx = featureClass.FindField("xxx"); IFeatureCursor featureCursor = featureClass.Search(null, true);
IFeature feature = null; //获取到IWorkspaceEdit接口,IWorkspaceEdit是编辑必须的接口
IWorkspaceEdit workspaceEdit = (featureClass as IDataset).Workspace as IWorkspaceEdit; //开始编辑的两个重要方法,StartEditing第一个参数是是否允许Undo,Redo(重做,撤销),如果是后台数据处理功能一般关系不大
workspaceEdit.StartEditing(true);
//构成一个EditOperation有StartEditOperation和StopEditOperation方法,Undo,Redo是针对一个EditOperation的
workspaceEdit.StartEditOperation(); //这里加try的原因是,如果编辑时出错,需要调用IWorkspaceEdit的一些方法来回滚修改内容
//而且编辑出错几率比一般功能大
try
{
List<int> lstOid = new List<int>(); while ((feature = featureCursor.NextFeature()) != null)
{
//修改属性字段的字段值
feature.Value[xxxFieldIdx] = "sss"; IPoint point = new PointClass();
point.PutCoords(, );
//修改几何字段的字段值
//因为几何字段只有一个,所以不需要字段索引
feature.Shape = point; //保存要素的修改
feature.Store(); //保存oid是为了之后的删除要素功能
lstOid.Add(feature.OID);
} System.Runtime.InteropServices.Marshal.FinalReleaseComObject(featureCursor); //删除
//由于不能在遍历要素时删除要素,因此其中一种删除要素的方法:是在遍历时收集要删除要素的oid,遍历完后再通过oid进行删除
foreach (int oid in lstOid)
{
//先通过oid获取要素,然后调用要素的Delete方法删除
IFeature featureDelete = featureClass.GetFeature(oid);
featureDelete.Delete();
} //保存编辑
//之前的feature.Store()和featureDelete.Delete()都是临时保存,下面两句才是真实的保存
workspaceEdit.StopEditOperation();
//参数1是是否保存,false就是不保存,也就是恢复到修改前的状态
workspaceEdit.StopEditing(true);
}
catch (Exception ex)
{
//编辑出错需要以下两句,大意是数据回滚
workspaceEdit.StopEditOperation();
workspaceEdit.StopEditing(false); //此处不记录异常,把异常抛出让系统统一处理
throw new Exception("", ex);
}
Arcgis Engine(ae)接口详解(3):featureClass的feature编辑和删除的更多相关文章
- JDBC常用接口详解
JDBC中常用接口详解 ***DriverManager 第一.注册驱动 第一种方式:DriverManager.registerDriver(new com.mysql.jdbc.Driver()) ...
- Java6.0中Comparable接口与Comparator接口详解
Java6.0中Comparable接口与Comparator接口详解 说到现在,读者应该对Comparable接口有了大概的了解,但是为什么又要有一个Comparator接口呢?难道Java的开发者 ...
- socket接口详解
1. socket概述 socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket起源于UNIX,在Unix一切 ...
- “全栈2019”Java第八十四章:接口中嵌套接口详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第八十三章:内部类与接口详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java接口 详解(二)
上一篇Java接口 详解(一)讲到了接口的基本概念.接口的使用和接口的实际应用(标准定义).我们接着来讲. 一.接口的应用—工厂设计模式(Factory) 我们先看一个范例: package com. ...
- [转载]MII/MDIO接口详解
原文地址:MII/MDIO接口详解作者:心田麦浪 本文主要分析MII/RMII/SMII,以及GMII/RGMII/SGMII接口的信号定义,及相关知识,同时本文也对RJ-45接口进行了总结,分析了在 ...
- map接口详解
1.Map接口详解(1)映射(map)是一个存储键.键值对的对象,给定一个键,可以查询得到它的值,键和值都可以是对象(2)键必须是唯一的,值可以重复(Map接口映射唯一的键到值)(3)有些映射可以接收 ...
- ReadWriteLock 接口详解
ReadWriteLock 接口详解 这是本人阅读ReadWriteLock接口源码的注释后,写出的一篇知识分享博客 读写锁的成分是什么? 读锁 Lock readLock(); 只要没有写锁,读锁可 ...
随机推荐
- 牛腩新闻发布系统(三):CSS盒子模型及其基本内容
导读: 这些天一直在做牛腩的网页,比如什么首页.出错页.新闻内容页等.在学习的不断推进中,一些刚开始理解的不是很好的东西,也逐渐的深刻了起来.下面,就对这一段时间的学习,做一个总结.主要总结内容有:盒 ...
- [BZOJ4756] [Usaco2017 Jan]Promotion Counting(线段树合并)
传送门 此题很有意思,有多种解法 1.用天天爱跑步的方法,进入子树的时候ans-query,出去子树的时候ans+query,query可以用树状数组或线段树来搞 2.按dfs序建立主席树 3.线段树 ...
- 转载:lua和c的交互
extern "C" { #include "lua.h" #include "lualib.h" #include "lauxl ...
- Spoj-NETADMIN Smart Network Administrator
The citizens of a small village are tired of being the only inhabitants around without a connection ...
- net3:文件上传与图片显示以及HiddenField隐藏字段值的使用
原文发布时间为:2008-07-29 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...
- [MFC] TabControl选项卡的使用
MFC中,因项目需要使用TabControl ,使用过程中发现,MFC中的TabControl与C#的TabControl不同,不能通过属性来创建选项页,只能代码生成绑定. 以下为具体的实现方法步骤: ...
- Linux java 启动脚本
#!/bin/bash export LANG=en_US.UTF8 start(){ ulimit -n 65535 #find the jars jar_lib=`ls -1 lib/*.jar` ...
- What should do in Production
Using Compose in production https://docs.docker.com/compose/production/
- 【Java】NIO中Selector的select方法源码分析
该篇博客的有些内容和在之前介绍过了,在这里再次涉及到的就不详细说了,如果有不理解请看[Java]NIO中Channel的注册源码分析, [Java]NIO中Selector的创建源码分析 Select ...
- String源码分析(1)--哈希篇
本文基于JDK1.8,首发于公众号:Plus技术栈 让我们从一段代码开始 System.out.println("a" + "b" == "ab&qu ...