ArcGIS 网络分析[8.1] 资料1 使用AO打开或创建网络数据集之【打开】

时间:2021-01-16 03:37:38

为了创建或打开一个网络数据集,你必须使用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)

ArcGIS 网络分析[8.1] 资料1 使用AO打开或创建网络数据集之【打开】ArcGIS 网络分析[8.1] 资料1 使用AO打开或创建网络数据集之【打开】
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类库中的网络分析了。