博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Map 3D 2010 开发中的OnCheckIn事件处理
阅读量:6831 次
发布时间:2019-06-26

本文共 3143 字,大约阅读时间需要 10 分钟。

我们将谈一下Map 3D 2010开发中常见的事件处理,并通过一个简单的小例子来掩饰Map 3D 常见事件处理的应用方法。

比如有这样一个应用场景,一个要素类中有一些计算字段,即这些字段的值是根据其他字段的值按照一定规则计算出来的,如由单位地价和面积,计算出地块总价。一些数据库引擎本身已经内置的自动计算的功能,但也有些时候需要我们来编码实现。当然如果用户对记录进行更改后就需要重新计算以保证数据的一致性。当然,我们可以在用户刚刚更改结束后就立即重新计算,但是为了不用无用功,我们没必要为客户在每次犹豫不定的更改都重新计算,只需要在他提交最终修改结果时重新计算就可以了。嗯,好主意,Map 3D要是有类似 OnCheckIn之类的事件就好了。

不过可惜的是,查了半天也没有这样一个事件,真是让人沮丧啊。不过不用着急,虽然没有一个这么明显的,但是我们有一系列的事件处理函数来组合一下即可。我们看一下AcMapFeatureService的相关事件,我们可以在帮助文档中查到:

顺便说一下,这些帮助文档可以在 中找到。这个开发包中不仅包含了Map 3D开发的所有文档,而且还包含了好多实例代码工程(C++,C#

或者VB.NET),几乎大多数的开发场景都能从例子中找到。

我们所需要的OnCheckIn事件虽然没有,但是我们有三个 FeatureDeleted ,FeatureInserted 和FeatureUpdated。这同样能实现我们的checkin事件。

下面我们看一下代码片段:

[CommandMethod("AddFSEvents")]        public void AddFeatureServicesEvents()        {            AcMapFeatureService fs = AcMapServiceFactory.GetService(MgServiceType.FeatureService) as AcMapFeatureService;            fs.FeatureUpdated += new FeatureUpdatedHandler(fs_FeatureUpdated);            AcMapMap currentMap = AcMapMap.GetCurrentMap();            currentMap.FeatureInstanceModified += new FeatureInstanceModifiedHandler(currentMap_FeatureInstanceModified);        }        // 这个事件,客户的每次更改都会触发,即使还没有提交,这不是我们想要的
//fired at one when the feature is updated        void currentMap_FeatureInstanceModified(object sender, FeatureInstanceModifiedEventArgs args)        {            ed.WriteMessage("FeatureInstanceModified fired!\n");        }        //fired when the feature is updated and checked in        //if more than one feature are updated, it will be fired more times
//这才是我想要的,只有在更新被CheckIn的时候才触发。
//我们可以通过Args.GetFeature()得到正在提交的那个要素,下面的代码演示了如果获取这个要素的相关信息
//如果有多个要素同时被更新,事件会触发多次,从而你可以处理每一条记录        void fs_FeatureUpdated(object sender, AcMapFeatureEventArgs args)        {            ed.WriteMessage("FeatureUpdated fired! \n");            ed.WriteMessage("--------------------------------------\n");            ed.WriteMessage("PropertyName \t Value \n");             MgPropertyCollection props = args.GetFeature().GetProperties();            int propCount = props.Count;            for (int i = 0; i < propCount; i++)            {                string propName = props[i].Name;                string valueString;                switch (props[i].GetPropertyType())                {                    case MgPropertyType.Int32:                        valueString = (props[i] as OSGeo.MapGuide.MgInt32Property).GetValue().ToString();                        break;                    case MgPropertyType.String:                        valueString = (props[i] as OSGeo.MapGuide.MgStringProperty).GetValue().ToString();                        break;                    default:                        valueString = "<***>";                        break;                }                ed.WriteMessage(propName + "\t" + valueString + "\n");            }            ed.WriteMessage("------------------------------------\n");                             }

 

这个例子我实现了FeatureUpdated事件,类似的还有FeatureDeleted 和FeatureInserted 你可以自己来参照试试看。

作者:
邮箱:junqilian@163.com 
出处:  
转载请保留此信息。
本文转自峻祁连. Moving to Cloud/Mobile博客园博客,原文链接:http://www.cnblogs.com/junqilian/archive/2010/01/29/1659160.html
,如需转载请自行联系原作者
你可能感兴趣的文章
第十篇 SpringBoot 2 x发送邮件
查看>>
从搞笑到高效,构建敏捷团队的基础原则
查看>>
python 基础语法学习笔记(2019年4月第二周学习笔记)
查看>>
springboot mybatis 项目框架源码 shiro 集成代码生成器 ehcache缓存
查看>>
《SpringBoot+Dubbo+Zookeeper整合搭建简单的分布式应用》
查看>>
LayoutInflater的作用
查看>>
QT 消息处理机制
查看>>
看过Jdk动态代理类长啥样吗?Jdk动态代理原理源码分析
查看>>
volatile
查看>>
JavaScript 二叉树算法排序 图文并茂 这篇就够了
查看>>
操作中按了home键后广播为什么接收不了问题
查看>>
C# 组合控件
查看>>
Jquery获取属性值
查看>>
JSON 对象和字符串
查看>>
mongo创建用户
查看>>
Vue解决接口访问跨域问题
查看>>
JQuery难点备忘
查看>>
6.Windows 二进制文件 (.exe)安装--终端安装
查看>>
selectedIndex 属性可设置或返回下拉列表中被选选项的索引号。
查看>>
Cocos2d-x之坐标系学习
查看>>