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线文 ...
随机推荐
- 状态图 Statechart Diagram
一.状态图(Statechart Diagram):用来描述一个特定的对象所有可能的状态,以及由于各种事件的发生而引起的状态之间的转移和变化. 一个机器的状态图: TIP:在需求分析和系统设计时都可以 ...
- easyui 键盘控制tree 上下
$.extend($.fn.tree.methods, { highlight: function(jq, target){ return jq.each(function(){ $(this).fi ...
- 享元模式及C++实现
享元模式(flyweight) flyweight是轻量级的意思,中文这边翻译成享元,更容易让人理解一些. 享元模式是为了应对大量细粒度对象重复的问题.程序中存在大量细粒度的对象,每次要使用时都必须创 ...
- MyBatis知多少(17)MyBatis和JDBC
有了MyBatis,就不再需要编写JDBC代码了.像JDBCT这样的API的确非常强大,但使用起来总不免觉得太过繁琐.代码清单给出了一个使用JDBC的示例. 从这个例子中很容易看出,JDBC API会 ...
- 一步一步实战扩展 ASP.NET Route,实现小写 URL、个性化 URL
介绍 不知道大家在使用 ASP.NET MVC 时有没有一些扩展要求,反正我是有很多.在使用 MVC 这几年(PS:我是从 1.0 开始学,2.0.3.0 开发至今),我深深地觉得 MVC 的扩展性真 ...
- C10K问题渣翻译
The C10K problem [Help save the best Linux news source on the web -- subscribe to Linux Weekly News! ...
- Transact-SQL 示例 - 使用脚本备份数据库的示例
在常规的数据库开发与维护的过程中,常常需要对数据库进行数据备份,最入门的办法就是使用SSMS图形化界面提供的数据库备份向导一步一步操作进行备份,这种方式虽然简单快捷但是日子久了就会觉得重复且繁琐.下面 ...
- Hadoop第7周练习—MapReduce进行数据查询和实现推简单荐系统
1.1 1.2 :计算员工相关 2.1 内容 :求各个部门的总工资 :求各个部门的人数和平均工资 :求每个部门最早进入公司的员工姓名 :求各个城市的员工的总工资 :列出工资比上司高的员工姓名及其工资 ...
- gulp-uglify《JS压缩》----gulp系列(四)
本节实现JS压缩,在实现压缩前,先配置JS任务,设置源目录和输出目录. 在系列(三)代码的基础上,再进行扩展. 1.找到gulp->config.js,对JS进行源目录(src->img) ...
- Pattern Lab - 构建先进的原子设计系统
Pattern Lab 是一个工具集,帮助您创建原子设计系统.在它的核心,是一个自定义静态网站生成器,构建了类似原子,分子和界面结合在一起,形成模板和页面.Pattern Lab 可以作为项目的模式库 ...