Arcengine实现创建网络数据集札记(三)
后记
下面给出项目中用到的自定义的封装类。
AE许可初始化封装类:
public class AELicenseChecker { private static volatile AELicenseChecker _instance = null; private static readonly object lockHelper = new object(); //AE许可对象 private IAoInitialize _aoInitialize = null; private AELicenseChecker() { ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop); } /// <summary> /// 单例对象 /// </summary> /// <returns></returns> public static AELicenseChecker CreateInstance() { if (_instance == null) { lock (lockHelper) { if (_instance == null) _instance = new AELicenseChecker(); } } return _instance; } /// <summary> /// 初始化许可 /// </summary> /// <param name="pruductcode">产品类型</param> public void InitApplicationwithProductCode(esriLicenseProductCode pruductcode) { try { if (_aoInitialize == null) _aoInitialize = new AoInitializeClass(); ESRI.ArcGIS.esriSystem.esriLicenseStatus licenseStatus = (ESRI.ArcGIS.esriSystem.esriLicenseStatus)_aoInitialize.IsProductCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB); if (licenseStatus == esriLicenseStatus.esriLicenseAvailable) { licenseStatus = (esriLicenseStatus)_aoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB); if (licenseStatus != esriLicenseStatus.esriLicenseCheckedOut) { throw new Exception("没有ArcEngine中的GDBEdit许可!"); } } else { throw new Exception("没有ArcEngine中的GDBEdit许可!"); } _aoInitialize.Initialize(pruductcode); } catch (Exception ex) { throw ex; } } /// <summary> /// 停止许可对象 /// </summary> /// <param name="ExtensionCode">扩展类型,可选</param> public void ShutdownApplication(params esriLicenseExtensionCode[] ExtensionCodes) { try { if (_aoInitialize == null) return; if (ExtensionCodes.Length >=) { esriLicenseExtensionCode ExtensionCode = ExtensionCodes[]; _aoInitialize.CheckInExtension(ExtensionCode); } //关闭 AoInitilaize对象 _aoInitialize.Shutdown(); _aoInitialize = null; } catch (Exception ex) { throw ex; } } /// <summary> /// 初始化带扩展的许可 /// </summary> /// <param name="pruductcode">产品类型</param> /// <param name="ExtensionCode">扩展类型</param> public void InitApplicationwithExtensionCode(esriLicenseProductCode pruductcode, esriLicenseExtensionCode ExtensionCode) { try { //esriLicenseStatus myLicenseStatus = this.CheckOutLicenses(esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB); esriLicenseStatus myLicenseStatus = this.CheckOutExtensionLicenses(pruductcode, ExtensionCode); if (myLicenseStatus == esriLicenseStatus.esriLicenseNotLicensed) { throw new Exception("本机器没有安装ArcEngine扩展认证,请安装!"); } else if (myLicenseStatus == esriLicenseStatus.esriLicenseUnavailable) { throw new Exception("本机器上安装的ArcEngine扩展认证不可用,请重新安装!"); } else if (myLicenseStatus == esriLicenseStatus.esriLicenseFailure) { throw new Exception("本机器上的ArcEngine扩展认证启动失败,请联系管理员!"); } else if (myLicenseStatus == esriLicenseStatus.esriLicenseCheckedOut) { return; } } catch (Exception ex) { throw ex; } } /// <summary> /// 检测带扩展的证书 /// </summary> /// <param name="pProductCode">esriLicenseProductCode.esriLicenseProductCodeEngine</param> /// <param name="ExtensionCode">esriLicenseExtensionCode.esriLicenseExtensionCodeNetwork</param> /// <returns></returns> private esriLicenseStatus CheckOutExtensionLicenses(esriLicenseProductCode pProductCode, esriLicenseExtensionCode ExtensionCode) { try { esriLicenseStatus myLicenseStatus = esriLicenseStatus.esriLicenseUnavailable; if (this._aoInitialize == null) { _aoInitialize = new AoInitializeClass(); } myLicenseStatus = this._aoInitialize.IsExtensionCodeAvailable(pProductCode, ExtensionCode); if (myLicenseStatus == esriLicenseStatus.esriLicenseAvailable) { myLicenseStatus = this._aoInitialize.Initialize(pProductCode); if (myLicenseStatus == esriLicenseStatus.esriLicenseCheckedOut) { myLicenseStatus = this._aoInitialize.CheckOutExtension(ExtensionCode); } } return myLicenseStatus; } catch (Exception ex) { throw ex; } } }
AELicenseChecker定义
参考文献:
1 ESRI,网络分析,http://help.arcgis.com/zh-cn/ARCGISDESKTOP/10.0/HELP../index.html#/na/004700000001000000/
2 何宇兵, 网络分析与网络数据集,http://wenku.baidu.com/link?url=z1SUivF9acs6-WfNfSU4SjnyioLJyIHoqlB5_WtLiFEqhq_xDKUpNBbwk2tPzW2NIfkGRus_zao6JuQsC4h0LYZQHJVdcu_X6PKLWBVpj-7
3 ArcGIS的SanFrancisco网络数据集制作(网络分析数据篇),http://virgoooos.iteye.com/blog/340568
4 esri example:How to create a network dataset, http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#//0001000000w7000000
5 AO许可问题,http://www.cnblogs.com/qb371/archive/2011/10/12/2366295.html
6 创建网络数据集(How to Create a Geodatabase Network Dataset),http://blog.sina.com.cn/s/blog_5d25ac4e0100uu47.html
7 arcengine创建network dataset,http://www.cnblogs.com/gisoracle/archive/2010/10/09/1846856.html
8 创建network dataset,http://jhlong12345.blog.163.com/blog/static/12306312920137217205787/
9 How to create a multimodal network dataset,http://edndoc.esri.com/arcobjects/9.2/net/de3d1979-ae9f-4e0a-8fba-6dc351e76822.htm
10 扩展许可设置,http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/How_to_use_extensions/00010000033w000000/
Arcengine实现创建网络数据集札记(三)的更多相关文章
- Arcengine实现创建网络数据集札记(二)
四 ArcEngine实现创建网络数据集 ArcEngine创建网络数据集的过程,与ArcMap设置的过程类似,主要通过六个步骤即可以实现. 1 定义网络数据集对象,并设置基本属性,包括网络数据集名称 ...
- Arcengine实现创建网络数据集札记(一)
一 引子 网络数据集,GIS空间分析基础的理论和知识,是最短路径分析.连通性分析等其他空间分析技术的数据基础. 以往,网络数据集的研究很少,此次项目开发过程中,对网络数据集以及arcengine创建网 ...
- ArcGIS 网络分析[8.3] 设置IDENetworkDataset的属性及INetworkDataset的对比/创建网络数据集
创建网络数据集就得有各种数据和参数,这篇文章很长,慎入. 网络分析依赖于网络数据集的质量,这句话就在这里得到了验证:复杂.精确定义. 本节目录如下: 1. INetworkDataset与IDENet ...
- ArcGIS 网络分析[2] 利用自定义基础数据创建网络数据集
前言 似乎除了官方介绍的例子,我还没有在网上见过一篇介绍如何"使用自己的数据"创建"网络数据集"的文章. 有介绍几何网络的,有介绍如何用官方SanFrancis ...
- ArcGIS 网络分析[1.5] 使用点线数据一起创建网络数据集(如何避免孤立点/点与线的连通性组合结果表)
ArcGIS中最基本的三种矢量数据是什么?点线面. 网络中除了路网之外,还会有地物点. 如上图,我们在建立网络数据集的时候,作为实验,当然可以只是公路网.但是在大型的决策任务中,网络数据集就不只是公路 ...
- ArcGIS 网络分析[8.2] 资料2 使用IDatasetContainer2接口的CreateDataset方法创建网络数据集
上节提及如何使用IDatasetContainer2接口访问到网络数据集,上例可以封装为一个方法. 这节就使用IDatasetContainer2接口(Geodatabase类库)的CreateDat ...
- ArcGIS 网络分析[8.1] 资料1 使用AO打开或创建网络数据集之【打开】
为了创建或打开一个网络数据集,你必须使用NetworkDatasetFDExtension对象(文件地理数据库中的数据集)或NetworkDatasetWorkspaceExtension对象(对于S ...
- ArcGIS 网络分析[1.3] 在个人地理数据库中创建网络数据集/并简单试验最佳路径
上篇使用shp文件创建网络数据集,然而在ArcGIS 9中就支持地理数据库了,数据库的管理更为科学强大. 本篇就使用个人地理数据库进行建立网络数据集,线数据仍然可以是1.1中的线数据,但是我做了一些修 ...
- ArcGIS 网络分析[1.2] 利用1.1的线shp创建网络数据集/并简单试验最佳路径
上篇已经创建好了线数据(shp文件格式)链接:点我 这篇将基于此shp线数据创建网络数据集. 在此说明:shp数据的网络数据集仅支持单一线数据,也就是说基于shp文件的网络数据集,只能有一个shp线文 ...
随机推荐
- SecureCRT使用
SecureCRT可以说是linux远程终端的代名词,关于它的一些技巧必须掌握,,, 1.解决中文乱码 登陆主机,运行locale命令,确定语言选项LANG是否为 zh_CN.gb2312 或者 en ...
- Inkpad绘图原理浅析
本文新版本已转移到开源中国,欢迎前往指导. Inkpad是一款非常优秀的iPad矢量绘图软件,保管你一看见就忘不了.我的感觉是“一览众山小”.“相见甚晚”,以至于我写的TouchVG就是“小巫见大巫” ...
- 解决git中文乱码
和linux平台一样,在默认设置下,文件名称中包含中文的文件,在工作区状态输出.查看历史更改概要,以及在补丁文件中,文件名中的中文不能正确的显示,而是用若干八进制字符编码来显示,如下: git sta ...
- Machine Learning : Pre-processing features
from:http://analyticsbot.ml/2016/10/machine-learning-pre-processing-features/ Machine Learning : Pre ...
- 分享使用NPOI导出Excel树状结构的数据,如部门用户菜单权限
大家都知道使用NPOI导出Excel格式数据 很简单,网上一搜,到处都有示例代码. 因为工作的关系,经常会有处理各种数据库数据的场景,其中处理Excel 数据导出,以备客户人员确认数据,场景很常见. ...
- 【转载】C/C++ 函数指针 总结
转载自:http://blog.csdn.net/shihui512/article/details/9787125 什么是函数指针函数指针的声明函数指针的赋值函数指针的使用将函数作为其他函数的参数在 ...
- React中的PropTypes详解
propTypes用来规范props必须满足的类型,如果验证不通过将会有warn提示. React PropTypes的种类有: React.PropTypes.array // 队列 React.P ...
- mobile 更改hosts
在Android下,/etc是link到/system/etc的,我们需要修改/system/etc/hosts来实现.但是这个文件是只读,不能通过shell直接修改.可以通过连接到PC上使用adb来 ...
- 手动测试——MTM
在Test Manager中,测试计划用于管理某个迭代的整个测试工作.包括测试用例.测试结果,计划测试的配置. Test Center分为4个主要活动区域: Plan---用于管理整个测试计划,包括计 ...
- JavaScript---DOM文档
DOM文档中,每个节点都有一些重要的属性: 最重要的是nodeType,它描述该节点是什么---元素(element).属性(attribute).注释(comment).文本(text)或者其他几种 ...