当前位置: 首页 > news >正文

ArcEngine开发点滴1

用AE搞gis开发,增加、修改、删除ifeature 是难免的,项目中写了一个通用的添加要素的通用方法,发出来,望大家批评指正
1)添加新要素
/// <summary>
/// 添加新要素
/// </summary>
/// <param name="pFeatClass">要更新的要素类</param>
/// <param name="fieldAndValues">更新的字段值,key是字段的名称,value是字段的值</param>
/// <param name="geometry">图?形?对?象?</param>
/// <returns>是?否?添?加?成?功?</returns>
public static bool NewFeature(IFeatureClass pFeatClass, Hashtable fieldAndValues, IGeometry geometry)
{
    bool IsEdited = false;
    if (geometry == null) return false;
    if (pFeatClass == null) throw new Exception("要?更?新?的?要?素?类?不?能?为?空?!?");

    if (pFeatClass.ShapeType != geometry.GeometryType) throw new Exception("要?更?新?的?要?素?类?和?要?素?的?对?象?类?型?不?一?致?,?无?法?更?新?!?");
    IDataset pDS = pFeatClass as IDataset;
    IWorkspaceEdit pWSE = pDS.Workspace as IWorkspaceEdit;
    if (pWSE.IsBeingEdited())
    {
        IsEdited = true;
    }
    else
    {
        pWSE.StartEditing(true);
    }
    pWSE.StartEditOperation();


    IFeature pFeat = pFeatClass.CreateFeature();
    try
    {
        foreach (string key in fieldAndValues.Keys)
        {
            int pIndex = pFeat.Fields.FindField(key);
            if (pIndex < 0) throw new Exception("要?素?不?存?在?名?称?为?"+key+ " 的?字?段?!?");
            pFeat.set_Value(pIndex, fieldAndValues[key]);
        }

     
        pFeat.Shape = geometry;
        pFeat.Store();

        pWSE.StopEditOperation();

        if (!IsEdited) pWSE.StopEditing(true);

        return true;
    }

    catch (Exception ex)
    {
        pWSE.AbortEditOperation();
        if (!IsEdited) pWSE.StopEditing(false);

        return false;
    }
    finally
    {
        ReleaseComObject(pDS);
        ReleaseComObject(pWSE);
        ReleaseComObject(pFeat);
    }

}
2)更新新要素
输入的参数比新建的多了一个,strWhere 是pFeatClass搜索要删除的要素的过滤条件
public static bool UpdateFeature(IFeatureClass pFeatClass, string strWhere, Hashtable fieldNameAndValues, IGeometry geometry)
{
    bool IsEdited = false;
    if (pFeatClass == null)  throw new Exception("要更新的要素类不能为空!?");
    if (pFeatClass.ShapeType != geometry.GeometryType) throw new Exception("要?更?新?的?要?素?类?和?要?素?的?对?象?类?型?不?一?致?,?无?法?更?新?!?");

    IDataset pDS = pFeatClass as IDataset;
    IWorkspaceEdit pWSE = pDS.Workspace as IWorkspaceEdit;
    if (pWSE.IsBeingEdited())
    {
        IsEdited = true;
    }
    else
    {
        pWSE.StartEditing(true);
    }
    pWSE.StartEditOperation();

    IQueryFilter pQueryFilter = new QueryFilterClass();
    pQueryFilter.WhereClause = strWhere;

    IFeatureCursor pFeatureCursor = pFeatClass.Search(pQueryFilter, false);
    IFeature pFeat = pFeatureCursor.NextFeature();
    try
    {
        while (pFeat != null)
        {
            if (fieldNameAndValues != null)
            {
                foreach (object   key in fieldNameAndValues.Keys)
                {
                    int pIndex = pFeat.Fields.FindField(key.ToString());
                    if (pIndex > 0)
                        pFeat.set_Value(pIndex,fieldNameAndValues[key]);
                    else
                    {
                        throw new Exception(string.Format("要?素?类?'{0}'不?存?在?名?称?为?'{1}'的?属?性?!?",pFeatClass.AliasName,key.ToString()));
                    }
                }
            }

            if (geometry != null) pFeat.Shape = geometry;
            pFeat.Store();
            pFeat = pFeatureCursor.NextFeature();
        }
        pWSE.StopEditOperation();

        if (!IsEdited) pWSE.StopEditing(true);
        //Marshal.FinalReleaseComObject(pFeatureCursor);
        return true;
    }

    catch (Exception ex)
    {

        pWSE.AbortEditOperation();
        if (!IsEdited) pWSE.StopEditing(false);

        return false;
    }
    finally
    {
        ReleaseComObject(pDS);
        ReleaseComObject(pWSE);
        ReleaseComObject(pQueryFilter);
        ReleaseComObject(pFeat);
    }

3)删除要素

当条件 为Null 或“” 时,将删除所有数据

/// <summary>
        /// 删?除?符?合?条?件?的?要?素?
        /// </summary>
        /// <param name="pFeatClass">图?层?要?素?类?</param>
        /// <param name="strWhere">查?询?条?件?</param>
        /// <returns>是?否?删?除?成?功?</returns>
        public static bool DeleteFeature(IFeatureClass pFeatClass, string strWhere)
        {
            if (pFeatClass == null) return false;
            ITable pTable = pFeatClass as ITable;
            IQueryFilter pQueryFilter = new QueryFilterClass();
            pQueryFilter.WhereClause = strWhere;
            try
            {
                pTable.DeleteSearchedRows(pQueryFilter);
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
            finally
            {
                ReleaseComObject(pTable);
                ReleaseComObject(pQueryFilter);
            }
        }

转载于:https://www.cnblogs.com/liuyh208/archive/2009/11/13/1602469.html

相关文章:

  • [转]ATOM 规范 中文版
  • javascript实现组合的递归算法及变种
  • 汇报方案
  • [转]深一层看依赖注入
  • C# 中的委托和事件 copyright http://www.cnblogs.com/JimmyZhang
  • Week Function
  • China MVP Open Day 2009
  • C# Windows Form 刷新父窗体
  • Linq to XML说法——(二)更新,删除,加载
  • 如果可以忘记
  • C#数据库编程
  • net framework3.5新特性1:Lambda表达式
  • ghost误操作
  • 快速实现ARM和DSP的通信和协同工作(四)
  • 什么是CMS
  • [iOS]Core Data浅析一 -- 启用Core Data
  • [译]Python中的类属性与实例属性的区别
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • JAVA并发编程--1.基础概念
  • Rancher-k8s加速安装文档
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Vue官网教程学习过程中值得记录的一些事情
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 官方解决所有 npm 全局安装权限问题
  • 前端技术周刊 2019-01-14:客户端存储
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​io --- 处理流的核心工具​
  • # Panda3d 碰撞检测系统介绍
  • ()、[]、{}、(())、[[]]命令替换
  • (5)STL算法之复制
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (学习日记)2024.02.29:UCOSIII第二节
  • (转)VC++中ondraw在什么时候调用的
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .gitignore文件_Git:.gitignore
  • .net core控制台应用程序初识
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .net连接MySQL的方法
  • @DataRedisTest测试redis从未如此丝滑
  • [ai笔记4] 将AI工具场景化,应用于生活和工作
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [APIO2015]巴厘岛的雕塑
  • [Ariticle] 厚黑之道 一 小狐狸听故事
  • [Assignment] C++1
  • [BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)
  • [C#]winform利用seetaface6实现C#人脸检测活体检测口罩检测年龄预测性别判断眼睛状态检测
  • [Go WebSocket] 多房间的聊天室(五)用多个小锁代替大锁,提高效率
  • [GXYCTF2019]BabyUpload1 -- 题目分析与详解
  • [HCTF 2018]WarmUp (代码审计)
  • [Linux基础开发工具---vim]关于vim的介绍、vim如何配置及vim的基本操作方法
  • [MySQL光速入门]003 留点作业...
  • [na]wac无线控制器集中转发部署的几种情况
  • [NBIoT]NBIoT相关知识