
/// </summary>
/// <param name="_pWsName"></param>
/// <param name="_pDatasetName"></param>
/// <param name="_pNetName"></param>
/// <param name="_pFtName"></param>
void CreateNetworkDataset(string _pWsName, string _pDatasetName,string _pNetName, string _pFtName)
{
IDENetworkDataset pDENetworkDataset = new DENetworkDatasetClass()
pDENetworkDataset.Buildable = true
IWorkspace pWs = GetWorkspace(_pWsName)
IFeatureWorkspace pFtWs = pWs as IFeatureWorkspace
IFeatureDataset pFtDataset = pFtWs.OpenFeatureDataset(_pDatasetName)
// 定义空间参考,负责会出错
IDEGeoDataset pDEGeoDataset = (IDEGeoDataset)pDENetworkDataset
IGeoDataset pGeoDataset = pFtDataset as IGeoDataset
pDEGeoDataset.Extent = pGeoDataset.Extent
pDEGeoDataset.SpatialReference = pGeoDataset.SpatialReference
// 网络数据集的名称
IDataElement pDataElement = (IDataElement)pDENetworkDataset
pDataElement.Name = _pNetName
// 参加建立网络数据集的要素类
INetworkSource pEdgeNetworkSource = new EdgeFeatureSourceClass()
pEdgeNetworkSource.Name = _pFtName
pEdgeNetworkSource.ElementType = esriNetworkElementType.esriNETEdge
// 要素类的连通性
IEdgeFeatureSource pEdgeFeatureSource = (IEdgeFeatureSource)pEdgeNetworkSource
pEdgeFeatureSource.UsesSubtypes = false
pEdgeFeatureSource.ClassConnectivityGroup = 1
pEdgeFeatureSource.ClassConnectivityPolicy =esriNetworkEdgeConnectivityPolicy.esriNECPEndVertex
//不用转弯数据
pDENetworkDataset.SupportsTurns = false
IArray pSourceArray = new ArrayClass()
pSourceArray.Add(pEdgeNetworkSource)
pDENetworkDataset.Sources = pSourceArray
//网络数据集的属性设置
IArray pAttributeArray = new ArrayClass()
// Initialize variables reused when creating attributes:
IEvaluatedNetworkAttribute pEvalNetAttr
INetworkAttribute2 pNetAttr2
INetworkFieldEvaluator pNetFieldEval
INetworkConstantEvaluator pNetConstEval
pEvalNetAttr = new EvaluatedNetworkAttributeClass()
pNetAttr2 = (INetworkAttribute2)pEvalNetAttr
pNetAttr2.Name ="Meters"
pNetAttr2.UsageType = esriNetworkAttributeUsageType.esriNAUTCost
pNetAttr2.DataType = esriNetworkAttributeDataType.esriNADTDouble
pNetAttr2.Units = esriNetworkAttributeUnits.esriNAUMeters
pNetAttr2.UseByDefault = false
pNetFieldEval = new NetworkFieldEvaluatorClass()
pNetFieldEval.Setexpression_r("[METERS]", "")
//方向设置
pEvalNetAttr.set_Evaluator(pEdgeNetworkSource,esriNetworkEdgeDirection.esriNEDAlongDigitized, (INetworkEvaluator)pNetFieldEval)
pEvalNetAttr.set_Evaluator(pEdgeNetworkSource,esriNetworkEdgeDirection.esriNEDAgainstDigitized, (INetworkEvaluator)pNetFieldEval)
pNetConstEval = new NetworkConstantEvaluatorClass()
pNetConstEval.ConstantValue = 0
pEvalNetAttr.set_DefaultEvaluator(esriNetworkElementType.esriNETEdge,(INetworkEvaluator)pNetConstEval)
pEvalNetAttr.set_DefaultEvaluator(esriNetworkElementType.esriNETJunction,(INetworkEvaluator)pNetConstEval)
pEvalNetAttr.set_DefaultEvaluator(esriNetworkElementType.esriNETTurn,(INetworkEvaluator)pNetConstEval)
// 一个网络数据集可以有多个属性,我只添加了一个
pAttributeArray.Add(pEvalNetAttr)
pDENetworkDataset.Attributes = pAttributeArray
// 创建网络数据集,注意在创建几何网络的时候会锁定相应的要素类,因此不要用ArcMap或者catalog等打开参相应的数据
INetworkDataset pNetworkDataset = Create(pFtDataset, pDENetworkDataset)
//建立网络
INetworkBuild pNetworkBuild = (INetworkBuild)pNetworkDataset
pNetworkBuild.BuildNetwork(pGeoDataset.Extent)
}
网络分析是arcgis提供的重要的空间分析的功能,利用它可以模拟现实世界的网络问题。例如多个地点的最短路径问题。在arcgis中,将地理网络模型分为两种:几何网络模型和网络数据集模型。由于本片文章研究的是网络数据集模型,所以暂时不说几何网络模型。
在网络数据集模型中,可以随意改变资源流动的方向,速度,终点等等。如驾驶员选择行车路线等等模拟交通网络。利用地理数据库中的要素类数据集或者shp文件来建立网络数据集,利用“网络分析”工具可以进行网络数据集的分析。
接下来介绍,如何通过网络数据集进行一个最短路径分析的例子。
一、网络数据集的创建
1.首先打开MXD地图。
2.激活你的拓展模块
点击菜单栏 自定义-拓展模块,然后把network给勾上
3.在右侧目录中,找到road_network,选择新建网络数据集
4.接下来会提示你,输入新的数据集的名称,以及添加的要素,点击下一步就好。
第三步是添加转弯要素,选用默认的就可以。第四步选择网络的连通性,可以进行连通性策略的选择。第五步是高程建模,点击下一步即可。其余就可以点下一步。
简单的说,如果你不需要特别的修改的话,可以一路点击下一步过来,arcgis会进行的自动的网络数据集的建立的。
5.最后就完成了网络数据集的建立。
二、最短路径分析
我们已经完成了是网络数据集的构建,接下来就可以进行最短路径的分析。
首先调出network analyst工具栏
点击新建路径,创建一个路径的图层
点击创建网络位置工具,在图上标出你想要的点
选择好之后就可以点击求解
完成最短路径的计算!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)