ArcGIS 網絡分析[8.1] 資料1 使用AO打開或創建網絡數據集之【打開】
為了創建或打開一個網絡數據集,你必須使用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 asIDatasetContainer2; //將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打開或創建網絡數據集之【打開】