//规划车辆智能体行驶的道路 private void OrdinaryVehiclePlanRoute() { List <Result> pResultList = new List <Result>(); OrdinaryVehicleDijkstra pOrdinaryVehicleDijkstra = new OrdinaryVehicleDijkstra(); pResultList = pOrdinaryVehicleDijkstra.DepotToDest(pOrdinaryVehicleAgent, pRoadAgent); //将路网初始化成IPolyline Collection <RouteNode> routeNodes = new Collection <RouteNode>();//存储某起点和终点最短路径网络所经过的结点 List <IPolyline> routeroad = new List <IPolyline>(); RouteResult = new List <List <VehicleRouteResult> >(); for (int j = 0; j < pResultList.Count; j++) { foreach (string str in pResultList[j].StrResultNode) { DynamicRoutePlanDijkstra.addRouteNodes(routeNodes, str); } DynamicRoutePlanDijkstra.addRouteNodes(routeNodes, pResultList[j].EndNodeID); List <VehicleRouteResult> ListVehicleRouteResult = new List <VehicleRouteResult>(); ListVehicleRouteResult = pOrdinaryVehicleDijkstra.GetVehicleRoad(routeNodes, pOrdinaryVehicleAgent[j].OriginationPoint, pOrdinaryVehicleAgent[j].DestinationPoint); RouteResult.Add(ListVehicleRouteResult); ListVehicleRouteResult = null; routeNodes.Clear(); } for (int k = 0; k < pOrdinaryVehicleAgent.Count; k++) { pOrdinaryVehicleAgent[k].PlanRouteResult = RouteResult[k]; } }
private void button3_Click(object sender, EventArgs e) { try { if (comboBox1.Text == "") { MessageBox.Show("请输入应急资源仓库数据", "输入应急资源仓库数据", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); } else if (comboBox2.Text == "") { MessageBox.Show("请输入应急处置空间位置数据", "输入应急处置空间位置数据", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); } else { IFeatureLayer pFeatureLayerDepot = CDataImport.ImportFeatureLayerFromControltext(comboBox1.Text); List <IPoint> Depotpoint = new List <IPoint>(); IFeatureClass pFeatureClassDepot = pFeatureLayerDepot.FeatureClass; IFeatureCursor pFeatureCursorDepot = pFeatureClassDepot.Search(null, false); IFeature pFeatureDepot = pFeatureCursorDepot.NextFeature(); while (pFeatureDepot != null) { Depotpoint.Add(pFeatureDepot.Shape as IPoint); pFeatureDepot = pFeatureCursorDepot.NextFeature(); } IFeatureLayer pFeatureLayerDept = CDataImport.ImportFeatureLayerFromControltext(comboBox2.Text); List <IPoint> Deptpoint = new List <IPoint>(); IFeatureClass pFeatureClassDept = pFeatureLayerDept.FeatureClass; IFeatureCursor pFeatureCursorDept = pFeatureClassDept.Search(null, false); IFeature pFeatureDept = pFeatureCursorDept.NextFeature(); while (pFeatureDept != null) { Deptpoint.Add(pFeatureDept.Shape as IPoint); pFeatureDept = pFeatureCursorDept.NextFeature(); } //获取应急资源仓库到达应急处置空间位置的路径 DijkstraClass.DynamicRoutePlanDijkstra pDynamicRoutePlan = new DijkstraClass.DynamicRoutePlanDijkstra(); List <Result> resultlist = new List <Result>(); resultlist = pDynamicRoutePlan.DepotToDest(pFeatureLayerDepot, pFeatureLayerDept, pRoadAgent); //将路网初始化成IPolyline Collection <RouteNode> routeNodes = new Collection <RouteNode>();//存储某起点和终点最短路径网络所经过的结点 List <IPolyline> routeroad = new List <IPolyline>(); RouteResult = new List <List <VehicleRouteResult> >(); for (int i = 0; i < resultlist.Count; i++) { foreach (string str in resultlist[i].StrResultNode) { DynamicRoutePlanDijkstra.addRouteNodes(routeNodes, str); } DynamicRoutePlanDijkstra.addRouteNodes(routeNodes, resultlist[i].EndNodeID); List <VehicleRouteResult> ListVehicleRouteResult = new List <VehicleRouteResult>(); ListVehicleRouteResult = pDynamicRoutePlan.GetVehicleRoad(routeNodes, Depotpoint[i], Deptpoint[0]); RouteResult.Add(ListVehicleRouteResult); ListVehicleRouteResult = null; //显示路线在主页面上 pDynamicRoutePlan.GetIElement(routeNodes); routeroad.Add(Variable.PElement.Geometry as IPolyline); routeNodes.Clear(); } //显示路线在主页面上 DynamicRoutePlanDijkstra.GetIElement(routeroad); DynamicRoutePlanDijkstra.displayElement(); //道路智能体的初始化 //进行车辆智能体的运行 for (int k = 0; k < Depotpoint.Count; k++) { EmergencyVehicle emergencyVehicle = new EmergencyVehicle(); emergencyVehicle.OriginationPoint = Depotpoint[k]; emergencyVehicle.DestinationPoint = Deptpoint[0]; emergencyVehicle.PlanRouteResult = RouteResult[k]; pEmergencyVehicleAgent.Add(emergencyVehicle); } VehicleCount = pEmergencyVehicleAgent.Count; ProgressCount = new int[VehicleCount]; //初始化车辆所在的路网中 for (int j = 0; j < VehicleCount; j++) { ProgressCount[j] = 0; } //获取车辆当前所在路网的路段 for (int a = 0; a < VehicleCount; a++) { pEmergencyVehicleAgent[a].RunVehicleLine = pEmergencyVehicleAgent[a].PlanRouteResult[ProgressCount[a]].pLine; pEmergencyVehicleAgent[a].CurrentLine = pEmergencyVehicleAgent[a].PlanRouteResult[ProgressCount[a]].pLine; pEmergencyVehicleAgent[a].CurrentOrigination = pEmergencyVehicleAgent[a].PlanRouteResult[ProgressCount[a]].Startpoint; pEmergencyVehicleAgent[a].CurrentDestination = pEmergencyVehicleAgent[a].PlanRouteResult[ProgressCount[a]].Endpoint; pEmergencyVehicleAgent[a].Distance = 1550.5; } //获取车辆所在的路网的的点 for (int b = 0; b < VehicleCount; b++) { if (pEmergencyVehicleAgent[b].CurrentLine.FromPoint.X == pEmergencyVehicleAgent[b].CurrentOrigination.X && pEmergencyVehicleAgent[b].CurrentLine.FromPoint.Y == pEmergencyVehicleAgent[b].CurrentOrigination.Y) { pEmergencyVehicleAgent[b].CurrentPoint = pEmergencyVehicleAgent[b].CurrentLine.FromPoint; } else { pEmergencyVehicleAgent[b].CurrentPoint = pEmergencyVehicleAgent[b].CurrentLine.ToPoint; } } for (int c = 0; c < VehicleCount; c++) { DrawPointElement(pEmergencyVehicleAgent[c].CurrentPoint); } timer1.Enabled = true; timer1.Interval = 1500; } } catch (Exception ex) { MessageBox.Show(ex.Message + "\n" + ex.ToString(), "异常"); } }