几何网络必须存在数据集中,Engine创建的时候要有geodatabase updata 许可,我的数据库是个人数据库。
先看一下ArcMap是怎么创建的
在catalog中打开创建几个网络的向导
几何网络的名称
选中参与网络的要素
是否启用enable字段
数据集的角色
创建权重字段
权重字段和相应的字段关联
结果如下:
复制代码
效果如下:
先看一下ArcMap是怎么创建的
在catalog中打开创建几个网络的向导
几何网络的名称
选中参与网络的要素
是否启用enable字段
数据集的角色
创建权重字段
权重字段和相应的字段关联
结果如下:
- /// <summary>
- /// 打开个人数据库
- /// </summary>
- /// <param name="_pGDBName"></param>
- /// <returns></returns>
- public IWorkspace GetWorkspace(String _pGDBName)
- {
- IWorkspaceFactory pWsFac = new AccessWorkspaceFactoryClass();
- IWorkspace pWs = pWsFac.OpenFromFile(_pGDBName,0);
- return pWs;
- }
- public void CreateGeometricNetwork(IWorkspace _pWorkspace, IFeatureDatasetName
- _pFeatureDatasetName,String _pGeometricName)
- {
- INetworkLoader2 pNetworkLoader = new NetworkLoaderClass();
- // 网络的名称
- pNetworkLoader.NetworkName = _pGeometricName;
- // 网络的类型
- pNetworkLoader.NetworkType = esriNetworkType.esriNTUtilityNetwork;
- // Set the containing feature dataset.
- pNetworkLoader.FeatureDatasetName = (IDatasetName)_pFeatureDatasetName;
- // 检查要建立几何网络的数据,每一个要素只能参与一个网络
- if (pNetworkLoader.CanUseFeatureClass("PrimaryLine") ==
- esriNetworkLoaderFeatureClassCheck.esriNLFCCValid)
- {
- pNetworkLoader.AddFeatureClass("PrimaryLine",
- esriFeatureType.esriFTComplexEdge, null, false);
- }
- if (pNetworkLoader.CanUseFeatureClass("Feeder") ==
- esriNetworkLoaderFeatureClassCheck.esriNLFCCValid)
- {
- pNetworkLoader.AddFeatureClass("Feeder", esriFeatureType.esriFTSimpleJunction,
- null, false);
- }
- // 我的数据中没有enable字段,所以,用了false,如果用true的话,就要进行相关的设置
- INetworkLoaderProps pNetworkLoaderProps = (INetworkLoaderProps)pNetworkLoader;
- pNetworkLoader.PreserveEnabledValues = false;
- // Set the ancillary role field for the Feeder class.
- String defaultAncillaryRoleFieldName =
- pNetworkLoaderProps.DefaultAncillaryRoleField;
- esriNetworkLoaderFieldCheck ancillaryRoleFieldCheck =
- pNetworkLoader.CheckAncillaryRoleField("Feeder",
- defaultAncillaryRoleFieldName);
- switch (ancillaryRoleFieldCheck)
- {
- case esriNetworkLoaderFieldCheck.esriNLFCValid:
- case esriNetworkLoaderFieldCheck.esriNLFCNotFound:
- pNetworkLoader.PutAncillaryRole("Feeder",
- esriNetworkClassAncillaryRole.esriNCARSourceSink,
- defaultAncillaryRoleFieldName);
- break;
- default:
- Console.WriteLine(
- "The field {0} could not be used as an ancillary role field.",
- defaultAncillaryRoleFieldName);
- break;
- }
- pNetworkLoader.SnapTolerance = 0.02;
- // 给几何网络添加权重
- pNetworkLoader.AddWeight("Weight", esriWeightType.esriWTDouble, 0);
- // 将权重和PrimaryLine数据中的SHAPE_Length字段关联
- pNetworkLoader.AddWeightAssociation("Weight", "PrimaryLine", "SHAPE_Length");
- // 构建网络
- pNetworkLoader.LoadNetwork();
- }
- IWorkspace pWs = GetWorkspace(@"E:\arcgis\Engine\Geometric.mdb");
- IFeatureWorkspace pFtWs = pWs as IFeatureWorkspace;
- IFeatureDataset pFtDataset = pFtWs.OpenFeatureDataset("work");
- IDataset pDataset = pFtDataset as IDataset;
- IFeatureDatasetName pFtDatasetName = pDataset.FullName as IFeatureDatasetName;
- CreateGeometricNetwork(pWs, pFtDatasetName, "TestGeometric");
效果如下: