1. 程式人生 > >ArcGIS 網絡分析[8.1] 資料1 使用AO打開或創建網絡數據集之【打開】

ArcGIS 網絡分析[8.1] 資料1 使用AO打開或創建網絡數據集之【打開】

find 重要 database red color play ace ext set

為了創建或打開一個網絡數據集,你必須使用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)中打開網絡數據集。

1 IFeatureDatasetExtensionContainer fdsExtCont = fds as IFeatureDatasetExtensionContainer;  //要素數據集身份轉化
2 IFeatureDatasetExtension fdsExt = fdsExtCont.FindExtension(esriDTNetworkDataset);  //從要素數據集中找到IFeatureDatasetExtension對象
3 IDatasetContainer2 dsCont = fdsExt as
IDatasetContainer2; //將IFeatureDatasetExtension對象身份轉化為IDatasetContainer2

下面的代碼就演示了如何在給定shp文件(shp文件對象的名稱為shpWS)中打開網絡數據集。

1 IWorkspaceExtensionManager wsExtMgr = shpWS as IWorkspaceExtensionManager;
2 UID myUID = new UIDClass();
3 myUID.Value = "esriGeoDatabase.NetworkDatasetWorkspaceExtension";
4 IWorkspaceExtension wsExt = wsExtMgr.FindExtension(myUID); //與上面類似
5 IDatasetContainer2 dsCont = wsExt as IDatasetContainer2; //與上面類似

下面的代碼演示了如何從給定的SDC文件中獲取網絡數據集(SDC文件對象名為sdcWS)

技術分享
1 IWorkspaceExtensionManager wsExtMgr = sdcWS as IWorkspaceExtensionManager;
2 UID myUID = new UIDClass();
3 myUID.Value = "esriGeoDatabase.NetworkDatasetWorkspaceExtension";
4 IWorkspaceExtension wsExt = wsExtMgr.FindExtension(myUID);
5 IDatasetContainer2 dsCont = wsExt as IDatasetContainer2;
打開SDC中的網絡數據集

2. 使用IDatasetContainer2訪問網絡數據集

一旦獲取了用於訪問合適的數據源(文件地理數據庫或shp文件)的網絡數據集擴展對象後,你就可以訪問網絡數據集了。例如,下面的代碼就演示了如何打開名為“Street_ND”的網絡數據集。

1 // 上面的IDatasetContainer2變量 dsCont 的方法DatasetByName()找到名為"Street_ND"的網絡數據集,返回一個IDataset對象
2 IDataset dataset = dsCont.DatasetByName(esriDTNetworkDataset, "Street_ND"); 
3 // 使用INetworkDataset變量 networkDataset 接住IDataset對象(經身份轉換為INetworkDataset)
4 INetworkDataset networkDataset = dataset as INetworkDataset;

這樣,就拿到了INetworkDataset,有了NetworkDataset(網絡數據集),就可以轉入NetworkAnalyst類庫中的網絡分析了。

ArcGIS 網絡分析[8.1] 資料1 使用AO打開或創建網絡數據集之【打開】