• 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,如下代码:

     1         /// <summary>
     2         /// 根据要素数据集与数据元素网络数据集,创建网络数据集。
     3         /// </summary>
     4         /// <param name="_pFeatureDataset">包含网络数据集的要素数据集</param>
     5         /// <param name="_pDENetDataset">数据元素网络数据集</param>
     6         /// <returns></returns>
     7         public INetworkDataset CreateBuildingDataset(IFeatureDataset _pFeatureDataset, IDENetworkDataset2 _pDENetDataset)
     8         {
     9             IFeatureDatasetExtensionContainer featureDatasetExtensionContainer = (IFeatureDatasetExtensionContainer)_pFeatureDataset;
    10             IFeatureDatasetExtension featureDatasetExtension = featureDatasetExtensionContainer.FindExtension(esriDatasetType.esriDTNetworkDataset);
    11             IDatasetContainer2 datasetContainer2 = (IDatasetContainer2)featureDatasetExtension;
    12             IDEDataset deNetDataset = _pDENetDataset as IDEDataset;
    13             //创建网络数据集
    14             INetworkDataset networkDataset = (INetworkDataset)datasetContainer2.CreateDataset(deNetDataset);
    15             return networkDataset;
    16         }

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

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

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

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

  • 相关阅读:
    禁止ios默认拉动弹性行为
    javascript 网页图标音乐切换
    js常用 禁止F5 和右键
    弹窗插件
    手机时间选择插件 Jquery
    Jquery获取背景图片src路径
    Arduino 数字函数总结
    Arduino 开关控制小灯持续亮之具体思路
    C语言流控制命令的总结
    C++Primer 第四章 表达式
  • 原文地址:https://www.cnblogs.com/onsummer/p/6994366.html
Copyright © 2020-2023  润新知