文档库 最新最全的文档下载
当前位置:文档库 › ae网络分析部分C#

ae网络分析部分C#

// FeatureClass 获得FeatureDataset对象 转换为INetworkCollection 对象中GeometricNetworkByName获得 IGeometricNetwork 取 Network

//设置旗帜或障碍
void SetEdgeBarrier(INetwork network, IFeatureClass featClass, int edgeOID1, int
edgeOID2)
{ //Create the NetElementBarriers object.
INetElementBarriersGEN netEdgeBarriers = new NetElementBarriersClass()as
INetElementBarriersGEN;
int[] oidArray = new int[2];
oidArray[0] = edgeOID1;
oidArray[1] = edgeOID2;
https://www.wendangku.net/doc/2a8006988.html,work = network;
netEdgeBarriers.ElementType = esriETEdge;
netEdgeBarriers.SetBarriers(featClass.FeatureClassID, oidArray);
//Set the edge barrier in TraceFlowSolver.
ITraceFlowSolverGEN traceFlowSolver = new TraceFlowSolverClass()as
ITraceFlowSolverGEN;
INetSolver netSolver = traceFlowSolver as INetSolver;
netSolver.SourceNetwork = network;
netSolver.ElementBarriers(esriETEdge) = netEdgeBarriers;
}


//设置权重过滤 几何网络

void SetFilterWeights(INetwork network){
int[] range = new int[1];
//Establish the trace flow solver.
//针对分析方式
ITraceFlowSolverGEN traceFlowSolver = new TraceFlowSolverClass()as
ITraceFlowSolverGEN;
//可以设置具体的过滤信息 参数等内容
INetSolver netSolver = traceFlowSolver as INetSolver;
netSolver.SourceNetwork = network; //Add the weights.
//可以设置权重等辅助信息
INetSchema netSchema = network as INetSchema;

INetSolverWeightsGEN netSolverWeights = netSolverWeights as INetSolverWeightsGEN;
//设置权重信息
INetWeight netWeight = netSchema.WeightByName("Material");
netSolverWeights.FromToEdgeFilterWeight = netWeight;
netSolverWeights.ToFromEdgeFilterWeight = netWeight;
netSolverWeights.SetFilterType(esriETEdge, esriWFRange, true);
range[0] = 1;
netSolverWeights.SetFilterRanges(esriETEdge, range, range);

netWeight = netSchema.WeightByName("Fitting_Type");
netSolverWeights.JunctionFilterWeight = netWeight;
netSolverWeights.SetFilterType(esriETJunction, esriWFRange, true);
range[0] = 8;
netSolverWeights.SetFilterRanges(esriETJunction, range, range);

}

//显示旗帜
//网络分析旗帜管理类 、网络分析的成员对象
void FlagDisplay(INetworkAnalysisExtFlags flags, ITraceFlowSolverGEN traceSolver)
{
//定义edge的旗帜数组、 显示旗帜网络标志
IEdgeFlag[] edgeFlags = new IEdgeFlag[flags.EdgeFlagCount];
IFlagDisplay edgeFlagDisplay;
INetFlag edgeFlag;
for (int i = 0; i < flags.EdgeFlagCount; i++)
{
edgeFlagDisplay = flags.EdgeFlag(i);
edgeFlag = New EdgeFlagClass()as INetFlag;
https://www.wendangku.net/doc/2a8006988.html,erID = edgeFlagDisplay.FID;
https://www.wendangku.net/doc/2a8006988.html,erClassID = edgeFlagDisplay.FeatureClassID;
https://www.wendangku.net/doc/2a8006988.html,bel = "Edge";
edgeFlags[i] = edgeFlag;
}
//设置Edge起源数组
traceSolver.

PutEdgeOrigins(edgeFlags);}


//关于添加旗帜
/*
PointToEID对象发现最近的网络元件的几何网络中的一个给定的点。
IPointToEID接口被用来找到的EID和点位置的最近的边缘或在一个几何网络结元件到一个给定的点。
在寻找最近的边缘元素的情况下,沿着边缘的点的位置也被返回。从最终的边缘位置测量的百分比从数字化。
结果EID是从指定的几何网络和对应的功能,从一个层中指定的源地图。
的SnapTolerance是地图单位指定的SourceMap。
*/
void PlaceJunctionFlag(double x, double y, IMap map, INetworkAnalysisExt
networkAnalysisExt, ISymbol flagSymbol)
{
IPoint point = new PointClass()as IPoint;
point.X = x;
point.Y = y;
int EID;
IPoint outPoint;
//根据给定点返回最近的网络元素成员
IPointToEID pointToEID = new PointToEIDClass()as IPointToEID;
//返回eid的网络
pointToEID.GeometricNetwork = networkAnalysisExt.CurrentNetwork;
//最大容差值
pointToEID.SourceMap = map;
pointToEID.SnapTolerance = 10; //Set a snap tolerance of 10 map units.
//返回最近的网络几何对象EID和图形 junction
pointToEID.GetNearestJunction(point, out EID, out outPoint);
//提供用户元素与几何网络元素的转换
INetElements netElements = https://www.wendangku.net/doc/2a8006988.html,work as
INetElements;
int FCID, FID, subID;
// 查找Featureclass和用户id及子id
pNetElements.QueryIDs(EID, esriETJunction, out FCID, out FID, out subID);
//定义和显示网络标志,或在交界处的网络功能障碍的容器。
IJunctionFlagDisplay junctionFlagDisplay = new JunctionFlagDisplayClass()as
IJunctionFlagDisplay;
IFlagDisplay flagDisplay = junctionFlagDisplay as IFlagDisplay;
flagDisplay.FeatureClassID = FCID;
flagDisplay.FID = FID;
flagDisplay.SubID = subID;
flagDisplay.Geometry = outPoint as IGeometry;
flagDisplay.Symbol = flagSymbol;
//网络分析成员的管理类
INetworkAnalysisExtFlags networkAnalysisExtFlags = networkAnalysisExt as
INetworkAnalysisExtFlags;
networkAnalysisExtFlags.AddJunctionFlag(junctionFlagDisplay);
}

相关文档
相关文档 最新文档