Exemplo n.º 1
0
        private void cmdSolve_Click(object sender, EventArgs e)
        {
            try
            {
                this.lstOutput.Items.Clear();
                this.lstOutput.Items.Add("Solving...");
                this.SetSolverSettings();
                IGPMessages messages = new GPMessagesClass();
                if (!this.m_pNAContext.Solver.Solve(this.m_pNAContext, messages, null))
                {
                    this.GetCFOutput("CFRoutes");
                }
                else
                {
                    this.lstOutput.Items.Add("Partial Result");
                }
                if (messages != null)
                {
                    for (int i = 0; i < messages.Count; i++)
                    {
                        esriGPMessageType type = messages.GetMessage(i).Type;
                        if (type != esriGPMessageType.esriGPMessageTypeWarning)
                        {
                            if (type != esriGPMessageType.esriGPMessageTypeError)
                            {
                                goto Label_0116;
                            }
                            this.lstOutput.Items.Add("Error " + messages.GetMessage(i).ErrorCode.ToString() + " " +
                                                     messages.GetMessage(i).Description);
                        }
                        else
                        {
                            this.lstOutput.Items.Add("Warning " + messages.GetMessage(i).Description);
                        }
                        continue;
Label_0116:
                        this.lstOutput.Items.Add("Information " + messages.GetMessage(i).Description);
                    }
                }
                IGeoDataset dataset = this.m_pNAContext.NAClasses.get_ItemByName("CFRoutes") as IGeoDataset;
                IEnvelope   extent  = dataset.Extent;
                if (!extent.IsEmpty)
                {
                    extent.Expand(1.1, 1.1, true);
                }
                (this.m_pFocusMap as IActiveView).Extent = extent;
                (this.m_pFocusMap as IActiveView).Refresh();
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message);
                this.cmdSolve.Text = "Find Closest Faclities";
            }
        }
Exemplo n.º 2
0
        private void btnGO_Click(object sender, System.EventArgs e)
        {
            int facilityCount = 0, cutOffVal = 0;

            if (txtFacilityCount.Text.Length > 0)
            {
                facilityCount = Convert.ToInt32(txtFacilityCount.Text);
            }

            if (txtCutOff.Text.Length > 0)
            {
                cutOffVal = Convert.ToInt32(txtCutOff.Text);
            }

            pGISHelper.SetSolverSettings(ref m_pNAContext, cutOffVal, facilityCount, cmbCost.Text, chkOneWay.Checked, chkHierachy.Checked);


            IGPMessages pGPMessages = new GPMessagesClass();

            IGPMessage pGPMessage = null;

            if (m_pNAContext.Solver.Solve(m_pNAContext, pGPMessages, null) == false)
            {
                for (int ii = 0; ii < pGPMessages.Count; ii++)
                {
                    pGPMessage = pGPMessages.GetMessage(ii);

                    MessageBox.Show(pGPMessage.Description);
                }

                pGISHelper.GetCFOutput("CFRoutes", ref m_pNAContext);
            }


            //'Zoom to the extent of the route
            IGeoDataset pGDS;
            IEnvelope   pEnv;

            pGDS = m_pNAContext.NAClasses.get_ItemByName("CFRoutes") as IGeoDataset;


            pEnv = pGDS.Extent;
            if (!pEnv.IsEmpty)
            {
                pEnv.Expand(1.1, 1.1, true);
                pMainFrm.getMapControl().Extent = pEnv;
            }


            pMainFrm.getMapControl().Refresh();
        }
Exemplo n.º 3
0
        //��ʼ���������������
        private void NetworkSolve()
        {
            try
            {
                IGPMessages gpMessages = new GPMessagesClass();
                IFeatureClass pFeatCls = null;
                IGeoDataset geoDataset = null;
                if (!m_NAContext.Solver.Solve(m_NAContext, gpMessages, null))
                {
                    for (int i = 0; i <= m_NAContext.NAClasses.Count - 1; i++)
                    {
                        string sName = m_NAContext.NAClasses.get_Name(i);
                        if (sName == "Routes")
                        {
                            geoDataset = m_NAContext.NAClasses.get_ItemByName("Routes") as IGeoDataset;
                            pFeatCls = geoDataset as IFeatureClass;
                           // LoadNANetworkLocations("Routes", pFeatCls, 5000);
                        }
                        if (sName == "CFRoutes")
                        {
                            geoDataset = m_NAContext.NAClasses.get_ItemByName("CFRoutes") as IGeoDataset;
                            pFeatCls = geoDataset as IFeatureClass;
                        }

                    }

                    IEnvelope pEnvelope = geoDataset.Extent;
                    if (!pEnvelope.IsEmpty)
                        pEnvelope.Expand(1.1, 1.1, true);
                    axMapControl1.Extent = pEnvelope;
                    axMapControl1.Refresh();
                }
                else
                {
                    if (gpMessages != null)
                    {
                        for (int i = 0; i < gpMessages.Count; i++)
                        {
                            switch (gpMessages.GetMessage(i).Type)
                            {

                                case esriGPMessageType.esriGPMessageTypeError:
                                    MessageBox.Show("Error " + gpMessages.GetMessage(i).ErrorCode.ToString() + " " + gpMessages.GetMessage(i).Description);
                                    break;
                                case esriGPMessageType.esriGPMessageTypeWarning:
                                    MessageBox.Show("Warning " + gpMessages.GetMessage(i).Description);
                                    break;
                                default:
                                    MessageBox.Show("Information " + gpMessages.GetMessage(i).Description);
                                    break;
                            }
                        }
                    }
                }
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.Message);

            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Call the OD cost matrix solver and display the results
        /// </summary>
        /// <param name="sender">Sender of the event</param>
        /// <param name="e">Event</param>
        private void cmdSolve_Click(object sender, EventArgs e)
        {
            this.toolStripStatusLabel1.Text = "Working...";
            Initialize();
            try
            {
                lbOutput.Items.Clear();
                cmdSolve.Text = "Solving...";

                SetSolverSettings();

                // Solve
                IGPMessages gpMessages = new GPMessagesClass();
                if (!m_NAContext.Solver.Solve(m_NAContext, gpMessages, null))
                {
                    // Get the ODLines output
                    GetODOutput();
                }
                else
                {
                    lbOutput.Items.Add("Partial Result");
                }

                // Display Error/Warning/Informative messages
                if (gpMessages != null)
                {
                    for (int i = 0; i < gpMessages.Count; i++)
                    {
                        switch (gpMessages.GetMessage(i).Type)
                        {
                        case esriGPMessageType.esriGPMessageTypeError:
                            lbOutput.Items.Add("Error " + gpMessages.GetMessage(i).ErrorCode.ToString() + " " + gpMessages.GetMessage(i).Description);
                            break;

                        case esriGPMessageType.esriGPMessageTypeWarning:
                            lbOutput.Items.Add("Warning " + gpMessages.GetMessage(i).Description);
                            break;

                        default:
                            lbOutput.Items.Add("Information " + gpMessages.GetMessage(i).Description);
                            break;
                        }
                    }
                }

                // Zoom to the extent of the route
                IGeoDataset gDataset = m_NAContext.NAClasses.get_ItemByName("ODLines") as IGeoDataset;
                IEnvelope   envelope = gDataset.Extent;
                if (!envelope.IsEmpty)
                {
                    envelope.Expand(1.1, 1.1, true);
                    axMapControl.Extent = envelope;
                }

                axMapControl.Refresh();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                cmdSolve.Text = "Find OD Cost Matrix";
            }
            this.toolStripStatusLabel1.Text = "Done!";
        }
Exemplo n.º 5
0
        private void btnGO_Click(object sender, System.EventArgs e)
        {
            int facilityCount=0,cutOffVal=0;

            if(txtFacilityCount.Text.Length>0)
                facilityCount=Convert.ToInt32(txtFacilityCount.Text);

            if(txtCutOff.Text.Length>0)
                cutOffVal=Convert.ToInt32(txtCutOff.Text);

            pGISHelper.SetSolverSettings(ref m_pNAContext,cutOffVal,facilityCount,cmbCost.Text,chkOneWay.Checked,chkHierachy.Checked);

            IGPMessages pGPMessages=new GPMessagesClass();

            IGPMessage pGPMessage=null;

            if(m_pNAContext.Solver.Solve(m_pNAContext, pGPMessages, null)==false){

                for(int ii=0;ii<pGPMessages.Count;ii++)
                {
                    pGPMessage=pGPMessages.GetMessage(ii);

                    MessageBox.Show(pGPMessage.Description);
                }

                pGISHelper.GetCFOutput("CFRoutes",ref m_pNAContext);

            }

              //'Zoom to the extent of the route
            IGeoDataset pGDS;
            IEnvelope pEnv;

             pGDS = m_pNAContext.NAClasses.get_ItemByName("CFRoutes") as IGeoDataset;

             pEnv = pGDS.Extent;
            if(!pEnv.IsEmpty)
            {
                 pEnv.Expand(1.1, 1.1, true);
                 pMainFrm.getMapControl().Extent = pEnv;
             }

            pMainFrm.getMapControl().Refresh();
        }
        /// <summary>
        /// 最短路径分析
        /// </summary>
        /// <param name="mapControl">地图控件</param>
        /// <param name="gdbfileName">数据库文件</param>
        /// <param name="featureDatasetName">要素集名字</param>
        /// <param name="ndsName">网络数据集名字</param>
        /// <param name="featureClasses">参数要素类及其阈值,其中键值包括:Stops(路线经过结点),Barriers,PolylineBarriers,PolygonBarriers</param>
        /// <param name="isShowDataBase">是否显示网络数据集</param>
        ///  <param name="isShowNalayer">是否显示网络分析图层</param>
        ///  <param name="routeLayer">最近路线图层</param>
        public static bool Short_Path(AxMapControl mapControl, string gdbfileName, string featureDatasetName, string ndsName, IDictionary <string, DecorateRouteFeatureClass> featureClasses, bool isShowDataBase, bool isShowNalayer, ref ILayer routeLayer)
        {
            //首先判断输入的参数要素类是否合法
            if (!FeatureClassKeyIsRight(featureClasses))
            {
                throw new Exception("参数字典错误");
            }
            // mapControl.ClearLayers();
            //打开工作空间
            IFeatureWorkspace pFeatureWorkspace = OpenWorkspace(gdbfileName) as IFeatureWorkspace;

            if (pFeatureWorkspace == null)
            {
                return(false);
            }
            //获取网络数据集
            INetworkDataset pNetworkDataset = OpenNetworkDataset(pFeatureWorkspace as IWorkspace, featureDatasetName, ndsName);

            if (pNetworkDataset == null)
            {
                Debug.Print("无法获取网络数据集");
                return(false);
            }
            //获取网络分析上下文
            INAContext pNAContext = CreateNAContext(pNetworkDataset);
            //打开节点图层 一般和网络数据集放置在一起 名称是xxx_Junctions
            IFeatureClass pVertexFC = pFeatureWorkspace.OpenFeatureClass(ndsName + "_Junctions");
            ILayer        pLayer    = null;

            // 显示网络数据集图层
            if (isShowDataBase)
            {
                INetworkLayer pNetworkLayer = new NetworkLayerClass();
                pNetworkLayer.NetworkDataset = pNetworkDataset;
                pLayer      = pNetworkLayer as ILayer;
                pLayer.Name = "网络数据集";
                mapControl.AddLayer(pLayer, 0);
            }
            //创建网络分析图层
            INALayer naLayer = pNAContext.Solver.CreateLayer(pNAContext);

            //显示网络分析图层
            if (isShowNalayer)
            {
                pLayer                  = naLayer as ILayer;
                pLayer.Name             = pNAContext.Solver.DisplayName;
                pLayer.SpatialReference = mapControl.SpatialReference;
                mapControl.AddLayer(pLayer, 0);
                IActiveView        pActiveView        = mapControl.ActiveView;
                IMap               pMap               = pActiveView.FocusMap;
                IGraphicsContainer pGraphicsContainer = pMap as IGraphicsContainer;
                mapControl.Refresh();
            }
            INASolver naSolver = pNAContext.Solver;

            //插入相关数据
            foreach (var value in featureClasses)
            {
                LoadNANetWorkLocations(pNAContext, value.Key, value.Value.FeatureClass, value.Value.SnapTolerance);
            }
            //插入经过点
            //LoadNANetWorkLocations(pNAContext,"Stops", stopFeatureClass, 30);
            //插入障碍点
            //    LoadNANetWorkLocations(pNAContext, "Barriers", barriesFeatureClass, 30);
            IGPMessages gpMessages = new GPMessagesClass();

            //  SetSolverSettings(pNAContext);
            //寻找最短路径
            try
            {
                pNAContext.Solver.Solve(pNAContext, gpMessages, new CancelTrackerClass());
                routeLayer = naLayer.get_LayerByNAClassName("Routes");
            }
            catch (Exception e)
            {
                Debug.Print("无法找到最短路径:" + e.Message);
                return(false);
            }
            mapControl.Refresh();
            if (gpMessages != null)
            {
                for (int i = 0; i < gpMessages.Count; i++)
                {
                    switch (gpMessages.GetMessage(i).Type)
                    {
                    case esriGPMessageType.esriGPMessageTypeError:
                        Debug.Print("错误 " + gpMessages.GetMessage(i).ErrorCode.ToString() + " " + gpMessages.GetMessage(i).Description);
                        break;

                    case esriGPMessageType.esriGPMessageTypeWarning:
                        Debug.Print("警告 " + gpMessages.GetMessage(i).Description);
                        break;

                    default:
                        Debug.Print("信息 " + gpMessages.GetMessage(i).Description);
                        break;
                    }
                }
            }
            return(true);
        }
Exemplo n.º 7
0
        //路径分析
        private void toolStripButton3_Click(object sender, EventArgs e)
        {
            if (global.networkAnalysis && global.clickedcount > 1)
            {
                global.networkAnalysis = false;
                listBox1.Items.Add("开始进行路径分析求解...");

                IGPMessages gpMessages = new GPMessagesClass();
                loadNANetworkLocations("Stops", global.inputFClass, 80);
                naSolver = global.m_NAContext.Solver;
                naSolver.Solve(global.m_NAContext, gpMessages, null);
                listBox1.Items.Add("done!");

                //获取路径结果
                INAStreetDirectionsAgent2 streetAgent;
                streetAgent = global.m_NAContext.Agents.get_ItemByName("StreetDirectionsAgent") as INAStreetDirectionsAgent2;
                //设置处理结果为中文
                //streetAgent.Language = "zh-CN";
                streetAgent.Execute(null, null);

                INAStreetDirectionsContainer directionsContainer;
                directionsContainer = streetAgent.DirectionsContainer as INAStreetDirectionsContainer;
                //directionsContainer.SaveAsXML("route.xml");

                int    directionsCount = directionsContainer.DirectionsCount;
                string routeIdName     = string.Empty;
                string routeString;
                for (int index = 0; index < directionsCount; index++)
                {
                    INAStreetDirections naStreetDirections = directionsContainer.get_Directions(index);
                    routeString = getDirectionsString(naStreetDirections);
                    getDataTableFromRouteString(routeString);
                }

                //解决完后,删除图层内容
                ITable pTable_inputFClass = global.inputFClass as ITable;
                pTable_inputFClass.DeleteSearchedRows(null);
                (global.p2DMap as IActiveView).Refresh();

                if (gpMessages != null)
                {
                    for (int i = 0; i < gpMessages.Count; i++)
                    {
                        switch (gpMessages.GetMessage(i).Type)
                        {
                        case esriGPMessageType.esriGPMessageTypeError:
                            listBox1.Items.Add("错误 " + gpMessages.GetMessage(i).ErrorCode.ToString() + " " + gpMessages.GetMessage(i).Description);
                            break;

                        case esriGPMessageType.esriGPMessageTypeWarning:
                            listBox1.Items.Add("警告 " + gpMessages.GetMessage(i).Description);
                            break;

                        default:
                            listBox1.Items.Add("信息 " + gpMessages.GetMessage(i).Description);
                            break;
                        }
                    }
                }

                (global.p2DMap as IActiveView).Refresh();
            }
            else if (global.clickedcount == 1)
            {
                MessageBox.Show("未选取终点,请继续定位!");
            }
            else
            {
                MessageBox.Show("未选取或更新起点和终点,请重新定位!");
            }
        }