上节提及如何使用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. [react] React 新手必须知道的 N 件事

    尽量用 props & onChange,不要用 ref 获取引用然后调用方法.详情参考我的文章:一等公民 props & onChange React 只是一个视图框架,请尽量在 C ...

  2. 基于Flink秒级计算时CPU监控图表数据中断问题

     基于Flink进行秒级计算时,发现监控图表中CPU有数据中断现象,通过一段时间的跟踪定位,该问题目前已得到有效解决,以下是解决思路:   一.问题现象       以SQL02为例,发现本来10秒一 ...

  3. js脚本根据身份证号获取性别、年龄、家庭地址、生日

    做项目测试时需要根据身份证号获取其信息,也不想调接口,就自己在本地通过收集资料整合了一个

  4. MySQL学习——基本命令(1)

    MySQL添加新用户.为用户创建数据库.为新用户分配权限 参考博客http://blog.csdn.net/u013216667/article/details/70158452 一.登录MySQL ...

  5. QTP生成随机数字+字母

    以下函数实现随机生成17位数(包括字母和数字),仍有改进的空间,可根据具体要求适当修改 Dim targetstring '调用返回函数给变量.Function过程通过函数名返回一个值 targets ...

  6. 前端测试框架Jest系列教程 -- Global Functions(全局函数)

    写在前面: Jest中定义了很多全局性的Function供我们使用,我们不必再去引用别的包来去实现类似的功能,下面将列举Jest中实现的全局函数. Jest Global Functions afte ...

  7. JAVA实现同域单点登录

    所用技术: SSM MySQL Maven Tomcat8.0 同域单点登录详细步骤如下: 1.首先写一个登录界面(隐藏域为暂存地址) 2.判断用户密码是否正确,正确则添加cookie,否则返回错误页 ...

  8. Linux 使用tcpdump观察arp通信过程

    ARP协议简介: ARP协议能实现任意网络层地址到任意物理地址的转换,此次讨论从IP地址到以太网地址(MAC地址)的转换.其工作原理是:主机向自己所在的网络广播一个ARP请求,该请求包含目标机器的网络 ...

  9. kafak集群安装-转

    前言 最近在利用Spark streaming和Kafka构建一个实时的数据分析系统,对图书阅读数据进行分析,做实时推荐.Spark Streaming 模块是对于 Spark Core 的一个扩展, ...

  10. hdu1181 变形课(vector容器+dfs)

    变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submi ...