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二次開發之網絡分析了。
轉載于:https://www.cnblogs.com/onsummer/p/6994366.html
總結
以上是生活随笔為你收集整理的ArcGIS 网络分析[8.2] 资料2 使用IDatasetContainer2接口的CreateDataset方法创建网络数据集...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: day23 GUI
- 下一篇: Light OJ 1373 Strong