生活随笔
收集整理的這篇文章主要介紹了
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();
}
總結
以上是生活随笔為你收集整理的Solve的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。