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

当你拥有了合适的对象后,就可以使用IDatasetContainer2接口去创建或者打开网络数据集了。

如果当前打开的Map对象中有网络数据集图层,那么就可以通过访问INetworkLayer接口的NetworkDataset字段来访问网络图层中的网络数据集。

IDatasetContainer2接口的CreateDataset方法可以用于创建网络数据集。网络数据集创建完成后应立即用INetworkBuild接口的BuildNetwork方法构建。

网络数据集的NetworkDatasetName对象可以被IDatasetContainer2接口的DatasetNames方法访问。

涉及到的重要接口:

IDatasetContainer2(Geodatabase类库中)、INetworkLayer(Carto类库中)

涉及到的重要类(全部在Geodatabase类库中):

NetworkDatasetFDExtension、NetworkDatasetWorkspaceExtension

NetworkDatasetNameClass

1. 寻找IDatasetContainer2变量(要素数据集、Shp文件、SDC文件)

下面的代码就演示了如何在给定数据库的要素数据集(要素数据集名称为fds)中打开网络数据集。

 IFeatureDatasetExtensionContainer fdsExtCont = fds as IFeatureDatasetExtensionContainer;  //要素数据集身份转化
IFeatureDatasetExtension fdsExt = fdsExtCont.FindExtension(esriDTNetworkDataset); //从要素数据集中找到IFeatureDatasetExtension对象
IDatasetContainer2 dsCont = fdsExt as IDatasetContainer2; //将IFeatureDatasetExtension对象身份转化为IDatasetContainer2

下面的代码就演示了如何在给定shp文件(shp文件对象的名称为shpWS)中打开网络数据集。

 IWorkspaceExtensionManager wsExtMgr = shpWS as IWorkspaceExtensionManager;
UID myUID = new UIDClass();
myUID.Value = "esriGeoDatabase.NetworkDatasetWorkspaceExtension";
IWorkspaceExtension wsExt = wsExtMgr.FindExtension(myUID); //与上面类似
IDatasetContainer2 dsCont = wsExt as IDatasetContainer2; //与上面类似

下面的代码演示了如何从给定的SDC文件中获取网络数据集(SDC文件对象名为sdcWS)

 IWorkspaceExtensionManager wsExtMgr = sdcWS as IWorkspaceExtensionManager;
UID myUID = new UIDClass();
myUID.Value = "esriGeoDatabase.NetworkDatasetWorkspaceExtension";
IWorkspaceExtension wsExt = wsExtMgr.FindExtension(myUID);
IDatasetContainer2 dsCont = wsExt as IDatasetContainer2;

打开SDC中的网络数据集

2. 使用IDatasetContainer2访问网络数据集

一旦获取了用于访问合适的数据源(文件地理数据库或shp文件)的网络数据集扩展对象后,你就可以访问网络数据集了。例如,下面的代码就演示了如何打开名为“Street_ND”的网络数据集。

 // 上面的IDatasetContainer2变量 dsCont 的方法DatasetByName()找到名为"Street_ND"的网络数据集,返回一个IDataset对象
IDataset dataset = dsCont.DatasetByName(esriDTNetworkDataset, "Street_ND");
// 使用INetworkDataset变量 networkDataset 接住IDataset对象(经身份转换为INetworkDataset)
INetworkDataset networkDataset = dataset as INetworkDataset;

这样,就拿到了INetworkDataset,有了NetworkDataset(网络数据集),就可以转入NetworkAnalyst类库中的网络分析了。

ArcGIS 网络分析[8.1] 资料1 使用AO打开或创建网络数据集之【打开】的更多相关文章

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

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

  2. 【AO笔记】有关使用AO基于shp文件创建网络数据集的一个细节

    前些日子,和群友交流时提及shp文件创建单一网络数据集的创建问题. 由于项目需求,用shp文件创建网络合适,所以不得不去找一些古老的代码资料... 以前的研究中,创建网络数据集是根据IDatasetC ...

  3. ArcGIS 网络分析[8.2] 资料2 使用IDatasetContainer2接口的CreateDataset方法创建网络数据集

    上节提及如何使用IDatasetContainer2接口访问到网络数据集,上例可以封装为一个方法. 这节就使用IDatasetContainer2接口(Geodatabase类库)的CreateDat ...

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. Android’s HTTP Clients (httpClient 和 httpURLConnect 区别)

    来源自:http://android-developers.blogspot.jp/2011/09/androids-http-clients.html Most network-connected ...

  2. 异常:Unknown lifecycle phase "mvn". You must specify a valid lifecycle

    这是在使用maven打包方式启动springboot项目时出现的异常, 我的异常原因属于下面的情况: 此时maven指令行为:mvn spring-boot:run. 如果写成这样会导致最终的mave ...

  3. SQL---索引---创建索引

    CREATE INDEX 语句用于在表中创建索引. 在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据. 索引 您可以在表中创建索引,以便更加快速高效地查询数据. 用户无法看到索引,它们只 ...

  4. 一个页面tab标签切换,都有scroll事件的解决办法

    当前页有多个tab,如果都有scroll事件, 先解绑$(window).off('scroll') 再执行scroll就不可以了,多个标签就不会互相干扰: 给你们个例子: //标签切换    $(' ...

  5. TP框架Ajax如何使用

    ThinkPHP可以很好的支持AJAX请求,系统的\Think\Controller类提供了ajaxReturn方法用于AJAX调用后返回数据给客户端.并且支持JSON.JSONP.XML和EVAL四 ...

  6. 常量和静态变量会先载入内存后在进行执行php代码

    static $test=1;//在php执行前就已经写入内存$test++;var_dump($test);static $test=10;//在php执行前就已经写入内存var_dump($tes ...

  7. [Bootstrap 源码]——bootstrap源码之初始化

    bootstrap源码之初始化 我们先来分析normalize.less编译后的源码,我们知道normalize.css是一个专门将不同浏览器的默认css特性设置为统一效果的css库,它和reset. ...

  8. linux下yum安装redis以及使用

    1.yum install redis      --查看是否有redis   yum 源 2.yum install epel-release    --下载fedora的epel仓库 3. yum ...

  9. linux服务器解压缩文件的命令

    尝试去好好用linux.新手起步.   这边只会提到我用过的.其他相关的以后我用到了我会补充的.如果有错欢迎指正 注:1.c-创建-create 2.v-复杂输出    3.f-文件-file     ...

  10. python3 爬虫---爬取豆瓣电影TOP250

    第一次爬取的网站就是豆瓣电影 Top 250,网址是:https://movie.douban.com/top250?start=0&filter= 分析网址'?'符号后的参数,第一个参数's ...