上节提及如何使用IDatasetContainer2接口访问到网络数据集,上例可以封装为一个方法。

这节就使用IDatasetContainer2接口(Geodatabase类库)的CreateDataset()方法创建网络数据集。

涉及到的接口(全在Geodatabase类库中)

IDatasetContainer2、IDataset、INetworkDataset、IDEDataset、IDENetworkDataset4(重点)

涉及到的枚举类型(全在Geodatabase类库中)

esriDatasetType(本例使用枚举值为esriDTNetworkDataset)

涉及到的类(全在Geodatabase类库中)

DENetworkDataset(实现了IDEDataset、IDENetworkDataset接口)

1. DENetworkDataset类和IDENetworkDataset接口介绍

DENetworkDataset是一个轻量级的对象,保存有关网络数据集的信息(在内存中)。

它可以与更新网络数据集的INetworkBuild接口的UpdateSchema()方法配合使用。

IDENetworkDataset4接口,是IDENetworkDataset的升级版,过程还有2、3两个接口。IDENetworkDataset接口用于访问网络数据集中的某些网络属性,例如道路等级信息。IDENetworkDataset接口与InetworkBuild接口的UpdateSchema方法结合使用,如添加多个网络数据源或网络属性到网络数据集中。这些操作的过程与在Catalog中创建网络数据集的设置过程大体一致。访问网络数据集中的数据元素将使用IDatasetComponent接口及DataElement方法。

IDENetworkDataset接口的属性表如下:

这个接口几乎可以说是创建网络数据集的核心。有了IDENetworkDataset接口,才能在内存中组织网络数据集的各种复杂的数据,它的类DENetworkDataset的实例才是网络数据集的数据本身,而INetworkDataset只是存在于数据库中的数据集。

他们两个接口的关系是:

IDENetworkDataset作为数据元素,被IDatasetContainer2的CreateDataset()方法作用,产生的结果就是INetworkDataset,如下代码:

         /// <summary>
/// 根据要素数据集与数据元素网络数据集,创建网络数据集。
/// </summary>
/// <param name="_pFeatureDataset">包含网络数据集的要素数据集</param>
/// <param name="_pDENetDataset">数据元素网络数据集</param>
/// <returns></returns>
public INetworkDataset CreateBuildingDataset(IFeatureDataset _pFeatureDataset, IDENetworkDataset2 _pDENetDataset)
{
IFeatureDatasetExtensionContainer featureDatasetExtensionContainer = (IFeatureDatasetExtensionContainer)_pFeatureDataset;
IFeatureDatasetExtension featureDatasetExtension = featureDatasetExtensionContainer.FindExtension(esriDatasetType.esriDTNetworkDataset);
IDatasetContainer2 datasetContainer2 = (IDatasetContainer2)featureDatasetExtension;
IDEDataset deNetDataset = _pDENetDataset as IDEDataset;
//创建网络数据集
INetworkDataset networkDataset = (INetworkDataset)datasetContainer2.CreateDataset(deNetDataset);
return networkDataset;
}

于是,所有的任务就交给了如何创建一个数据元素网络数据集(DENetworkDataset,接口是IDENetworkDataset)。

有关数据元素网络数据集和网络数据集的区别,官方的解释也不是很明确,我个人的理解就是,如果要访问网络数据集中各个元素,就要访问其数据元素网络数据集,网络数据集只不过是后者+构建出来的一些拓扑法则而已。也可能是我翻译水平不够...

下篇文章继续研究INetworkDataset和IDENetworkDataset的各种属性如何设置。

总之,构建网络数据集是一个坑,基于INetworkDataset做NetworkAnalyst又是一个坑。两个坑填完,也就是所谓的AO二次开发之网络分析了。

ArcGIS 网络分析[8.2] 资料2 使用IDatasetContainer2接口的CreateDataset方法创建网络数据集的更多相关文章

  1. ArcGIS 网络分析[8.3] 设置IDENetworkDataset的属性及INetworkDataset的对比/创建网络数据集

    创建网络数据集就得有各种数据和参数,这篇文章很长,慎入. 网络分析依赖于网络数据集的质量,这句话就在这里得到了验证:复杂.精确定义. 本节目录如下: 1. INetworkDataset与IDENet ...

  2. ArcGIS 网络分析[8.1] 资料1 使用AO打开或创建网络数据集之【打开】

    为了创建或打开一个网络数据集,你必须使用NetworkDatasetFDExtension对象(文件地理数据库中的数据集)或NetworkDatasetWorkspaceExtension对象(对于S ...

  3. ArcGIS 网络分析[2] 利用自定义基础数据创建网络数据集

    前言 似乎除了官方介绍的例子,我还没有在网上见过一篇介绍如何"使用自己的数据"创建"网络数据集"的文章. 有介绍几何网络的,有介绍如何用官方SanFrancis ...

  4. ArcGIS 网络分析[1.2] 利用1.1的线shp创建网络数据集/并简单试验最佳路径

    上篇已经创建好了线数据(shp文件格式)链接:点我 这篇将基于此shp线数据创建网络数据集. 在此说明:shp数据的网络数据集仅支持单一线数据,也就是说基于shp文件的网络数据集,只能有一个shp线文 ...

  5. ArcGIS 网络分析[1] 利用自定义点线数据(shp或数据库)创建网络数据集【小白向】

    前言 似乎除了官方介绍的例子,我还没有在网上见过一篇介绍如何“使用自己的数据”创建“网络数据集”的文章. 究其原因,是因为当前的高质量的线数据或保密,或采集困难. 有介绍几何网络的,有介绍如何用官方S ...

  6. ArcGIS 网络分析[1.5] 使用点线数据一起创建网络数据集(如何避免孤立点/点与线的连通性组合结果表)

    ArcGIS中最基本的三种矢量数据是什么?点线面. 网络中除了路网之外,还会有地物点. 如上图,我们在建立网络数据集的时候,作为实验,当然可以只是公路网.但是在大型的决策任务中,网络数据集就不只是公路 ...

  7. ArcGIS 网络分析[1.3] 在个人地理数据库中创建网络数据集/并简单试验最佳路径

    上篇使用shp文件创建网络数据集,然而在ArcGIS 9中就支持地理数据库了,数据库的管理更为科学强大. 本篇就使用个人地理数据库进行建立网络数据集,线数据仍然可以是1.1中的线数据,但是我做了一些修 ...

  8. ArcGIS 网络分析[8.6] 资料6 创建网络分析图层及进行路径分析

    基于上篇所介绍的内容,就说说如何利用访问到的网络数据集,在Map中添加网络数据集图层.创建网络分析图层中的路径图层,并执行路径分析示例.

  9. ArcGIS 网络分析[8.5] 资料5 网络分析拓展模块及各种接口说明

    说完了网络数据集如何用AO来创建,接下来就说说如何用另一个类库--NetworkAnalyst来做网络分析. 区别于NetworkAnalysis,这个是几何网络分析用的类库. 本篇先做类库和有关接口 ...

随机推荐

  1. LuaJavaBridge - Lua 与 Java 互操作的简单解决方案

    http://dualface.github.io/blog/2013/01/01/call-java-from-lua/ 最近在游戏里要集成中国移动的 SDK,而这些 SDK 都是用 Java 编写 ...

  2. 输入一个A和B,,A<=B,A>=1,B<=pow(10,18)计算F=B!/A!结果的最后一位

    *************************************************************************代理运行函数,判断结果,进行输出*********** ...

  3. 微服务配置内容《网上copy》=========》如何创建一个高可用的服务注册中心

    前言:首先要知道什么是一个高可用的服务注册中心,基于spring boot建成的服务注册中心是一个单节点的服务注册中心,这样一旦发生了故障,那么整个服务就会瘫痪,所以我们需要一个高可用的服务注册中心, ...

  4. 日志的艺术(The art of logging)

    程序员学习每一门语言都是从打印“hello world”开始的,日志也是新手程序员学习.调试程序的一大利器.当项目上线之后,也会有各种各样的日志,比如记录用户的行为.服务器的状态.异常情况等等.打印日 ...

  5. poj 3431 Expedition 优先队列

    poj 3431 Expedition 优先队列 题目链接: http://poj.org/problem?id=2431 思路: 优先队列.对于一段能够达到的距离,优先选择其中能够加油最多的站点,这 ...

  6. Scala中的override

    Scala中的override override是覆盖的意思,在很多语言中都有,在scala中,override是非常常见的,在类继承方面,它和java不一样,不是可写可不写的了,而是必须写的.如果不 ...

  7. 矩阵的奇异值分解(SVD)(理论)

    矩阵的奇异值分解(Singular Value Decomposition,SVD)是数值计算中的精彩之处,在其它数学领域和机器学习领域得到了广泛的应用,如矩阵的广义逆,主分成分析(PCA),自然语言 ...

  8. 在外围获取APP的机密信息

    叶孤城原创,转载须授权. 小白:偷窥狂,不,叶城主,怎么还不发起攻击,还在外围搞什么? 叶孤城:闭嘴,能外围解决的问题就不要破解,你以为你会天外飞仙啊! 小白:-- 本文解决一个问题:通过抓包分析出重 ...

  9. react-native从开始趟的坑

    好多天没更了..... 之前用的华为手机老人机真机调试的,最近几天换了小米,又遇上了坑... 跟之前所有手机一样打开开发者模式,开发者模式是(关于手机--版本号---一直点啊点--退出---辅助功能里 ...

  10. mybatis延迟加载一对多

    1.实体类 package cn.bdqn.bean; import java.util.Set; /** *国家的实体类 */ public class Country { private Inte ...