ArcGIS 网络分析[8.2] 资料2 使用IDatasetContainer2接口的CreateDataset方法创建网络数据集
上节提及如何使用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方法创建网络数据集的更多相关文章
- ArcGIS 网络分析[8.3] 设置IDENetworkDataset的属性及INetworkDataset的对比/创建网络数据集
创建网络数据集就得有各种数据和参数,这篇文章很长,慎入. 网络分析依赖于网络数据集的质量,这句话就在这里得到了验证:复杂.精确定义. 本节目录如下: 1. INetworkDataset与IDENet ...
- ArcGIS 网络分析[8.1] 资料1 使用AO打开或创建网络数据集之【打开】
为了创建或打开一个网络数据集,你必须使用NetworkDatasetFDExtension对象(文件地理数据库中的数据集)或NetworkDatasetWorkspaceExtension对象(对于S ...
- ArcGIS 网络分析[2] 利用自定义基础数据创建网络数据集
前言 似乎除了官方介绍的例子,我还没有在网上见过一篇介绍如何"使用自己的数据"创建"网络数据集"的文章. 有介绍几何网络的,有介绍如何用官方SanFrancis ...
- ArcGIS 网络分析[1.2] 利用1.1的线shp创建网络数据集/并简单试验最佳路径
上篇已经创建好了线数据(shp文件格式)链接:点我 这篇将基于此shp线数据创建网络数据集. 在此说明:shp数据的网络数据集仅支持单一线数据,也就是说基于shp文件的网络数据集,只能有一个shp线文 ...
- ArcGIS 网络分析[1] 利用自定义点线数据(shp或数据库)创建网络数据集【小白向】
前言 似乎除了官方介绍的例子,我还没有在网上见过一篇介绍如何“使用自己的数据”创建“网络数据集”的文章. 究其原因,是因为当前的高质量的线数据或保密,或采集困难. 有介绍几何网络的,有介绍如何用官方S ...
- ArcGIS 网络分析[1.5] 使用点线数据一起创建网络数据集(如何避免孤立点/点与线的连通性组合结果表)
ArcGIS中最基本的三种矢量数据是什么?点线面. 网络中除了路网之外,还会有地物点. 如上图,我们在建立网络数据集的时候,作为实验,当然可以只是公路网.但是在大型的决策任务中,网络数据集就不只是公路 ...
- ArcGIS 网络分析[1.3] 在个人地理数据库中创建网络数据集/并简单试验最佳路径
上篇使用shp文件创建网络数据集,然而在ArcGIS 9中就支持地理数据库了,数据库的管理更为科学强大. 本篇就使用个人地理数据库进行建立网络数据集,线数据仍然可以是1.1中的线数据,但是我做了一些修 ...
- ArcGIS 网络分析[8.6] 资料6 创建网络分析图层及进行路径分析
基于上篇所介绍的内容,就说说如何利用访问到的网络数据集,在Map中添加网络数据集图层.创建网络分析图层中的路径图层,并执行路径分析示例.
- ArcGIS 网络分析[8.5] 资料5 网络分析拓展模块及各种接口说明
说完了网络数据集如何用AO来创建,接下来就说说如何用另一个类库--NetworkAnalyst来做网络分析. 区别于NetworkAnalysis,这个是几何网络分析用的类库. 本篇先做类库和有关接口 ...
随机推荐
- redis字符串结构
1.字符串SDS struct sdshdr { // buf 已占用长度 int len; // buf 剩余可用长度 int free; // 实际保存字符串数据的地方 // 利用c99(C99 ...
- java并发包下的并发工具类
1.Exchanger 功能:用于线程间数据的交换 应用场景:1)遗传算法,目前还不是特别理解 2)校对工作,假设A,B线程做同一件任务,可以通过数据校验判断两线程是否正确的工作 例子:是一个简单的 ...
- js实现关键词高亮显示 正则匹配
html 和ajax 部分就不写了,只需将需要匹配的文字传进去就可以了 比如匹配后台传回的字符串data.content中的关键词:直接调用: data.content = highLightKeyw ...
- Haproxy配置日志显示
安装完haproxy后,日志默认是记录在系统日志下的.为了便于排错以及查看日志,我们需要将haproxy日志剥离出来. 在配置前,我们先来了解下日志的level: local0-local7 16-2 ...
- Lucene.net(4.8.0)+PanGu分词器问题记录一:分词器Analyzer的构造和内部成员ReuseStategy
前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...
- MySQL slave_exec_mode 参数说明
背景: 今天无意当中看到参数slave_exec_mode,从手册里的说明看出该参数和MySQL复制相关,是可以动态修改的变量,默认是STRICT模式(严格模式),可选值有IDEMPOTENT模式(幂 ...
- SQL基础教程读书笔记-1
查询基础 2.2 算数运算符和比较运算符 2.2.1算数运算符 + - * / 需要注意NULL 5 + NULL 10 - NULL 1 * NULL 4 / NULL NULL / 9 NULL ...
- 你不知道的javaScript上卷(第一章 作用域是什么)
在写这篇博客时这本书我已经是看过一遍了,为了加深印象和深入学习于是打算做这系列的前端经典书籍导读博文,大家如果觉得这本书讲的好可以自己买来看看,我是比较喜欢看纸质版书的,因为这样才有读书的那种感觉. ...
- 在IIS7上导出全部应用程序池的方法 批量域名绑定
在IIS7+上导出全部应用程序池的方法: %windir%/system32/inetsrv/appcmd list apppool /config /xml > c:/apppools.xml ...
- Python的招牌菜xmlrpc
一.简单介绍 为了解决在系统的80port提供RPC的服务.而又不影响正在运行的WEB服务.人们想出了用HTTP协议传输RPC包的办法.对于差点儿是专门用于传输文本的HTTP协议.要在其上传输RPC封 ...