zoukankan      html  css  js  c++  java
  • 【AO笔记】有关使用AO基于shp文件创建网络数据集的一个细节

    前些日子,和群友交流时提及shp文件创建单一网络数据集的创建问题。

    由于项目需求,用shp文件创建网络合适,所以不得不去找一些古老的代码资料...

    以前的研究中,创建网络数据集是根据IDatasetContainer2.CreateDataset()方法创建的,参数是一个IDEDataset对象,返回一个IDataset引用。

    IDatasetContainer2可以根据IFeatureDataset接口(若为地理数据库要素数据集创建网络)或IWorkspace接口(若为shp文件创建单一网络)转换而来。

    读取shp文件,转换接口为IFeatureClass后,将IFeatureClass as IDataset,利用IDataset的Workspace接口访问其工作空间IWorkspace

    将IWorkspace as IWorkspaceExtensionManager,使用其FindExtension()方法获取IWorkspaceExtension

    将IWorkspaceExtension as IDatasetContaner2即可。


    读取要素数据集IFeatureDataset后,IFeatureDataset as IFeatureDatasetExtensionContainer,利用其FindExtension()方法获取IFeatureDatasetExtension

    将IFeatureDatasetExtension as IDatasetContainer2即可。

    但是,总是会在IDatasetContainer2.CreateDataset()方法处报错。

    究其原因,是IDEDataset的子接口引用IDENetworkDataset的一个设置有误。

    IDENetworkDataset是掌管网络数据集的数据组织的接口,是数据元素网络数据集的具体描述。

    其升级接口是IDENetworkDataset2。

    它继承自IDEDataset。

    实例化一个数据元素网络数据集类只需:

    IDENetworkDataset deNetworkDataset = new DENetworkDatasetClass();

    属于ESRI.ArcGIS.Geodatabase类库。

    如何设置IDENetworkDataset接口下的各种属性,参考我网络分析系列博客。

    在桌面Catalog窗口创建网络数据集时,大家都知道有一步是设置点线等数据源的高程信息:

    关键就在这里。

    直接给出结论:

    • 若用代码创建shp文件的网络数据集,且对高程无需求(即选择无),必须对IDENetworkDataset2.ElevationModel设置为None;
    • 若用代码创建地理数据库中要素数据集的网络数据集,且对高程无需求(即选择无),默认IDENetworkDataset2.ElevationModel就是None,无需设置;

    代码即:

    // 假如shp创建单一网络
    // 并且需求中无需指定网络数据集的高程信息
    // 则必须如下设置
    IDENetworkDataset2 deNetworkDataset2 = deNetworkDataset as IDENetworkDataset2;
    deNetworkDataset2.ElevationModel = esriNetworkElevationModel.esriNEMNone;

    否则会报0x8004228E的错误。

    ps:有可能是破解版的问题,等正版用户测试。

    参考资料:

    [1]. AE网络分析; http://jhlong12345.blog.163.com/blog/static/12306312920134811529595/

    [2]. How to create a shapefile-based network dataset(使用AO 9.3); http://resources.esri.com/help/9.3/arcgisengine/dotnet/06443414-d0a7-455d-a199-dfd49aca7d98.htm

  • 相关阅读:
    剑指 Offer 22. 链表中倒数第k个节点
    剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
    Leetcode1450. 在既定时间做作业的学生人数
    Leetcode1572. 矩阵对角线元素的和
    Leetcode 1480. 一维数组的动态和
    Idea连接数据库报错
    Java实现二叉树层次遍历并存入List的方法:从上往下,从左往右
    SpringCloud资源网站
    Java循环对list进行remove
    Java中字符串判空的正确打开方式
  • 原文地址:https://www.cnblogs.com/onsummer/p/9005696.html
Copyright © 2011-2022 走看看