在进行ArcGIS的NetworkAnalyst分析时,每种分析结果的展示都是以INALayer为载体,
NALayerClass实现了ILayer、ICompositeLayer接口,但是它又不同于一般的CompositeLayer,
它的子图层是不能独自删除的。
还有一个特点是,INALayer的子图层的FeatureClass是NetworkAnalyst独有的,它不保存到GDB
中,即它的分析结果是保存在mxd文件中的。如果我们想实现INALayer的图层结构,或者
添加自定义的子图层,则可以用如下方法。
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
1 INASolver m_NaSolver = new NAClosestFacilitySolverClass();
2 //QI from the Network Dataset to the DatasetComponent
3 IDatasetComponent dsComponent = m_Network.NetworkData as IDatasetComponent;
4 //Get the Data Element
5 IDENetworkDataset deNetworkDataset = dsComponent.DataElement as IDENetworkDataset;
6 //Create NAContext
7 INAContextEdit naContextEdit = m_NaSolver.CreateContext(deNetworkDataset, m_SolverName) as INAContextEdit;
8 naContextEdit.Bind(m_Network.NetworkData, new GPMessagesClass());
9 //get NAContext
10 m_NAContext = naContextEdit as INAContext;
11 //先生成默认的INALayer
12 INALayer nalayer = m_NaSolver.CreateLayer(m_NAContext);
13 //清除所有原有图层
14 nalayer.Clear();
15 //接下来生成自定义的FeatureClass要素类
16 //QI
17 INAContextEdit naContextEdit = m_NAContext as INAContextEdit;
18 //定义分区中心类
19 INAClassDefinition dPartCenterClass = BuildPartitionCenterFields(sRef);//使用INAClassDefinitionEdit生成
20 INAClass naClass = naContextEdit.CreateAnalysisClass(dPartCenterClass);
21 //将生成要素类添加到INALayer中
22 IFeatureLayer layer = new FeatureLayerClass();
23 layer.Name = "自定义图层";
24 layer.FeatureClass = naClass as IFeatureClsss;
25
现在将nalayer添加到mapControl控件就可以看到自己添加的子图层了,可以再此基础上进行自己想要的
操作。