Example #1
0
        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(), "异常");
            }
        }
Example #2
0
 public void Emergency_RemoveVehicle(EmergencyVehicle emergencyVehicle)
 {
     Emergency_VehicleList.Remove(emergencyVehicle);
 }