• Solve


    /// <summary>
    
            /// Solves this instance.
    
            /// </summary>
    
            /// <returns>IFeatureClass.</returns>
    
            public IFeatureClass Solve()
    
            {
    
                log.WriteLog("Solving...");
    
                IGPMessages gpMessages = new GPMessagesClass();
    
                try
    
                {
    
                    ConfigureSolverSettings();
    
                    m_NAContext.Solver.Solve(m_NAContext, gpMessages, null);
    
                    return m_NAContext.NAClasses.get_ItemByName("SALines") as IFeatureClass;
    
                }
    
                catch (Exception e)
    
                {
    
                    log.WriteLog("GP执行失败:" + e.Message);
    
                    return null;
    
                }
    
                finally
    
                {
    
                    ////记录GPMessages
    
                    string sGPMessages = GetGPMessagesAsString(gpMessages);
    
                    log.WriteLog("GP执行信息:" + sGPMessages);
    
                    log.WriteLog("Solve完成!");
    
                }
    
            }
    
     
    
     
    
    /// <summary>
    
            /// Prepare the solver
    
            /// </summary>
    
            private void ConfigureSolverSettings()
    
            {
    
                ConfigureSettingsSpecificToServiceAreaSolver();
    
                ConfigureGenericSolverSettings();
    
                UpdateContextAfterChangingSettings();
    
            }
    
     
    
            /// <summary>
    
            /// Update settings that only apply to the Service Area
    
            /// </summary>
    
            private void ConfigureSettingsSpecificToServiceAreaSolver()
    
            {
    
                INAServiceAreaSolver naSASolver = m_NAContext.Solver as INAServiceAreaSolver;
    
     
    
                naSASolver.DefaultBreaks = ParseBreaks("3600");
    
     
    
                naSASolver.MergeSimilarPolygonRanges = false;
    
                naSASolver.OutputPolygons = esriNAOutputPolygonType.esriNAOutputPolygonNone;
    
                naSASolver.OverlapLines = false;
    
                naSASolver.SplitLinesAtBreaks = true;
    
                naSASolver.TravelDirection = esriNATravelDirection.esriNATravelDirectionFromFacility;
    
                naSASolver.OutputLines = esriNAOutputLineType.esriNAOutputLineTrueShape;
    
            }
    
     
    
            /// <summary>
    
            /// Update settings that apply to all solvers
    
            /// </summary>
    
            private void ConfigureGenericSolverSettings()
    
            {
    
                INASolverSettings naSolverSettings = m_NAContext.Solver as INASolverSettings;
    
                naSolverSettings.ImpedanceAttributeName = "Time";
    
     
    
                // set the oneway restriction, if necessary
    
                IStringArray restrictions = naSolverSettings.RestrictionAttributeNames;
    
                restrictions.RemoveAll();
    
                naSolverSettings.RestrictionAttributeNames = restrictions;
    
                //naSolverSettings.RestrictUTurns = esriNetworkForwardStarBacktrack.esriNFSBNoBacktrack;
    
            }
    
     
    
            /// <summary>
    
            /// When the solver has been update, the context must be updated as well
    
            /// </summary>
    
            private void UpdateContextAfterChangingSettings()
    
            {
    
                IDatasetComponent datasetComponent = m_NAContext.NetworkDataset as IDatasetComponent;
    
                IDENetworkDataset deNetworkDataset = datasetComponent.DataElement as IDENetworkDataset;
    
                m_NAContext.Solver.UpdateContext(m_NAContext, deNetworkDataset, new GPMessagesClass());
    
            }
    
     
    
     
    
    /// <summary>
    
            /// Prepare the text string for breaks
    
            /// </summary>
    
            /// <param name="p">The p.</param>
    
            /// <returns>IDoubleArray.</returns>
    
            private IDoubleArray ParseBreaks(string p)
    
            {
    
                String[] breaks = p.Split(' ');
    
                IDoubleArray pBrks = new DoubleArrayClass();
    
                int firstIndex = breaks.GetLowerBound(0);
    
                int lastIndex = breaks.GetUpperBound(0);
    
                for (int splitIndex = firstIndex; splitIndex <= lastIndex; splitIndex++)
    
                {
    
                    try
    
                    {
    
                        pBrks.Add(Convert.ToDouble(breaks[splitIndex]));
    
                    }
    
                    catch (FormatException)
    
                    {
    
                        log.WriteLog("Breaks are not properly formatted.  Use only digits separated by spaces");
    
                        pBrks.RemoveAll();
    
                        return pBrks;
    
                    }
    
                }
    
     
    
                return pBrks;
    
            }
    
     
    
     
    
    /// <summary>
    
            /// Gets the GP messages as string.
    
            /// </summary>
    
            /// <param name="gpMessages">The gp messages.</param>
    
            /// <returns>System.String.</returns>
    
            public string GetGPMessagesAsString(IGPMessages gpMessages)
    
            {
    
                // Gather Error/Warning/Informative Messages
    
                var messages = new StringBuilder();
    
                if (gpMessages != null)
    
                {
    
                    for (int i = 0; i < gpMessages.Count; i++)
    
                    {
    
                        IGPMessage gpMessage = gpMessages.GetMessage(i);
    
                        string message = gpMessage.Description;
    
                        switch (gpMessages.GetMessage(i).Type)
    
                        {
    
                            case esriGPMessageType.esriGPMessageTypeError:
    
                                messages.AppendLine("Error " + gpMessage.ErrorCode + ": " + message);
    
                                break;
    
                            case esriGPMessageType.esriGPMessageTypeWarning:
    
                                messages.AppendLine("Warning: " + message);
    
                                break;
    
                            default:
    
                                messages.AppendLine("Information: " + message);
    
                                break;
    
                        }
    
                    }
    
                }
    
     
    
                return messages.ToString();
    
            }
  • 相关阅读:
    卡特兰数
    割点和桥
    子序列(超级水)
    react 进行时
    又开启react之路
    关于特殊字体
    react 组件传值
    git 的安装和项目建立
    ES6 let and const
    js封装的一行半显示省略号(字数自由控制)
  • 原文地址:https://www.cnblogs.com/jhlong/p/5394424.html
Copyright © 2020-2023  润新知