About the Route application using the NAServer extension in ArcGIS Server via a Web service Sample
[C#]
Route_WebServiceClass.cs
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Data.OleDb;
using System.Xml;
using System.Collections.Specialized;
using Route_WebService.WebService;
namespace Route_WebService
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Route_WebServiceClass : System.Windows.Forms.Form
{
#region Window Controls Declaration
private System.Windows.Forms.PictureBox pictureBox;
private System.Windows.Forms.GroupBox fraINASolverSettings;
private System.Windows.Forms.ComboBox cboUturnPolicy;
private System.Windows.Forms.Label label11;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.CheckedListBox chklstAccumulateAttributes;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.CheckedListBox chklstRestrictions;
private System.Windows.Forms.ComboBox cboImpedance;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.CheckBox chkIgnoreInvalidLocations;
private System.Windows.Forms.ComboBox cboNALayers;
private System.Windows.Forms.Label label10;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.CheckBox chkReturnMap;
private System.Windows.Forms.Button cmdSolve;
private System.Windows.Forms.ComboBox cboSnapToleranceUnits;
private System.Windows.Forms.TextBox txtMaxSnapTolerance;
private System.Windows.Forms.TextBox txtSnapTolerance;
private System.ComponentModel.IContainer components;
private System.Windows.Forms.Label label20;
private System.Windows.Forms.Label label21;
private System.Windows.Forms.Label label22;
private System.Windows.Forms.CheckBox chkPreserveFirst;
private System.Windows.Forms.CheckBox chkBestOrder;
private System.Windows.Forms.ComboBox cboRouteDirectionsLengthUnits;
private System.Windows.Forms.CheckBox chkReturnRoutes;
private System.Windows.Forms.CheckBox chkReturnRouteGeometries;
private System.Windows.Forms.CheckBox chkReturnStops;
private System.Windows.Forms.CheckBox chkReturnDirections;
private System.Windows.Forms.ComboBox cboRouteOutputLines;
private System.Windows.Forms.CheckBox chkUseTimeWindows;
private System.Windows.Forms.CheckBox chkPreserveLast;
private System.Windows.Forms.ComboBox cboRouteDirectionsTimeAttribute;
private System.Windows.Forms.GroupBox fraINARouteSolver;
private System.Windows.Forms.GroupBox fraINAServerRouteParams;
private System.Windows.Forms.TabControl tabCtrlOutput;
private System.Windows.Forms.TabPage tabReturnStopsFeatures;
private System.Windows.Forms.TabPage tabReturnBarrierFeatures;
private System.Windows.Forms.TabPage tabReturnDirections;
private System.Windows.Forms.TabPage tabReturnRouteFeatures;
private System.Windows.Forms.DataGrid dataGridRouteFeatures;
private System.Windows.Forms.DataGrid dataGridStopFeatures;
private System.Windows.Forms.DataGrid dataGridBarrierFeatures;
private System.Windows.Forms.TabPage tabReturnMap;
private System.Windows.Forms.TabPage tabReturnRouteGeometry;
private System.Windows.Forms.TreeView treeViewRouteGeometry;
private System.Windows.Forms.TreeView treeViewDirections;
private System.Windows.Forms.CheckBox checkReturnBarriers;
private System.Windows.Forms.CheckBox chkUseHierarchy;
private System.Windows.Forms.CheckBox chkUseStartTime;
private System.Windows.Forms.TextBox txtStartTime;
private System.Windows.Forms.GroupBox fraINAServerSolverParams;
private SanFrancisco_NAServer m_naServer;
#endregion
public Route_WebServiceClass()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.cmdSolve = new System.Windows.Forms.Button();
this.pictureBox = new System.Windows.Forms.PictureBox();
this.fraINASolverSettings = new System.Windows.Forms.GroupBox();
this.chkIgnoreInvalidLocations = new System.Windows.Forms.CheckBox();
this.cboUturnPolicy = new System.Windows.Forms.ComboBox();
this.label11 = new System.Windows.Forms.Label();
this.label7 = new System.Windows.Forms.Label();
this.chklstAccumulateAttributes = new System.Windows.Forms.CheckedListBox();
this.label5 = new System.Windows.Forms.Label();
this.chklstRestrictions = new System.Windows.Forms.CheckedListBox();
this.cboImpedance = new System.Windows.Forms.ComboBox();
this.label4 = new System.Windows.Forms.Label();
this.chkUseHierarchy = new System.Windows.Forms.CheckBox();
this.fraINAServerSolverParams = new System.Windows.Forms.GroupBox();
this.chkReturnMap = new System.Windows.Forms.CheckBox();
this.cboSnapToleranceUnits = new System.Windows.Forms.ComboBox();
this.cboNALayers = new System.Windows.Forms.ComboBox();
this.label10 = new System.Windows.Forms.Label();
this.label8 = new System.Windows.Forms.Label();
this.txtMaxSnapTolerance = new System.Windows.Forms.TextBox();
this.txtSnapTolerance = new System.Windows.Forms.TextBox();
this.label9 = new System.Windows.Forms.Label();
this.fraINARouteSolver = new System.Windows.Forms.GroupBox();
this.label20 = new System.Windows.Forms.Label();
this.cboRouteOutputLines = new System.Windows.Forms.ComboBox();
this.chkUseTimeWindows = new System.Windows.Forms.CheckBox();
this.chkPreserveLast = new System.Windows.Forms.CheckBox();
this.chkPreserveFirst = new System.Windows.Forms.CheckBox();
this.chkBestOrder = new System.Windows.Forms.CheckBox();
this.chkUseStartTime = new System.Windows.Forms.CheckBox();
this.txtStartTime = new System.Windows.Forms.TextBox();
this.fraINAServerRouteParams = new System.Windows.Forms.GroupBox();
this.checkReturnBarriers = new System.Windows.Forms.CheckBox();
this.cboRouteDirectionsTimeAttribute = new System.Windows.Forms.ComboBox();
this.label21 = new System.Windows.Forms.Label();
this.cboRouteDirectionsLengthUnits = new System.Windows.Forms.ComboBox();
this.label22 = new System.Windows.Forms.Label();
this.chkReturnRoutes = new System.Windows.Forms.CheckBox();
this.chkReturnRouteGeometries = new System.Windows.Forms.CheckBox();
this.chkReturnStops = new System.Windows.Forms.CheckBox();
this.chkReturnDirections = new System.Windows.Forms.CheckBox();
this.tabCtrlOutput = new System.Windows.Forms.TabControl();
this.tabReturnMap = new System.Windows.Forms.TabPage();
this.tabReturnRouteFeatures = new System.Windows.Forms.TabPage();
this.dataGridRouteFeatures = new System.Windows.Forms.DataGrid();
this.tabReturnBarrierFeatures = new System.Windows.Forms.TabPage();
this.dataGridBarrierFeatures = new System.Windows.Forms.DataGrid();
this.tabReturnStopsFeatures = new System.Windows.Forms.TabPage();
this.dataGridStopFeatures = new System.Windows.Forms.DataGrid();
this.tabReturnDirections = new System.Windows.Forms.TabPage();
this.treeViewDirections = new System.Windows.Forms.TreeView();
this.tabReturnRouteGeometry = new System.Windows.Forms.TabPage();
this.treeViewRouteGeometry = new System.Windows.Forms.TreeView();
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
this.fraINASolverSettings.SuspendLayout();
this.fraINAServerSolverParams.SuspendLayout();
this.fraINARouteSolver.SuspendLayout();
this.fraINAServerRouteParams.SuspendLayout();
this.tabCtrlOutput.SuspendLayout();
this.tabReturnMap.SuspendLayout();
this.tabReturnRouteFeatures.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.dataGridRouteFeatures)).BeginInit();
this.tabReturnBarrierFeatures.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.dataGridBarrierFeatures)).BeginInit();
this.tabReturnStopsFeatures.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.dataGridStopFeatures)).BeginInit();
this.tabReturnDirections.SuspendLayout();
this.tabReturnRouteGeometry.SuspendLayout();
this.SuspendLayout();
//
// cmdSolve
//
this.cmdSolve.Location = new System.Drawing.Point(232, 504);
this.cmdSolve.Name = "cmdSolve";
this.cmdSolve.Size = new System.Drawing.Size(200, 32);
this.cmdSolve.TabIndex = 29;
this.cmdSolve.Text = "Find Route";
this.cmdSolve.Click += new System.EventHandler(this.cmdSolve_Click);
//
// pictureBox
//
this.pictureBox.BackColor = System.Drawing.Color.White;
this.pictureBox.Location = new System.Drawing.Point(8, 8);
this.pictureBox.Name = "pictureBox";
this.pictureBox.Size = new System.Drawing.Size(448, 456);
this.pictureBox.TabIndex = 20;
this.pictureBox.TabStop = false;
//
// fraINASolverSettings
//
this.fraINASolverSettings.Controls.Add(this.chkIgnoreInvalidLocations);
this.fraINASolverSettings.Controls.Add(this.cboUturnPolicy);
this.fraINASolverSettings.Controls.Add(this.label11);
this.fraINASolverSettings.Controls.Add(this.label7);
this.fraINASolverSettings.Controls.Add(this.chklstAccumulateAttributes);
this.fraINASolverSettings.Controls.Add(this.label5);
this.fraINASolverSettings.Controls.Add(this.chklstRestrictions);
this.fraINASolverSettings.Controls.Add(this.cboImpedance);
this.fraINASolverSettings.Controls.Add(this.label4);
this.fraINASolverSettings.Controls.Add(this.chkUseHierarchy);
this.fraINASolverSettings.Enabled = false;
this.fraINASolverSettings.Location = new System.Drawing.Point(8, 112);
this.fraINASolverSettings.Name = "fraINASolverSettings";
this.fraINASolverSettings.Size = new System.Drawing.Size(424, 192);
this.fraINASolverSettings.TabIndex = 70;
this.fraINASolverSettings.TabStop = false;
this.fraINASolverSettings.Text = "INASolverSettings";
//
// chkIgnoreInvalidLocations
//
this.chkIgnoreInvalidLocations.Location = new System.Drawing.Point(11, 80);
this.chkIgnoreInvalidLocations.Name = "chkIgnoreInvalidLocations";
this.chkIgnoreInvalidLocations.Size = new System.Drawing.Size(144, 21);
this.chkIgnoreInvalidLocations.TabIndex = 10;
this.chkIgnoreInvalidLocations.Text = "Ignore Invalid Locations";
//
// cboUturnPolicy
//
this.cboUturnPolicy.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cboUturnPolicy.Location = new System.Drawing.Point(128, 48);
this.cboUturnPolicy.Name = "cboUturnPolicy";
this.cboUturnPolicy.Size = new System.Drawing.Size(280, 21);
this.cboUturnPolicy.TabIndex = 9;
//
// label11
//
this.label11.Location = new System.Drawing.Point(11, 56);
this.label11.Name = "label11";
this.label11.Size = new System.Drawing.Size(88, 16);
this.label11.TabIndex = 73;
this.label11.Text = "Allow U-Turns";
//
// label7
//
this.label7.Location = new System.Drawing.Point(216, 104);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(120, 16);
this.label7.TabIndex = 72;
this.label7.Text = "Accumulate Attributes";
//
// chklstAccumulateAttributes
//
this.chklstAccumulateAttributes.CheckOnClick = true;
this.chklstAccumulateAttributes.Location = new System.Drawing.Point(216, 120);
this.chklstAccumulateAttributes.Name = "chklstAccumulateAttributes";
this.chklstAccumulateAttributes.ScrollAlwaysVisible = true;
this.chklstAccumulateAttributes.Size = new System.Drawing.Size(192, 64);
this.chklstAccumulateAttributes.TabIndex = 13;
//
// label5
//
this.label5.Location = new System.Drawing.Point(11, 104);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(72, 16);
this.label5.TabIndex = 70;
this.label5.Text = "Restrictions";
//
// chklstRestrictions
//
this.chklstRestrictions.CheckOnClick = true;
this.chklstRestrictions.Location = new System.Drawing.Point(11, 120);
this.chklstRestrictions.Name = "chklstRestrictions";
this.chklstRestrictions.ScrollAlwaysVisible = true;
this.chklstRestrictions.Size = new System.Drawing.Size(192, 64);
this.chklstRestrictions.TabIndex = 12;
//
// cboImpedance
//
this.cboImpedance.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cboImpedance.Location = new System.Drawing.Point(128, 24);
this.cboImpedance.Name = "cboImpedance";
this.cboImpedance.Size = new System.Drawing.Size(280, 21);
this.cboImpedance.TabIndex = 8;
//
// label4
//
this.label4.Location = new System.Drawing.Point(11, 24);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(64, 16);
this.label4.TabIndex = 67;
this.label4.Text = "Impedance";
//
// chkUseHierarchy
//
this.chkUseHierarchy.Checked = true;
this.chkUseHierarchy.CheckState = System.Windows.Forms.CheckState.Checked;
this.chkUseHierarchy.Location = new System.Drawing.Point(216, 80);
this.chkUseHierarchy.Name = "chkUseHierarchy";
this.chkUseHierarchy.Size = new System.Drawing.Size(96, 21);
this.chkUseHierarchy.TabIndex = 11;
this.chkUseHierarchy.Text = "Use Hierarchy";
//
// fraINAServerSolverParams
//
this.fraINAServerSolverParams.Controls.Add(this.chkReturnMap);
this.fraINAServerSolverParams.Controls.Add(this.cboSnapToleranceUnits);
this.fraINAServerSolverParams.Controls.Add(this.cboNALayers);
this.fraINAServerSolverParams.Controls.Add(this.label10);
this.fraINAServerSolverParams.Controls.Add(this.label8);
this.fraINAServerSolverParams.Controls.Add(this.txtMaxSnapTolerance);
this.fraINAServerSolverParams.Controls.Add(this.txtSnapTolerance);
this.fraINAServerSolverParams.Controls.Add(this.label9);
this.fraINAServerSolverParams.Enabled = false;
this.fraINAServerSolverParams.Location = new System.Drawing.Point(8, 8);
this.fraINAServerSolverParams.Name = "fraINAServerSolverParams";
this.fraINAServerSolverParams.Size = new System.Drawing.Size(424, 96);
this.fraINAServerSolverParams.TabIndex = 71;
this.fraINAServerSolverParams.TabStop = false;
this.fraINAServerSolverParams.Text = "INAServerSolverParams";
//
// chkReturnMap
//
this.chkReturnMap.Checked = true;
this.chkReturnMap.CheckState = System.Windows.Forms.CheckState.Checked;
this.chkReturnMap.Location = new System.Drawing.Point(8, 72);
this.chkReturnMap.Name = "chkReturnMap";
this.chkReturnMap.Size = new System.Drawing.Size(96, 16);
this.chkReturnMap.TabIndex = 7;
this.chkReturnMap.Text = "Return Map";
//
// cboSnapToleranceUnits
//
this.cboSnapToleranceUnits.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cboSnapToleranceUnits.Location = new System.Drawing.Point(240, 48);
this.cboSnapToleranceUnits.Name = "cboSnapToleranceUnits";
this.cboSnapToleranceUnits.Size = new System.Drawing.Size(168, 21);
this.cboSnapToleranceUnits.TabIndex = 6;
//
// cboNALayers
//
this.cboNALayers.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cboNALayers.Location = new System.Drawing.Point(128, 24);
this.cboNALayers.Name = "cboNALayers";
this.cboNALayers.Size = new System.Drawing.Size(280, 21);
this.cboNALayers.TabIndex = 3;
this.cboNALayers.SelectedIndexChanged += new System.EventHandler(this.cboNALayers_SelectedIndexChanged);
//
// label10
//
this.label10.Location = new System.Drawing.Point(168, 56);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(16, 16);
this.label10.TabIndex = 72;
this.label10.Text = "to";
//
// label8
//
this.label8.Location = new System.Drawing.Point(8, 24);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(128, 16);
this.label8.TabIndex = 71;
this.label8.Text = "NALayer Name";
//
// txtMaxSnapTolerance
//
this.txtMaxSnapTolerance.Location = new System.Drawing.Point(192, 48);
this.txtMaxSnapTolerance.Name = "txtMaxSnapTolerance";
this.txtMaxSnapTolerance.Size = new System.Drawing.Size(40, 20);
this.txtMaxSnapTolerance.TabIndex = 5;
this.txtMaxSnapTolerance.Text = "50";
//
// txtSnapTolerance
//
this.txtSnapTolerance.Location = new System.Drawing.Point(128, 48);
this.txtSnapTolerance.Name = "txtSnapTolerance";
this.txtSnapTolerance.Size = new System.Drawing.Size(32, 20);
this.txtSnapTolerance.TabIndex = 4;
this.txtSnapTolerance.Text = "2";
//
// label9
//
this.label9.Location = new System.Drawing.Point(8, 48);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(104, 16);
this.label9.TabIndex = 68;
this.label9.Text = "Search Tolerance";
//
// fraINARouteSolver
//
this.fraINARouteSolver.Controls.Add(this.label20);
this.fraINARouteSolver.Controls.Add(this.cboRouteOutputLines);
this.fraINARouteSolver.Controls.Add(this.chkUseTimeWindows);
this.fraINARouteSolver.Controls.Add(this.chkPreserveLast);
this.fraINARouteSolver.Controls.Add(this.chkPreserveFirst);
this.fraINARouteSolver.Controls.Add(this.chkBestOrder);
this.fraINARouteSolver.Controls.Add(this.chkUseStartTime);
this.fraINARouteSolver.Controls.Add(this.txtStartTime);
this.fraINARouteSolver.Enabled = false;
this.fraINARouteSolver.Location = new System.Drawing.Point(232, 312);
this.fraINARouteSolver.Name = "fraINARouteSolver";
this.fraINARouteSolver.Size = new System.Drawing.Size(200, 184);
this.fraINARouteSolver.TabIndex = 76;
this.fraINARouteSolver.TabStop = false;
this.fraINARouteSolver.Text = "INARouteSolver";
//
// label20
//
this.label20.Location = new System.Drawing.Point(8, 136);
this.label20.Name = "label20";
this.label20.Size = new System.Drawing.Size(40, 16);
this.label20.TabIndex = 53;
this.label20.Text = "Shape";
//
// cboRouteOutputLines
//
this.cboRouteOutputLines.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cboRouteOutputLines.ItemHeight = 13;
this.cboRouteOutputLines.Location = new System.Drawing.Point(8, 152);
this.cboRouteOutputLines.Name = "cboRouteOutputLines";
this.cboRouteOutputLines.Size = new System.Drawing.Size(184, 21);
this.cboRouteOutputLines.TabIndex = 28;
//
// chkUseTimeWindows
//
this.chkUseTimeWindows.Location = new System.Drawing.Point(8, 80);
this.chkUseTimeWindows.Name = "chkUseTimeWindows";
this.chkUseTimeWindows.Size = new System.Drawing.Size(128, 16);
this.chkUseTimeWindows.TabIndex = 25;
this.chkUseTimeWindows.Text = "Use Time Windows";
//
// chkPreserveLast
//
this.chkPreserveLast.Location = new System.Drawing.Point(24, 56);
this.chkPreserveLast.Name = "chkPreserveLast";
this.chkPreserveLast.Size = new System.Drawing.Size(96, 16);
this.chkPreserveLast.TabIndex = 24;
this.chkPreserveLast.Text = "PreserveLast";
//
// chkPreserveFirst
//
this.chkPreserveFirst.Location = new System.Drawing.Point(24, 40);
this.chkPreserveFirst.Name = "chkPreserveFirst";
this.chkPreserveFirst.Size = new System.Drawing.Size(104, 16);
this.chkPreserveFirst.TabIndex = 23;
this.chkPreserveFirst.Text = "Preserve First";
//
// chkBestOrder
//
this.chkBestOrder.Location = new System.Drawing.Point(8, 24);
this.chkBestOrder.Name = "chkBestOrder";
this.chkBestOrder.Size = new System.Drawing.Size(112, 16);
this.chkBestOrder.TabIndex = 22;
this.chkBestOrder.Text = "Find Best Order";
this.chkBestOrder.CheckedChanged += new System.EventHandler(this.chkBestOrder_CheckedChanged);
//
// chkUseStartTime
//
this.chkUseStartTime.Location = new System.Drawing.Point(8, 96);
this.chkUseStartTime.Name = "chkUseStartTime";
this.chkUseStartTime.Size = new System.Drawing.Size(104, 16);
this.chkUseStartTime.TabIndex = 26;
this.chkUseStartTime.Text = "Use Start Time";
this.chkUseStartTime.CheckedChanged += new System.EventHandler(this.chkUseStartTime_CheckedChanged);
//
// txtStartTime
//
this.txtStartTime.Enabled = false;
this.txtStartTime.Location = new System.Drawing.Point(24, 112);
this.txtStartTime.Name = "txtStartTime";
this.txtStartTime.Size = new System.Drawing.Size(168, 20);
this.txtStartTime.TabIndex = 27;
//
// fraINAServerRouteParams
//
this.fraINAServerRouteParams.Controls.Add(this.checkReturnBarriers);
this.fraINAServerRouteParams.Controls.Add(this.cboRouteDirectionsTimeAttribute);
this.fraINAServerRouteParams.Controls.Add(this.label21);
this.fraINAServerRouteParams.Controls.Add(this.cboRouteDirectionsLengthUnits);
this.fraINAServerRouteParams.Controls.Add(this.label22);
this.fraINAServerRouteParams.Controls.Add(this.chkReturnRoutes);
this.fraINAServerRouteParams.Controls.Add(this.chkReturnRouteGeometries);
this.fraINAServerRouteParams.Controls.Add(this.chkReturnStops);
this.fraINAServerRouteParams.Controls.Add(this.chkReturnDirections);
this.fraINAServerRouteParams.Enabled = false;
this.fraINAServerRouteParams.Location = new System.Drawing.Point(8, 312);
this.fraINAServerRouteParams.Name = "fraINAServerRouteParams";
this.fraINAServerRouteParams.Size = new System.Drawing.Size(216, 184);
this.fraINAServerRouteParams.TabIndex = 75;
this.fraINAServerRouteParams.TabStop = false;
this.fraINAServerRouteParams.Text = "INAServerRouteParams";
//
// checkReturnBarriers
//
this.checkReturnBarriers.Checked = true;
this.checkReturnBarriers.CheckState = System.Windows.Forms.CheckState.Checked;
this.checkReturnBarriers.Location = new System.Drawing.Point(8, 56);
this.checkReturnBarriers.Name = "checkReturnBarriers";
this.checkReturnBarriers.Size = new System.Drawing.Size(136, 16);
this.checkReturnBarriers.TabIndex = 17;
this.checkReturnBarriers.Text = "Returns Barriers";
//
// cboRouteDirectionsTimeAttribute
//
this.cboRouteDirectionsTimeAttribute.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cboRouteDirectionsTimeAttribute.ItemHeight = 13;
this.cboRouteDirectionsTimeAttribute.Location = new System.Drawing.Point(56, 144);
this.cboRouteDirectionsTimeAttribute.Name = "cboRouteDirectionsTimeAttribute";
this.cboRouteDirectionsTimeAttribute.Size = new System.Drawing.Size(152, 21);
this.cboRouteDirectionsTimeAttribute.TabIndex = 21;
//
// label21
//
this.label21.Location = new System.Drawing.Point(8, 152);
this.label21.Name = "label21";
this.label21.Size = new System.Drawing.Size(48, 16);
this.label21.TabIndex = 52;
this.label21.Text = "Dir Time";
//
// cboRouteDirectionsLengthUnits
//
this.cboRouteDirectionsLengthUnits.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cboRouteDirectionsLengthUnits.ItemHeight = 13;
this.cboRouteDirectionsLengthUnits.Location = new System.Drawing.Point(56, 120);
this.cboRouteDirectionsLengthUnits.Name = "cboRouteDirectionsLengthUnits";
this.cboRouteDirectionsLengthUnits.Size = new System.Drawing.Size(152, 21);
this.cboRouteDirectionsLengthUnits.TabIndex = 20;
//
// label22
//
this.label22.Location = new System.Drawing.Point(8, 128);
this.label22.Name = "label22";
this.label22.Size = new System.Drawing.Size(56, 16);
this.label22.TabIndex = 50;
this.label22.Text = "Dir Units";
//
// chkReturnRoutes
//
this.chkReturnRoutes.Checked = true;
this.chkReturnRoutes.CheckState = System.Windows.Forms.CheckState.Checked;
this.chkReturnRoutes.Location = new System.Drawing.Point(8, 40);
this.chkReturnRoutes.Name = "chkReturnRoutes";
this.chkReturnRoutes.Size = new System.Drawing.Size(96, 16);
this.chkReturnRoutes.TabIndex = 16;
this.chkReturnRoutes.Text = "Return Routes";
//
// chkReturnRouteGeometries
//
this.chkReturnRouteGeometries.Checked = true;
this.chkReturnRouteGeometries.CheckState = System.Windows.Forms.CheckState.Checked;
this.chkReturnRouteGeometries.Location = new System.Drawing.Point(8, 24);
this.chkReturnRouteGeometries.Name = "chkReturnRouteGeometries";
this.chkReturnRouteGeometries.Size = new System.Drawing.Size(152, 16);
this.chkReturnRouteGeometries.TabIndex = 15;
this.chkReturnRouteGeometries.Text = "Return Route Geometries";
//
// chkReturnStops
//
this.chkReturnStops.Checked = true;
this.chkReturnStops.CheckState = System.Windows.Forms.CheckState.Checked;
this.chkReturnStops.Location = new System.Drawing.Point(8, 72);
this.chkReturnStops.Name = "chkReturnStops";
this.chkReturnStops.Size = new System.Drawing.Size(96, 16);
this.chkReturnStops.TabIndex = 18;
this.chkReturnStops.Text = "Return Stops";
//
// chkReturnDirections
//
this.chkReturnDirections.Checked = true;
this.chkReturnDirections.CheckState = System.Windows.Forms.CheckState.Checked;
this.chkReturnDirections.Location = new System.Drawing.Point(8, 88);
this.chkReturnDirections.Name = "chkReturnDirections";
this.chkReturnDirections.Size = new System.Drawing.Size(160, 16);
this.chkReturnDirections.TabIndex = 19;
this.chkReturnDirections.Text = "Generate Directions";
//
// tabCtrlOutput
//
this.tabCtrlOutput.Controls.Add(this.tabReturnMap);
this.tabCtrlOutput.Controls.Add(this.tabReturnRouteFeatures);
this.tabCtrlOutput.Controls.Add(this.tabReturnBarrierFeatures);
this.tabCtrlOutput.Controls.Add(this.tabReturnStopsFeatures);
this.tabCtrlOutput.Controls.Add(this.tabReturnDirections);
this.tabCtrlOutput.Controls.Add(this.tabReturnRouteGeometry);
this.tabCtrlOutput.Enabled = false;
this.tabCtrlOutput.Location = new System.Drawing.Point(440, 16);
this.tabCtrlOutput.Name = "tabCtrlOutput";
this.tabCtrlOutput.SelectedIndex = 0;
this.tabCtrlOutput.Size = new System.Drawing.Size(472, 496);
this.tabCtrlOutput.TabIndex = 30;
//
// tabReturnMap
//
this.tabReturnMap.Controls.Add(this.pictureBox);
this.tabReturnMap.Location = new System.Drawing.Point(4, 22);
this.tabReturnMap.Name = "tabReturnMap";
this.tabReturnMap.Size = new System.Drawing.Size(464, 470);
this.tabReturnMap.TabIndex = 0;
this.tabReturnMap.Text = "Map";
//
// tabReturnRouteFeatures
//
this.tabReturnRouteFeatures.Controls.Add(this.dataGridRouteFeatures);
this.tabReturnRouteFeatures.Location = new System.Drawing.Point(4, 22);
this.tabReturnRouteFeatures.Name = "tabReturnRouteFeatures";
this.tabReturnRouteFeatures.Size = new System.Drawing.Size(464, 470);
this.tabReturnRouteFeatures.TabIndex = 4;
this.tabReturnRouteFeatures.Text = "Route Features";
//
// dataGridRouteFeatures
//
this.dataGridRouteFeatures.DataMember = "";
this.dataGridRouteFeatures.HeaderForeColor = System.Drawing.SystemColors.ControlText;
this.dataGridRouteFeatures.Location = new System.Drawing.Point(8, 8);
this.dataGridRouteFeatures.Name = "dataGridRouteFeatures";
this.dataGridRouteFeatures.Size = new System.Drawing.Size(448, 456);
this.dataGridRouteFeatures.TabIndex = 0;
//
// tabReturnBarrierFeatures
//
this.tabReturnBarrierFeatures.Controls.Add(this.dataGridBarrierFeatures);
this.tabReturnBarrierFeatures.Location = new System.Drawing.Point(4, 22);
this.tabReturnBarrierFeatures.Name = "tabReturnBarrierFeatures";
this.tabReturnBarrierFeatures.Size = new System.Drawing.Size(464, 470);
this.tabReturnBarrierFeatures.TabIndex = 3;
this.tabReturnBarrierFeatures.Text = "Barrier Features";
//
// dataGridBarrierFeatures
//
this.dataGridBarrierFeatures.DataMember = "";
this.dataGridBarrierFeatures.HeaderForeColor = System.Drawing.SystemColors.ControlText;
this.dataGridBarrierFeatures.Location = new System.Drawing.Point(8, 8);
this.dataGridBarrierFeatures.Name = "dataGridBarrierFeatures";
this.dataGridBarrierFeatures.Size = new System.Drawing.Size(448, 456);
this.dataGridBarrierFeatures.TabIndex = 0;
//
// tabReturnStopsFeatures
//
this.tabReturnStopsFeatures.Controls.Add(this.dataGridStopFeatures);
this.tabReturnStopsFeatures.Location = new System.Drawing.Point(4, 22);
this.tabReturnStopsFeatures.Name = "tabReturnStopsFeatures";
this.tabReturnStopsFeatures.Size = new System.Drawing.Size(464, 470);
this.tabReturnStopsFeatures.TabIndex = 2;
this.tabReturnStopsFeatures.Text = "Stop Features";
//
// dataGridStopFeatures
//
this.dataGridStopFeatures.DataMember = "";
this.dataGridStopFeatures.HeaderForeColor = System.Drawing.SystemColors.ControlText;
this.dataGridStopFeatures.Location = new System.Drawing.Point(8, 8);
this.dataGridStopFeatures.Name = "dataGridStopFeatures";
this.dataGridStopFeatures.Size = new System.Drawing.Size(448, 456);
this.dataGridStopFeatures.TabIndex = 0;
//
// tabReturnDirections
//
this.tabReturnDirections.Controls.Add(this.treeViewDirections);
this.tabReturnDirections.Location = new System.Drawing.Point(4, 22);
this.tabReturnDirections.Name = "tabReturnDirections";
this.tabReturnDirections.Size = new System.Drawing.Size(464, 470);
this.tabReturnDirections.TabIndex = 1;
this.tabReturnDirections.Text = "Directions";
//
// treeViewDirections
//
this.treeViewDirections.Location = new System.Drawing.Point(8, 8);
this.treeViewDirections.Name = "treeViewDirections";
this.treeViewDirections.Size = new System.Drawing.Size(448, 456);
this.treeViewDirections.TabIndex = 69;
//
// tabReturnRouteGeometry
//
this.tabReturnRouteGeometry.Controls.Add(this.treeViewRouteGeometry);
this.tabReturnRouteGeometry.Location = new System.Drawing.Point(4, 22);
this.tabReturnRouteGeometry.Name = "tabReturnRouteGeometry";
this.tabReturnRouteGeometry.Size = new System.Drawing.Size(464, 470);
this.tabReturnRouteGeometry.TabIndex = 5;
this.tabReturnRouteGeometry.Text = "Route Geometry";
//
// treeViewRouteGeometry
//
this.treeViewRouteGeometry.Location = new System.Drawing.Point(8, 8);
this.treeViewRouteGeometry.Name = "treeViewRouteGeometry";
this.treeViewRouteGeometry.Size = new System.Drawing.Size(448, 456);
this.treeViewRouteGeometry.TabIndex = 1;
//
// Route_WebServiceClass
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(936, 550);
this.Controls.Add(this.tabCtrlOutput);
this.Controls.Add(this.fraINARouteSolver);
this.Controls.Add(this.fraINAServerRouteParams);
this.Controls.Add(this.fraINAServerSolverParams);
this.Controls.Add(this.fraINASolverSettings);
this.Controls.Add(this.cmdSolve);
this.Name = "Route_WebServiceClass";
this.Text = "NAServer - Route Web Service";
this.Load += new System.EventHandler(this.Form1_Load);
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
this.fraINASolverSettings.ResumeLayout(false);
this.fraINAServerSolverParams.ResumeLayout(false);
this.fraINAServerSolverParams.PerformLayout();
this.fraINARouteSolver.ResumeLayout(false);
this.fraINARouteSolver.PerformLayout();
this.fraINAServerRouteParams.ResumeLayout(false);
this.tabCtrlOutput.ResumeLayout(false);
this.tabReturnMap.ResumeLayout(false);
this.tabReturnRouteFeatures.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.dataGridRouteFeatures)).EndInit();
this.tabReturnBarrierFeatures.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.dataGridBarrierFeatures)).EndInit();
this.tabReturnStopsFeatures.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.dataGridStopFeatures)).EndInit();
this.tabReturnDirections.ResumeLayout(false);
this.tabReturnRouteGeometry.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Route_WebServiceClass());
}
/// <summary>
/// This function
/// - sets the server and solver parameters
/// - populates the stops NALocations
/// - gets and displays the server results (map, directions, etc.)
/// </summary>
private void cmdSolve_Click(object sender, System.EventArgs e)
{
this.Cursor = Cursors.WaitCursor;
try
{
// Get SolverParams
NAServerSolverParams solverParams = m_naServer.GetSolverParameters(cboNALayers.Text) as NAServerSolverParams;
// Set Solver params
SetNASolverSettings(solverParams);
SetSolverSpecificInterface(solverParams);
SetServerSolverParams(solverParams);
// Load Locations
LoadLocations(solverParams);
//Solve the Route
NAServerSolverResults solverResults;
solverResults = m_naServer.Solve(solverParams);
//Get NAServer results in the tab controls
OutputResults(solverParams, solverResults);
}
catch (Exception exception)
{
MessageBox.Show(exception.Message, "An error has occurred");
}
this.Cursor = Cursors.Default;
}
/// <summary>
/// This function
/// - gets all route network analysis layers
/// - selects the first route network analysis layer
/// - sets all controls for this route network analysis layer
/// </summary>
private void GetNetworkAnalysisLayers()
{
this.Cursor = Cursors.WaitCursor;
try
{
// Enable Frame
fraINAServerSolverParams.Enabled = true;
//Get Route NA layer names
cboNALayers.Items.Clear();
string[] naLayers = m_naServer.GetNALayerNames(esriNAServerLayerType.esriNAServerRouteLayer);
for (int i = 0; i < naLayers.Length; i++)
{
cboNALayers.Items.Add(naLayers[i]);
}
// Select the first NA Layer name
if (cboNALayers.Items.Count > 0)
cboNALayers.SelectedIndex = 0;
else
MessageBox.Show("There is no Network Analyst layer associated with this MapServer object!", "NAServer - Route Sample", System.Windows.Forms.MessageBoxButtons.OK);
}
catch (Exception exception)
{
MessageBox.Show(exception.Message, "An error has occurred");
}
this.Cursor = Cursors.Default;
}
/// <summary>
/// This function sets all controls for the selected route network analysis layer
/// </summary>
private void cboNALayers_SelectedIndexChanged(object sender, System.EventArgs e)
{
string naLayerName = cboNALayers.Text;
// Enable Solve Button
cmdSolve.Enabled = (naLayerName.Length == 0);
if (naLayerName.Length == 0)
return;
this.Cursor = Cursors.WaitCursor;
try
{
NAServerSolverParams solverParams = m_naServer.GetSolverParameters(naLayerName);
NAServerNetworkDescription networkDescription = m_naServer.GetNetworkDescription(naLayerName);
// Setup Default Properties
GetNASolverSettings(networkDescription, solverParams);
GetSolverSpecificInterface(solverParams);
GetServerSolverParams(networkDescription, solverParams);
// Make frames Enable
MakeFramesEnabled(solverParams);
// Hide Tabs
HideTabs();
cmdSolve.Enabled = true;
}
catch (Exception exception)
{
MessageBox.Show(exception.Message, "An error has occurred");
}
this.Cursor = Cursors.Default;
}
/// <summary>
/// Get Default NASolverSettings controls (Cost Attributes, Restrictions Attributes. etc.)
/// </summary>
private void GetNASolverSettings(NAServerNetworkDescription networkDescription, NAServerSolverParams solverSettings)
{
int ImpedanceIndex = 0;
//Get Attributes
cboImpedance.Items.Clear();
chklstAccumulateAttributes.Items.Clear();
chklstRestrictions.Items.Clear();
cboUturnPolicy.SelectedIndex = -1;
NAServerNetworkAttribute[] attributes = networkDescription.NetworkAttributes;
string[] accumulateAttributeNames = solverSettings.AccumulateAttributeNames;
string[] restrictionAttributeNames = solverSettings.RestrictionAttributeNames;
for (int i = 0; i < attributes.Length; i++)
{
NAServerNetworkAttribute networkAttribute = attributes[i];
string networkAttributeName = networkAttribute.Name;
if (networkAttribute.UsageType == esriNetworkAttributeUsageType.esriNAUTCost)
{
chklstAccumulateAttributes.Items.Add(networkAttributeName, IsStringInStringArray(networkAttributeName, accumulateAttributeNames));
int index = cboImpedance.Items.Add(networkAttributeName + " (" + networkAttribute.Units.ToString().Substring(7) + ")");
if (networkAttributeName == solverSettings.ImpedanceAttributeName)
ImpedanceIndex = index;
}
if (networkAttribute.UsageType == esriNetworkAttributeUsageType.esriNAUTRestriction)
{
chklstRestrictions.Items.Add(networkAttributeName, IsStringInStringArray(networkAttributeName, restrictionAttributeNames));
}
}
if (cboImpedance.Items.Count > 0)
cboImpedance.SelectedIndex = ImpedanceIndex;
chkUseHierarchy.Checked = solverSettings.UseHierarchy;
chkUseHierarchy.Enabled = solverSettings.HierarchyAttributeName.Length > 0;
chkIgnoreInvalidLocations.Checked = solverSettings.IgnoreInvalidLocations;
cboUturnPolicy.SelectedIndex = System.Convert.ToInt32(solverSettings.RestrictUTurns);
}
private bool IsStringInStringArray(string inputString, string[] stringArray)
{
int numInArray = stringArray.Length;
for (int i = 0; i < numInArray; i++)
{
if (inputString.Equals(stringArray[i]))
return true;
}
return false;
}
/// <summary>
/// Set Default route solver controls (BestOrder, UseTimeWindows, UseStartTime, etc.)
/// </summary>
private void GetSolverSpecificInterface(NAServerSolverParams solverParams)
{
NAServerRouteParams routeSolver = solverParams as NAServerRouteParams;
if (routeSolver != null)
{
chkBestOrder.Checked = routeSolver.FindBestSequence;
chkPreserveFirst.Checked = routeSolver.PreserveFirstStop;
chkPreserveLast.Checked = routeSolver.PreserveLastStop;
if (chkBestOrder.Checked == true)
{
this.chkPreserveFirst.Enabled = true;
this.chkPreserveLast.Enabled = true;
}
else
{
this.chkPreserveFirst.Enabled = false;
this.chkPreserveLast.Enabled = false;
}
chkUseTimeWindows.Checked = routeSolver.UseTimeWindows;
chkUseStartTime.Checked = routeSolver.UseStartTime;
if (chkUseStartTime.Checked)
{
txtStartTime.Enabled = true;
txtStartTime.Text = routeSolver.StartTime.ToString();
}
else
{
txtStartTime.Enabled = false;
txtStartTime.Text = System.DateTime.Now.ToString();
}
cboRouteOutputLines.SelectedIndex = System.Convert.ToInt32(routeSolver.OutputLines);
}
}
/// <summary>
/// Get ServerSolverParams controls (ReturnMap, SnapTolerance, etc.)
/// </summary>
private void GetServerSolverParams(NAServerNetworkDescription networkDescription, NAServerSolverParams solverParams)
{
chkReturnMap.Checked = true;
txtSnapTolerance.Text = solverParams.SnapTolerance.ToString();
txtMaxSnapTolerance.Text = solverParams.MaxSnapTolerance.ToString();
cboSnapToleranceUnits.SelectedIndex = Convert.ToInt32(solverParams.SnapToleranceUnits);
//Set Route Defaults
chkReturnRouteGeometries.Checked = false;
chkReturnRoutes.Checked = true;
chkReturnStops.Checked = true;
chkReturnDirections.Checked = true;
checkReturnBarriers.Checked = true;
//Set Directions Defaults
cboRouteDirectionsTimeAttribute.Items.Clear();
NAServerNetworkAttribute[] attributes = networkDescription.NetworkAttributes;
for (int i = 0; i < attributes.Length; i++)
{
NAServerNetworkAttribute networkAttribute = attributes[i];
if (networkAttribute.UsageType == esriNetworkAttributeUsageType.esriNAUTCost)
{
if (String.Compare(networkAttribute.Units.ToString(), "esriNAUMinutes") == 0)
{
cboRouteDirectionsTimeAttribute.Items.Add(networkAttribute.Name);
}
}
}
// Set the default direction settings
NAServerRouteParams routeParams = solverParams as NAServerRouteParams;
if (routeParams != null)
{
cboRouteDirectionsLengthUnits.Text = routeParams.DirectionsLengthUnits.ToString().Substring(7);
//Select the first time attribute
if (cboRouteDirectionsTimeAttribute.Items.Count > 0)
cboRouteDirectionsTimeAttribute.Text = routeParams.DirectionsTimeAttributeName;
}
}
/// <summary>
/// Set general solver settings (Impedance, Restrictions, Accumulates, etc.)
/// </summary>
private void SetNASolverSettings(NAServerSolverParams solverSettings)
{
solverSettings.ImpedanceAttributeName = ExtractImpedanceName(cboImpedance.Text);
string[] restrictionAttributes = new string[chklstRestrictions.CheckedItems.Count];
for (int i = 0; i < chklstRestrictions.CheckedItems.Count; i++)
restrictionAttributes[i] = chklstRestrictions.Items[chklstRestrictions.CheckedIndices[i]].ToString();
solverSettings.RestrictionAttributeNames = restrictionAttributes;
string[] accumulateAttributes = new string[chklstAccumulateAttributes.CheckedItems.Count];
for (int i = 0; i < chklstAccumulateAttributes.CheckedItems.Count; i++)
accumulateAttributes[i] = chklstAccumulateAttributes.Items[chklstAccumulateAttributes.CheckedIndices[i]].ToString();
solverSettings.AccumulateAttributeNames = accumulateAttributes;
solverSettings.RestrictUTurns = (esriNetworkForwardStarBacktrack)cboUturnPolicy.SelectedIndex;
solverSettings.IgnoreInvalidLocations = chkIgnoreInvalidLocations.Checked;
solverSettings.UseHierarchy = chkUseHierarchy.Checked;
}
/// <summary>
/// Set specific solver settings (FindBestSequence, UseTimeWindows, etc.)
/// </summary>
private void SetSolverSpecificInterface(NAServerSolverParams solverParams)
{
NAServerRouteParams routeSolver = solverParams as NAServerRouteParams;
if (routeSolver != null)
{
routeSolver.FindBestSequence = chkBestOrder.Checked;
routeSolver.PreserveFirstStop = chkPreserveFirst.Checked;
routeSolver.PreserveLastStop = chkPreserveLast.Checked;
routeSolver.UseTimeWindows = chkUseTimeWindows.Checked;
routeSolver.OutputLines = (esriNAOutputLineType)cboRouteOutputLines.SelectedIndex;
routeSolver.UseStartTime = chkUseStartTime.Checked;
if (routeSolver.UseStartTime == true)
routeSolver.StartTime = System.Convert.ToDateTime(txtStartTime.Text.ToString());
}
}
/// <summary>
/// Set server solver parameters (ReturnMap, SnapTolerance, etc.)
/// </summary>
private void SetServerSolverParams(NAServerSolverParams solverParams)
{
solverParams.ReturnMap = chkReturnMap.Checked;
solverParams.SnapTolerance = Convert.ToDouble(txtSnapTolerance.Text);
solverParams.MaxSnapTolerance = Convert.ToDouble(txtMaxSnapTolerance.Text);
solverParams.SnapToleranceUnits = (esriUnits)cboSnapToleranceUnits.SelectedIndex;
solverParams.ImageDescription.ImageDisplay.ImageWidth = pictureBox.Width;
solverParams.ImageDescription.ImageDisplay.ImageHeight = pictureBox.Height;
// // This code shows how to specify the output spatial reference in order to get the map
// // in a different spatial reference than the Network Dataset
// ESRISpatialReferenceGEN sr = pServerContext.CreateObject("esriGeometry.GeographicCoordinateSystem") as IESRISpatialReferenceGEN;
// int read;
// sr.ImportFromESRISpatialReference("GEOGCS[GCS_North_American_1983,DATUM[D_North_American_1983,SPHEROID[GRS_1980,6378137.0,298.257222101]],PRIMEM[Greenwich,0.0],UNIT[Degree,0.0174532925199433]]", out read);
// solverParams.OutputSpatialReference = sr as SpatialReference;
NAServerRouteParams routeParams = solverParams as NAServerRouteParams;
if (routeParams != null)
{
routeParams.ReturnRouteGeometries = chkReturnRouteGeometries.Checked;
routeParams.ReturnRoutes = chkReturnRoutes.Checked;
routeParams.ReturnStops = chkReturnStops.Checked;
routeParams.ReturnBarriers = checkReturnBarriers.Checked;
routeParams.ReturnDirections = chkReturnDirections.Checked;
routeParams.DirectionsLengthUnits = GetstringToesriUnits(cboRouteDirectionsLengthUnits.Text);
routeParams.DirectionsTimeAttributeName = cboRouteDirectionsTimeAttribute.Text;
}
}
/// <summary>
/// Make frames Enabled
/// </summary>
private void MakeFramesEnabled(NAServerSolverParams solverParams)
{
fraINARouteSolver.Enabled = ((solverParams as NAServerRouteParams) != null);
fraINAServerRouteParams.Enabled = ((solverParams as NAServerRouteParams) != null);
fraINASolverSettings.Enabled = ((solverParams as NAServerRouteParams) != null);
}
/// <summary>
/// Load form
/// </summary>
private void Form1_Load(object sender, System.EventArgs e)
{
try
{
cboUturnPolicy.Items.Add("Nowhere");
cboUturnPolicy.Items.Add("Everywhere");
cboUturnPolicy.Items.Add("Only at Dead Ends");
cboSnapToleranceUnits.Items.Add("Unknown Units");
cboSnapToleranceUnits.Items.Add("Inches");
cboSnapToleranceUnits.Items.Add("Points");
cboSnapToleranceUnits.Items.Add("Feet");
cboSnapToleranceUnits.Items.Add("Yards");
cboSnapToleranceUnits.Items.Add("Miles");
cboSnapToleranceUnits.Items.Add("Nautical Miles");
cboSnapToleranceUnits.Items.Add("Millimeters");
cboSnapToleranceUnits.Items.Add("Centimeters");
cboSnapToleranceUnits.Items.Add("Meters");
cboSnapToleranceUnits.Items.Add("Kilometers");
cboSnapToleranceUnits.Items.Add("DecimalDegrees");
cboSnapToleranceUnits.Items.Add("Decimeters");
// Route
cboRouteOutputLines.Items.Add("None");
cboRouteOutputLines.Items.Add("Straight Line");
cboRouteOutputLines.Items.Add("True Shape");
cboRouteOutputLines.Items.Add("True Shape With Ms");
cboRouteDirectionsLengthUnits.Items.Add("Feet");
cboRouteDirectionsLengthUnits.Items.Add("Yards");
cboRouteDirectionsLengthUnits.Items.Add("Miles");
cboRouteDirectionsLengthUnits.Items.Add("Meters");
cboRouteDirectionsLengthUnits.Items.Add("Kilometers");
ConnectToWebService();
GetNetworkAnalysisLayers();
}
catch (Exception exception)
{
MessageBox.Show(exception.Message, "An error has occurred");
}
}
/// <summary>
/// Get NAServer Object from the web service
/// </summary>
private void ConnectToWebService()
{
m_naServer = null;
// Get NAServer
m_naServer = new SanFrancisco_NAServer();
if (m_naServer != null)
return;
throw (new System.Exception("Could not find the web service."));
}
/// <summary>
/// This function shows how to populate stop locations using two different options:
/// 1) From Record Set using a Point Feature Class - Uncommented
/// 2) From an Array of PropertySets - Commented out
/// Uncomment the option, you would like to use
/// </summary>
private void LoadLocations(NAServerSolverParams solverParams)
{
// Set first point
PropertySet[] propSets = new PropertySet[2];
propSets[0] = CreateLocationPropertySet("Stop 1", "-122.49024904900", "37.74811940430", null);
propSets[1] = CreateLocationPropertySet("Stop 2", "-122.43083365400", "37.75396354490", null);
NAServerRouteParams routeParams = solverParams as NAServerRouteParams;
NAServerPropertySets stopsPropSets = new NAServerPropertySets();
stopsPropSets.PropertySets = propSets;
routeParams.Stops = stopsPropSets;
}
/// <summary>
/// Create a property set for NALocation
/// </summary>
private PropertySet CreateLocationPropertySet(string name, string X, string Y, SpatialReference sr)
{
PropertySet propSet = new PropertySet();
propSet.PropertyArray = CreateLocationPropertyArray(name, X, Y, sr);
return propSet;
}
/// <summary>
/// Create a property location array
/// </summary>
private PropertySetProperty[] CreateLocationPropertyArray(string name, string X, string Y, SpatialReference sr)
{
PropertySetProperty[] propSetProperty;
if (sr == null)
propSetProperty = new PropertySetProperty[3];
else
propSetProperty = new PropertySetProperty[4];
propSetProperty[0] = new PropertySetProperty();
propSetProperty[0].Key = "NAME";
propSetProperty[0].Value = name;
propSetProperty[1] = new PropertySetProperty();
propSetProperty[1].Key = "X";
propSetProperty[1].Value = X;
propSetProperty[2] = new PropertySetProperty();
propSetProperty[2].Key = "Y";
propSetProperty[2].Value = Y;
if (sr != null)
{
propSetProperty[3] = new PropertySetProperty();
propSetProperty[3].Key = "SpatialReference";
propSetProperty[3].Value = sr;
}
return propSetProperty;
}
/// <summary>
/// Output Results Messages, Map, Route Geometries, Directions
/// </summary>
private void OutputResults(NAServerSolverParams solverParams, NAServerSolverResults solverResults)
{
string messagesSolverResults = "";
// Output Solve messages
GPMessages gpMessages = solverResults.SolveMessages;
GPMessage[] arrGPMessage = gpMessages.GPMessages1;
if (arrGPMessage != null)
{
for (int i = 0; i < arrGPMessage.GetLength(0); i++)
{
GPMessage gpMessage = arrGPMessage[i];
messagesSolverResults += "\n" + gpMessage.MessageDesc;
}
}
// Uncomment the following section to output the total impedance of each route in a MessageBox
//NAServerRouteResults routeSolverResults = solverResults as NAServerRouteResults;
//if (routeSolverResults != null)
//{
// for (int i = 0; i < routeSolverResults.TotalImpedances.GetLength(0); i++)
// {
// messagesSolverResults += "\nTotal Impedance for Route[" + (i + 1) + "] = ";
// messagesSolverResults += routeSolverResults.TotalImpedances[i].ToString("f");
// messagesSolverResults += " " + ExtractImpedanceUnits(cboImpedance.Text).ToLower();
// }
//}
// Show a message box displaying both solver messages and total_impedance per route
if (messagesSolverResults.Length > 0)
MessageBox.Show(messagesSolverResults, "NAServer Route Results");
//Output Map
pictureBox.Image = null;
if (solverParams.ReturnMap)
{
pictureBox.Image = System.Drawing.Image.FromStream(new System.IO.MemoryStream(solverResults.MapImage.ImageData));
}
pictureBox.Refresh();
if (((solverParams as NAServerRouteParams) != null) && ((solverResults as NAServerRouteResults) != null))
OutputRouteResults(solverParams as NAServerRouteParams, solverResults as NAServerRouteResults);
}
/// <summary>
/// Output Route Results according to the NAServerRouteParams
/// </summary>
private void OutputRouteResults(NAServerRouteParams solverParams, NAServerRouteResults solverResults)
{
// Return Directions if generated
if (solverParams.ReturnDirections)
{
AddTabAndControl(this.tabReturnDirections, this.treeViewDirections);
OutputDirections(solverResults.Directions);
}
else
this.tabCtrlOutput.TabPages.Remove(this.tabReturnDirections);
// Return Route Geometries is generated
if (solverParams.ReturnRouteGeometries)
{
AddTabAndControl(this.tabReturnRouteGeometry, this.treeViewRouteGeometry);
OutputPolylines(solverResults.RouteGeometries);
}
else
this.tabCtrlOutput.TabPages.Remove(this.tabReturnRouteGeometry);
// Return Route Features as RecordSet
if (solverParams.ReturnRoutes)
{
AddTabAndControl(this.tabReturnRouteFeatures, this.dataGridRouteFeatures);
OutputRecSetToDataGrid(solverResults.Routes, dataGridRouteFeatures);
}
else
this.tabCtrlOutput.TabPages.Remove(this.tabReturnRouteFeatures);
// Return Stop Features as RecordSet
if (solverParams.ReturnStops)
{
AddTabAndControl(this.tabReturnStopsFeatures, this.dataGridStopFeatures);
OutputRecSetToDataGrid(solverResults.Stops, dataGridStopFeatures);
}
else
this.tabCtrlOutput.TabPages.Remove(this.tabReturnStopsFeatures);
// Return Barrier Features as RecordSet
if (solverParams.ReturnBarriers)
{
AddTabAndControl(this.tabReturnBarrierFeatures, this.dataGridBarrierFeatures);
OutputRecSetToDataGrid(solverResults.Barriers, dataGridBarrierFeatures);
}
else
this.tabCtrlOutput.TabPages.Remove(this.tabReturnBarrierFeatures);
// Make TabControlOutput enable
tabCtrlOutput.Enabled = true;
}
/// <summary>
/// Output Route Geometries (Polylines) in a TreeView control
/// </summary>
private void OutputPolylines(Polyline[] polylines)
{
if (polylines == null)
{
treeViewRouteGeometry.Nodes.Clear();
TreeNode newNode = new TreeNode("Route Geometry not generated");
treeViewRouteGeometry.Nodes.Add(newNode);
return;
}
// Suppress repainting the TreeView until all the objects have been created.
treeViewRouteGeometry.BeginUpdate();
// Clear the TreeView each time the method is called.
treeViewRouteGeometry.Nodes.Clear();
for (int i = 0; i < polylines.GetLength(0); i++)
{
PolylineN polylineN = polylines[i] as PolylineN;
if (polylineN != null)
{
TreeNode newNode = new TreeNode("Polyline Length for Route [" + (i + 1) + "] = " + polylineN.PathArray.GetLength(0).ToString());
treeViewRouteGeometry.Nodes.Add(newNode);
for (int j = 0; j < polylineN.PathArray.GetLength(0); j++)
{
WebService.Point[] points = polylineN.PathArray[j].PointArray;
for (int k = 0; k < points.GetLength(0); k++)
{
PointN point = points[k] as PointN;
if (point != null)
treeViewRouteGeometry.Nodes[i].Nodes.Add(new TreeNode("Point [" + (k + 1) + "]: " + point.X + "," + point.Y));
}
}
}
}
// Check if Route Geometry has been generated
if (polylines.Length == 0)
{
TreeNode newNode = new TreeNode("Route Geometry not generated");
treeViewRouteGeometry.Nodes.Add(newNode);
}
// Begin repainting the TreeView.
treeViewRouteGeometry.ExpandAll();
treeViewRouteGeometry.EndUpdate();
}
/// <summary>
/// Output Directions if a TreeView control
/// </summary>
private void OutputDirections(NAStreetDirections[] serverDirections)
{
if (serverDirections == null)
{
treeViewDirections.Nodes.Clear();
TreeNode newNode = new TreeNode("Directions not generated");
treeViewDirections.Nodes.Add(newNode);
return;
}
// Suppress repainting the TreeView until all the objects have been created.
treeViewDirections.BeginUpdate();
// Clear the TreeView each time the method is called.
treeViewDirections.Nodes.Clear();
for (int i = serverDirections.GetLowerBound(0); i <= serverDirections.GetUpperBound(0); i++)
{
// get Directions from the ith route
NAStreetDirections directions;
directions = serverDirections[i];
// get Summary (Total Distance and Time)
NAStreetDirection direction = directions.Summary;
string totallength = null, totaltime = null;
string[] SummaryStrings = direction.Strings;
for (int k = SummaryStrings.GetLowerBound(0); k < SummaryStrings.GetUpperBound(0); k++)
{
if (direction.StringTypes[k] == esriDirectionsStringType.esriDSTLength)
totallength = SummaryStrings[k];
if (direction.StringTypes[k] == esriDirectionsStringType.esriDSTTime)
totaltime = SummaryStrings[k];
}
// Add a Top a Node with the Route number and Total Distance and Total Time
TreeNode newNode = new TreeNode("Directions for Route [" + (i + 1) + "] - Total Distance: " + totallength + " Total Time: " + totaltime);
treeViewDirections.Nodes.Add(newNode);
// Then add a node for each step-by-step directions
NAStreetDirection[] StreetDirections = directions.Directions;
for (int directionIndex = StreetDirections.GetLowerBound(0); directionIndex <= StreetDirections.GetUpperBound(0); directionIndex++)
{
NAStreetDirection streetDirection = StreetDirections[directionIndex];
string[] StringStreetDirection = streetDirection.Strings;
for (int stringIndex = StringStreetDirection.GetLowerBound(0); stringIndex <= StringStreetDirection.GetUpperBound(0); stringIndex++)
{
if (streetDirection.StringTypes[stringIndex] == esriDirectionsStringType.esriDSTGeneral ||
streetDirection.StringTypes[stringIndex] == esriDirectionsStringType.esriDSTDepart ||
streetDirection.StringTypes[stringIndex] == esriDirectionsStringType.esriDSTArrive)
treeViewDirections.Nodes[i].Nodes.Add(new TreeNode(StringStreetDirection[stringIndex]));
}
}
}
// Check if Directions have been generated
if (serverDirections.Length == 0)
{
TreeNode newNode = new TreeNode("Directions not generated");
treeViewDirections.Nodes.Add(newNode);
}
// Begin repainting the TreeView.
treeViewDirections.ExpandAll();
treeViewDirections.EndUpdate();
}
/// <summary>
/// Generic function to output RecordSet (Stops, Barriers, or Routes) in a DataDrid Control
/// </summary>
private void OutputRecSetToDataGrid(RecordSet recSet, System.Windows.Forms.DataGrid outDataGrid)
{
Fields fields = recSet.Fields;
Field[] fldArray = fields.FieldArray;
DataSet dataSet = new DataSet("dataSet");
DataTable dataTable = new DataTable("Results");
dataSet.Tables.Add(dataTable);
DataColumn dataColumn = null;
for (int f = 0; f < fldArray.Length; f++)
{
dataColumn = new DataColumn(fldArray[f].Name);
dataTable.Columns.Add(dataColumn);
}
// Populate DataGrid rows by RecordSet
DataRow newDataRow;
Record[] records = recSet.Records;
Record record = null;
object[] values = null;
for (int j = 0; j < records.Length; j++)
{
newDataRow = dataTable.NewRow();
record = records[j];
values = record.Values;
for (int l = 0; l < values.Length; l++)
{
if (values[l] != null)
newDataRow[l] = values[l].ToString();
}
dataTable.Rows.Add(newDataRow);
}
outDataGrid.SetDataBinding(dataSet, "Results");
outDataGrid.Visible = true;
}
/// <summary>
/// Enable the startTime control
/// </summary>
private void chkUseStartTime_CheckedChanged(object sender, System.EventArgs e)
{
if (chkUseStartTime.Checked == true)
txtStartTime.Enabled = true;
else
txtStartTime.Enabled = false;
}
/// <summary>
/// Helper function to convert a string unit (e.g Miles) to an esriNetworkAnalystUnits (e.g esriNAUMiles)
/// </summary>
private esriNetworkAttributeUnits GetstringToesriUnits(string stresriUnits)
{
switch (stresriUnits.ToLower())
{
case "inches": return esriNetworkAttributeUnits.esriNAUInches;
case "feet": return esriNetworkAttributeUnits.esriNAUFeet;
case "yards": return esriNetworkAttributeUnits.esriNAUYards;
case "miles": return esriNetworkAttributeUnits.esriNAUMiles;
case "nautical miles": return esriNetworkAttributeUnits.esriNAUNauticalMiles;
case "millimeters": return esriNetworkAttributeUnits.esriNAUMillimeters;
case "centimeters": return esriNetworkAttributeUnits.esriNAUCentimeters;
case "meters": return esriNetworkAttributeUnits.esriNAUMeters;
case "kilometers": return esriNetworkAttributeUnits.esriNAUKilometers;
case "decimal degrees": return esriNetworkAttributeUnits.esriNAUDecimalDegrees;
case "decimeters": return esriNetworkAttributeUnits.esriNAUDecimeters;
case "seconds": return esriNetworkAttributeUnits.esriNAUSeconds;
case "minutes": return esriNetworkAttributeUnits.esriNAUMinutes;
case "hours": return esriNetworkAttributeUnits.esriNAUHours;
case "days": return esriNetworkAttributeUnits.esriNAUDays;
case "unknown": return esriNetworkAttributeUnits.esriNAUUnknown;
default: return esriNetworkAttributeUnits.esriNAUUnknown;
}
}
/// <summary>
/// Helper function to extract the impedance name in a string like "impedancename (impedanceunits)"
/// </summary>
private string ExtractImpedanceName(string impedanceUnits)
{
int firstIndex = impedanceUnits.LastIndexOf(" ");
int lastIndex = impedanceUnits.Length;
return impedanceUnits.Remove(firstIndex, (lastIndex - firstIndex));
}
/// <summary>
/// Helper function to extract the impedance unit in a string like "impedancename (impedanceunits)"
/// </summary>
private string ExtractImpedanceUnits(string impedanceUnits)
{
int firstIndex = impedanceUnits.LastIndexOf("(") + 1;
int lastIndex = impedanceUnits.LastIndexOf(")");
return impedanceUnits.Substring(firstIndex, (lastIndex - firstIndex));
}
/// <summary>
/// Enable chkPreserveFirst and chkPreserveFirst controls
/// </summary>
private void chkBestOrder_CheckedChanged(object sender, System.EventArgs e)
{
if (chkBestOrder.Checked == true)
{
this.chkPreserveFirst.Enabled = true;
this.chkPreserveLast.Enabled = true;
}
else
{
this.chkPreserveFirst.Enabled = false;
this.chkPreserveLast.Enabled = false;
}
}
/// <summary>
/// Hide tabs
/// </summary>
private void HideTabs()
{
// remove tabs initially - There are added when the result is returned.
this.tabCtrlOutput.TabPages.Remove(this.tabReturnDirections);
this.tabCtrlOutput.TabPages.Remove(this.tabReturnStopsFeatures);
this.tabCtrlOutput.TabPages.Remove(this.tabReturnBarrierFeatures);
this.tabCtrlOutput.TabPages.Remove(this.tabReturnRouteGeometry);
this.tabCtrlOutput.TabPages.Remove(this.tabReturnRouteFeatures);
}
/// <summary>
//// Add a tab page and a tab control
/// </summary>
private void AddTabAndControl(TabPage tabPage, System.Windows.Forms.Control controlToAdd)
{
if (!tabCtrlOutput.TabPages.Contains(tabPage))
{
tabCtrlOutput.TabPages.Add(tabPage);
tabPage.Controls.Add(controlToAdd);
}
}
}
}
[Visual Basic .NET]
Route_WebServiceClass.vb
Imports Microsoft.VisualBasic
Imports System
Imports System.Drawing
Imports System.Collections
Imports System.ComponentModel
Imports System.Windows.Forms
Imports System.Data
Imports System.Data.OleDb
Imports System.Xml
Imports System.Collections.Specialized
Imports Route_WebService.WebService
Namespace Route_WebService
''' <summary>
''' Summary description for Form1.
''' </summary>
Public Class Route_WebServiceClass : Inherits System.Windows.Forms.Form
#Region "Window Controls Declaration"
Private pictureBox As System.Windows.Forms.PictureBox
Private fraINASolverSettings As System.Windows.Forms.GroupBox
Private cboUturnPolicy As System.Windows.Forms.ComboBox
Private label11 As System.Windows.Forms.Label
Private label7 As System.Windows.Forms.Label
Private chklstAccumulateAttributes As System.Windows.Forms.CheckedListBox
Private label5 As System.Windows.Forms.Label
Private chklstRestrictions As System.Windows.Forms.CheckedListBox
Private cboImpedance As System.Windows.Forms.ComboBox
Private label4 As System.Windows.Forms.Label
Private chkIgnoreInvalidLocations As System.Windows.Forms.CheckBox
Private WithEvents cboNALayers As System.Windows.Forms.ComboBox
Private label10 As System.Windows.Forms.Label
Private label8 As System.Windows.Forms.Label
Private label9 As System.Windows.Forms.Label
Private chkReturnMap As System.Windows.Forms.CheckBox
Private WithEvents cmdSolve As System.Windows.Forms.Button
Private cboSnapToleranceUnits As System.Windows.Forms.ComboBox
Private txtMaxSnapTolerance As System.Windows.Forms.TextBox
Private txtSnapTolerance As System.Windows.Forms.TextBox
Private components As System.ComponentModel.IContainer
Private label20 As System.Windows.Forms.Label
Private label21 As System.Windows.Forms.Label
Private label22 As System.Windows.Forms.Label
Private chkPreserveFirst As System.Windows.Forms.CheckBox
Private WithEvents chkBestOrder As System.Windows.Forms.CheckBox
Private cboRouteDirectionsLengthUnits As System.Windows.Forms.ComboBox
Private chkReturnRoutes As System.Windows.Forms.CheckBox
Private chkReturnRouteGeometries As System.Windows.Forms.CheckBox
Private chkReturnStops As System.Windows.Forms.CheckBox
Private chkReturnDirections As System.Windows.Forms.CheckBox
Private cboRouteOutputLines As System.Windows.Forms.ComboBox
Private chkUseTimeWindows As System.Windows.Forms.CheckBox
Private chkPreserveLast As System.Windows.Forms.CheckBox
Private cboRouteDirectionsTimeAttribute As System.Windows.Forms.ComboBox
Private fraINARouteSolver As System.Windows.Forms.GroupBox
Private fraINAServerRouteParams As System.Windows.Forms.GroupBox
Private tabCtrlOutput As System.Windows.Forms.TabControl
Private tabReturnStopsFeatures As System.Windows.Forms.TabPage
Private tabReturnBarrierFeatures As System.Windows.Forms.TabPage
Private tabReturnDirections As System.Windows.Forms.TabPage
Private tabReturnRouteFeatures As System.Windows.Forms.TabPage
Private dataGridRouteFeatures As System.Windows.Forms.DataGrid
Private dataGridStopFeatures As System.Windows.Forms.DataGrid
Private dataGridBarrierFeatures As System.Windows.Forms.DataGrid
Private tabReturnMap As System.Windows.Forms.TabPage
Private tabReturnRouteGeometry As System.Windows.Forms.TabPage
Private treeViewRouteGeometry As System.Windows.Forms.TreeView
Private treeViewDirections As System.Windows.Forms.TreeView
Private checkReturnBarriers As System.Windows.Forms.CheckBox
Private chkUseHierarchy As System.Windows.Forms.CheckBox
Private WithEvents chkUseStartTime As System.Windows.Forms.CheckBox
Private txtStartTime As System.Windows.Forms.TextBox
Private fraINAServerSolverParams As System.Windows.Forms.GroupBox
Private m_naServer As SanFrancisco_NAServer
#End Region
Public Sub New()
'
' Required for Windows Form Designer support
'
InitializeComponent()
End Sub
''' <summary>
''' Clean up any resources being used.
''' </summary>
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not components Is Nothing Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
#Region "Windows Form Designer generated code"
''' <summary>
''' Required method for Designer support - do not modify
''' the contents of this method with the code editor.
''' </summary>
Private Sub InitializeComponent()
Me.cmdSolve = New System.Windows.Forms.Button
Me.pictureBox = New System.Windows.Forms.PictureBox
Me.fraINASolverSettings = New System.Windows.Forms.GroupBox
Me.chkIgnoreInvalidLocations = New System.Windows.Forms.CheckBox
Me.cboUturnPolicy = New System.Windows.Forms.ComboBox
Me.label11 = New System.Windows.Forms.Label
Me.label7 = New System.Windows.Forms.Label
Me.chklstAccumulateAttributes = New System.Windows.Forms.CheckedListBox
Me.label5 = New System.Windows.Forms.Label
Me.chklstRestrictions = New System.Windows.Forms.CheckedListBox
Me.cboImpedance = New System.Windows.Forms.ComboBox
Me.label4 = New System.Windows.Forms.Label
Me.chkUseHierarchy = New System.Windows.Forms.CheckBox
Me.fraINAServerSolverParams = New System.Windows.Forms.GroupBox
Me.chkReturnMap = New System.Windows.Forms.CheckBox
Me.cboSnapToleranceUnits = New System.Windows.Forms.ComboBox
Me.cboNALayers = New System.Windows.Forms.ComboBox
Me.label10 = New System.Windows.Forms.Label
Me.label8 = New System.Windows.Forms.Label
Me.txtMaxSnapTolerance = New System.Windows.Forms.TextBox
Me.txtSnapTolerance = New System.Windows.Forms.TextBox
Me.label9 = New System.Windows.Forms.Label
Me.fraINARouteSolver = New System.Windows.Forms.GroupBox
Me.label20 = New System.Windows.Forms.Label
Me.cboRouteOutputLines = New System.Windows.Forms.ComboBox
Me.chkUseTimeWindows = New System.Windows.Forms.CheckBox
Me.chkPreserveLast = New System.Windows.Forms.CheckBox
Me.chkPreserveFirst = New System.Windows.Forms.CheckBox
Me.chkBestOrder = New System.Windows.Forms.CheckBox
Me.chkUseStartTime = New System.Windows.Forms.CheckBox
Me.txtStartTime = New System.Windows.Forms.TextBox
Me.fraINAServerRouteParams = New System.Windows.Forms.GroupBox
Me.checkReturnBarriers = New System.Windows.Forms.CheckBox
Me.cboRouteDirectionsTimeAttribute = New System.Windows.Forms.ComboBox
Me.label21 = New System.Windows.Forms.Label
Me.cboRouteDirectionsLengthUnits = New System.Windows.Forms.ComboBox
Me.label22 = New System.Windows.Forms.Label
Me.chkReturnRoutes = New System.Windows.Forms.CheckBox
Me.chkReturnRouteGeometries = New System.Windows.Forms.CheckBox
Me.chkReturnStops = New System.Windows.Forms.CheckBox
Me.chkReturnDirections = New System.Windows.Forms.CheckBox
Me.tabCtrlOutput = New System.Windows.Forms.TabControl
Me.tabReturnMap = New System.Windows.Forms.TabPage
Me.tabReturnRouteFeatures = New System.Windows.Forms.TabPage
Me.dataGridRouteFeatures = New System.Windows.Forms.DataGrid
Me.tabReturnBarrierFeatures = New System.Windows.Forms.TabPage
Me.dataGridBarrierFeatures = New System.Windows.Forms.DataGrid
Me.tabReturnStopsFeatures = New System.Windows.Forms.TabPage
Me.dataGridStopFeatures = New System.Windows.Forms.DataGrid
Me.tabReturnDirections = New System.Windows.Forms.TabPage
Me.treeViewDirections = New System.Windows.Forms.TreeView
Me.tabReturnRouteGeometry = New System.Windows.Forms.TabPage
Me.treeViewRouteGeometry = New System.Windows.Forms.TreeView
CType(Me.pictureBox, System.ComponentModel.ISupportInitialize).BeginInit()
Me.fraINASolverSettings.SuspendLayout()
Me.fraINAServerSolverParams.SuspendLayout()
Me.fraINARouteSolver.SuspendLayout()
Me.fraINAServerRouteParams.SuspendLayout()
Me.tabCtrlOutput.SuspendLayout()
Me.tabReturnMap.SuspendLayout()
Me.tabReturnRouteFeatures.SuspendLayout()
CType(Me.dataGridRouteFeatures, System.ComponentModel.ISupportInitialize).BeginInit()
Me.tabReturnBarrierFeatures.SuspendLayout()
CType(Me.dataGridBarrierFeatures, System.ComponentModel.ISupportInitialize).BeginInit()
Me.tabReturnStopsFeatures.SuspendLayout()
CType(Me.dataGridStopFeatures, System.ComponentModel.ISupportInitialize).BeginInit()
Me.tabReturnDirections.SuspendLayout()
Me.tabReturnRouteGeometry.SuspendLayout()
Me.SuspendLayout()
'
'cmdSolve
'
Me.cmdSolve.Location = New System.Drawing.Point(232, 504)
Me.cmdSolve.Name = "cmdSolve"
Me.cmdSolve.Size = New System.Drawing.Size(200, 32)
Me.cmdSolve.TabIndex = 29
Me.cmdSolve.Text = "Find Route"
'
'pictureBox
'
Me.pictureBox.BackColor = System.Drawing.Color.White
Me.pictureBox.Location = New System.Drawing.Point(8, 8)
Me.pictureBox.Name = "pictureBox"
Me.pictureBox.Size = New System.Drawing.Size(448, 456)
Me.pictureBox.TabIndex = 20
Me.pictureBox.TabStop = False
'
'fraINASolverSettings
'
Me.fraINASolverSettings.Controls.Add(Me.chkIgnoreInvalidLocations)
Me.fraINASolverSettings.Controls.Add(Me.cboUturnPolicy)
Me.fraINASolverSettings.Controls.Add(Me.label11)
Me.fraINASolverSettings.Controls.Add(Me.label7)
Me.fraINASolverSettings.Controls.Add(Me.chklstAccumulateAttributes)
Me.fraINASolverSettings.Controls.Add(Me.label5)
Me.fraINASolverSettings.Controls.Add(Me.chklstRestrictions)
Me.fraINASolverSettings.Controls.Add(Me.cboImpedance)
Me.fraINASolverSettings.Controls.Add(Me.label4)
Me.fraINASolverSettings.Controls.Add(Me.chkUseHierarchy)
Me.fraINASolverSettings.Enabled = False
Me.fraINASolverSettings.Location = New System.Drawing.Point(8, 112)
Me.fraINASolverSettings.Name = "fraINASolverSettings"
Me.fraINASolverSettings.Size = New System.Drawing.Size(424, 192)
Me.fraINASolverSettings.TabIndex = 70
Me.fraINASolverSettings.TabStop = False
Me.fraINASolverSettings.Text = "INASolverSettings"
'
'chkIgnoreInvalidLocations
'
Me.chkIgnoreInvalidLocations.Location = New System.Drawing.Point(24, 80)
Me.chkIgnoreInvalidLocations.Name = "chkIgnoreInvalidLocations"
Me.chkIgnoreInvalidLocations.Size = New System.Drawing.Size(144, 21)
Me.chkIgnoreInvalidLocations.TabIndex = 10
Me.chkIgnoreInvalidLocations.Text = "Ignore Invalid Locations"
'
'cboUturnPolicy
'
Me.cboUturnPolicy.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cboUturnPolicy.Location = New System.Drawing.Point(128, 48)
Me.cboUturnPolicy.Name = "cboUturnPolicy"
Me.cboUturnPolicy.Size = New System.Drawing.Size(280, 21)
Me.cboUturnPolicy.TabIndex = 9
'
'label11
'
Me.label11.Location = New System.Drawing.Point(16, 56)
Me.label11.Name = "label11"
Me.label11.Size = New System.Drawing.Size(88, 16)
Me.label11.TabIndex = 73
Me.label11.Text = "Allow U-Turns"
'
'label7
'
Me.label7.Location = New System.Drawing.Point(216, 104)
Me.label7.Name = "label7"
Me.label7.Size = New System.Drawing.Size(120, 16)
Me.label7.TabIndex = 72
Me.label7.Text = "Accumulate Attributes"
'
'chklstAccumulateAttributes
'
Me.chklstAccumulateAttributes.CheckOnClick = True
Me.chklstAccumulateAttributes.Location = New System.Drawing.Point(216, 120)
Me.chklstAccumulateAttributes.Name = "chklstAccumulateAttributes"
Me.chklstAccumulateAttributes.ScrollAlwaysVisible = True
Me.chklstAccumulateAttributes.Size = New System.Drawing.Size(192, 64)
Me.chklstAccumulateAttributes.TabIndex = 13
'
'label5
'
Me.label5.Location = New System.Drawing.Point(16, 104)
Me.label5.Name = "label5"
Me.label5.Size = New System.Drawing.Size(72, 16)
Me.label5.TabIndex = 70
Me.label5.Text = "Restrictions"
'
'chklstRestrictions
'
Me.chklstRestrictions.CheckOnClick = True
Me.chklstRestrictions.Location = New System.Drawing.Point(16, 120)
Me.chklstRestrictions.Name = "chklstRestrictions"
Me.chklstRestrictions.ScrollAlwaysVisible = True
Me.chklstRestrictions.Size = New System.Drawing.Size(192, 64)
Me.chklstRestrictions.TabIndex = 12
'
'cboImpedance
'
Me.cboImpedance.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cboImpedance.Location = New System.Drawing.Point(128, 24)
Me.cboImpedance.Name = "cboImpedance"
Me.cboImpedance.Size = New System.Drawing.Size(280, 21)
Me.cboImpedance.TabIndex = 8
'
'label4
'
Me.label4.Location = New System.Drawing.Point(16, 24)
Me.label4.Name = "label4"
Me.label4.Size = New System.Drawing.Size(64, 16)
Me.label4.TabIndex = 67
Me.label4.Text = "Impedance"
'
'chkUseHierarchy
'
Me.chkUseHierarchy.Checked = True
Me.chkUseHierarchy.CheckState = System.Windows.Forms.CheckState.Checked
Me.chkUseHierarchy.Location = New System.Drawing.Point(216, 80)
Me.chkUseHierarchy.Name = "chkUseHierarchy"
Me.chkUseHierarchy.Size = New System.Drawing.Size(96, 21)
Me.chkUseHierarchy.TabIndex = 11
Me.chkUseHierarchy.Text = "Use Hierarchy"
'
'fraINAServerSolverParams
'
Me.fraINAServerSolverParams.Controls.Add(Me.chkReturnMap)
Me.fraINAServerSolverParams.Controls.Add(Me.cboSnapToleranceUnits)
Me.fraINAServerSolverParams.Controls.Add(Me.cboNALayers)
Me.fraINAServerSolverParams.Controls.Add(Me.label10)
Me.fraINAServerSolverParams.Controls.Add(Me.label8)
Me.fraINAServerSolverParams.Controls.Add(Me.txtMaxSnapTolerance)
Me.fraINAServerSolverParams.Controls.Add(Me.txtSnapTolerance)
Me.fraINAServerSolverParams.Controls.Add(Me.label9)
Me.fraINAServerSolverParams.Enabled = False
Me.fraINAServerSolverParams.Location = New System.Drawing.Point(8, 8)
Me.fraINAServerSolverParams.Name = "fraINAServerSolverParams"
Me.fraINAServerSolverParams.Size = New System.Drawing.Size(424, 96)
Me.fraINAServerSolverParams.TabIndex = 71
Me.fraINAServerSolverParams.TabStop = False
Me.fraINAServerSolverParams.Text = "INAServerSolverParams"
'
'chkReturnMap
'
Me.chkReturnMap.Checked = True
Me.chkReturnMap.CheckState = System.Windows.Forms.CheckState.Checked
Me.chkReturnMap.Location = New System.Drawing.Point(8, 72)
Me.chkReturnMap.Name = "chkReturnMap"
Me.chkReturnMap.Size = New System.Drawing.Size(96, 16)
Me.chkReturnMap.TabIndex = 7
Me.chkReturnMap.Text = "Return Map"
'
'cboSnapToleranceUnits
'
Me.cboSnapToleranceUnits.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cboSnapToleranceUnits.Location = New System.Drawing.Point(240, 48)
Me.cboSnapToleranceUnits.Name = "cboSnapToleranceUnits"
Me.cboSnapToleranceUnits.Size = New System.Drawing.Size(168, 21)
Me.cboSnapToleranceUnits.TabIndex = 6
'
'cboNALayers
'
Me.cboNALayers.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cboNALayers.Location = New System.Drawing.Point(128, 24)
Me.cboNALayers.Name = "cboNALayers"
Me.cboNALayers.Size = New System.Drawing.Size(280, 21)
Me.cboNALayers.TabIndex = 3
'
'label10
'
Me.label10.Location = New System.Drawing.Point(168, 56)
Me.label10.Name = "label10"
Me.label10.Size = New System.Drawing.Size(16, 16)
Me.label10.TabIndex = 72
Me.label10.Text = "to"
'
'label8
'
Me.label8.Location = New System.Drawing.Point(8, 24)
Me.label8.Name = "label8"
Me.label8.Size = New System.Drawing.Size(128, 16)
Me.label8.TabIndex = 71
Me.label8.Text = "NALayer Name"
'
'txtMaxSnapTolerance
'
Me.txtMaxSnapTolerance.Location = New System.Drawing.Point(192, 48)
Me.txtMaxSnapTolerance.Name = "txtMaxSnapTolerance"
Me.txtMaxSnapTolerance.Size = New System.Drawing.Size(40, 20)
Me.txtMaxSnapTolerance.TabIndex = 5
Me.txtMaxSnapTolerance.Text = "50"
'
'txtSnapTolerance
'
Me.txtSnapTolerance.Location = New System.Drawing.Point(128, 48)
Me.txtSnapTolerance.Name = "txtSnapTolerance"
Me.txtSnapTolerance.Size = New System.Drawing.Size(32, 20)
Me.txtSnapTolerance.TabIndex = 4
Me.txtSnapTolerance.Text = "2"
'
'label9
'
Me.label9.Location = New System.Drawing.Point(8, 48)
Me.label9.Name = "label9"
Me.label9.Size = New System.Drawing.Size(104, 16)
Me.label9.TabIndex = 68
Me.label9.Text = "Search Tolerance"
'
'fraINARouteSolver
'
Me.fraINARouteSolver.Controls.Add(Me.label20)
Me.fraINARouteSolver.Controls.Add(Me.cboRouteOutputLines)
Me.fraINARouteSolver.Controls.Add(Me.chkUseTimeWindows)
Me.fraINARouteSolver.Controls.Add(Me.chkPreserveLast)
Me.fraINARouteSolver.Controls.Add(Me.chkPreserveFirst)
Me.fraINARouteSolver.Controls.Add(Me.chkBestOrder)
Me.fraINARouteSolver.Controls.Add(Me.chkUseStartTime)
Me.fraINARouteSolver.Controls.Add(Me.txtStartTime)
Me.fraINARouteSolver.Enabled = False
Me.fraINARouteSolver.Location = New System.Drawing.Point(232, 312)
Me.fraINARouteSolver.Name = "fraINARouteSolver"
Me.fraINARouteSolver.Size = New System.Drawing.Size(200, 184)
Me.fraINARouteSolver.TabIndex = 76
Me.fraINARouteSolver.TabStop = False
Me.fraINARouteSolver.Text = "INARouteSolver"
'
'label20
'
Me.label20.Location = New System.Drawing.Point(8, 136)
Me.label20.Name = "label20"
Me.label20.Size = New System.Drawing.Size(40, 16)
Me.label20.TabIndex = 53
Me.label20.Text = "Shape"
'
'cboRouteOutputLines
'
Me.cboRouteOutputLines.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cboRouteOutputLines.ItemHeight = 13
Me.cboRouteOutputLines.Location = New System.Drawing.Point(8, 152)
Me.cboRouteOutputLines.Name = "cboRouteOutputLines"
Me.cboRouteOutputLines.Size = New System.Drawing.Size(184, 21)
Me.cboRouteOutputLines.TabIndex = 28
'
'chkUseTimeWindows
'
Me.chkUseTimeWindows.Location = New System.Drawing.Point(8, 80)
Me.chkUseTimeWindows.Name = "chkUseTimeWindows"
Me.chkUseTimeWindows.Size = New System.Drawing.Size(128, 16)
Me.chkUseTimeWindows.TabIndex = 25
Me.chkUseTimeWindows.Text = "Use Time Windows"
'
'chkPreserveLast
'
Me.chkPreserveLast.Location = New System.Drawing.Point(24, 56)
Me.chkPreserveLast.Name = "chkPreserveLast"
Me.chkPreserveLast.Size = New System.Drawing.Size(96, 16)
Me.chkPreserveLast.TabIndex = 24
Me.chkPreserveLast.Text = "PreserveLast"
'
'chkPreserveFirst
'
Me.chkPreserveFirst.Location = New System.Drawing.Point(24, 40)
Me.chkPreserveFirst.Name = "chkPreserveFirst"
Me.chkPreserveFirst.Size = New System.Drawing.Size(104, 16)
Me.chkPreserveFirst.TabIndex = 23
Me.chkPreserveFirst.Text = "Preserve First"
'
'chkBestOrder
'
Me.chkBestOrder.Location = New System.Drawing.Point(8, 24)
Me.chkBestOrder.Name = "chkBestOrder"
Me.chkBestOrder.Size = New System.Drawing.Size(112, 16)
Me.chkBestOrder.TabIndex = 22
Me.chkBestOrder.Text = "Find Best Order"
'
'chkUseStartTime
'
Me.chkUseStartTime.Location = New System.Drawing.Point(8, 96)
Me.chkUseStartTime.Name = "chkUseStartTime"
Me.chkUseStartTime.Size = New System.Drawing.Size(104, 16)
Me.chkUseStartTime.TabIndex = 26
Me.chkUseStartTime.Text = "Use Start Time"
'
'txtStartTime
'
Me.txtStartTime.Enabled = False
Me.txtStartTime.Location = New System.Drawing.Point(24, 112)
Me.txtStartTime.Name = "txtStartTime"
Me.txtStartTime.Size = New System.Drawing.Size(168, 20)
Me.txtStartTime.TabIndex = 27
'
'fraINAServerRouteParams
'
Me.fraINAServerRouteParams.Controls.Add(Me.checkReturnBarriers)
Me.fraINAServerRouteParams.Controls.Add(Me.cboRouteDirectionsTimeAttribute)
Me.fraINAServerRouteParams.Controls.Add(Me.label21)
Me.fraINAServerRouteParams.Controls.Add(Me.cboRouteDirectionsLengthUnits)
Me.fraINAServerRouteParams.Controls.Add(Me.label22)
Me.fraINAServerRouteParams.Controls.Add(Me.chkReturnRoutes)
Me.fraINAServerRouteParams.Controls.Add(Me.chkReturnRouteGeometries)
Me.fraINAServerRouteParams.Controls.Add(Me.chkReturnStops)
Me.fraINAServerRouteParams.Controls.Add(Me.chkReturnDirections)
Me.fraINAServerRouteParams.Enabled = False
Me.fraINAServerRouteParams.Location = New System.Drawing.Point(8, 312)
Me.fraINAServerRouteParams.Name = "fraINAServerRouteParams"
Me.fraINAServerRouteParams.Size = New System.Drawing.Size(216, 184)
Me.fraINAServerRouteParams.TabIndex = 75
Me.fraINAServerRouteParams.TabStop = False
Me.fraINAServerRouteParams.Text = "INAServerRouteParams"
'
'checkReturnBarriers
'
Me.checkReturnBarriers.Checked = True
Me.checkReturnBarriers.CheckState = System.Windows.Forms.CheckState.Checked
Me.checkReturnBarriers.Location = New System.Drawing.Point(8, 56)
Me.checkReturnBarriers.Name = "checkReturnBarriers"
Me.checkReturnBarriers.Size = New System.Drawing.Size(136, 16)
Me.checkReturnBarriers.TabIndex = 17
Me.checkReturnBarriers.Text = "Returns Barriers"
'
'cboRouteDirectionsTimeAttribute
'
Me.cboRouteDirectionsTimeAttribute.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cboRouteDirectionsTimeAttribute.ItemHeight = 13
Me.cboRouteDirectionsTimeAttribute.Location = New System.Drawing.Point(56, 144)
Me.cboRouteDirectionsTimeAttribute.Name = "cboRouteDirectionsTimeAttribute"
Me.cboRouteDirectionsTimeAttribute.Size = New System.Drawing.Size(152, 21)
Me.cboRouteDirectionsTimeAttribute.TabIndex = 21
'
'label21
'
Me.label21.Location = New System.Drawing.Point(8, 152)
Me.label21.Name = "label21"
Me.label21.Size = New System.Drawing.Size(48, 16)
Me.label21.TabIndex = 52
Me.label21.Text = "Dir Time"
'
'cboRouteDirectionsLengthUnits
'
Me.cboRouteDirectionsLengthUnits.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cboRouteDirectionsLengthUnits.ItemHeight = 13
Me.cboRouteDirectionsLengthUnits.Location = New System.Drawing.Point(56, 120)
Me.cboRouteDirectionsLengthUnits.Name = "cboRouteDirectionsLengthUnits"
Me.cboRouteDirectionsLengthUnits.Size = New System.Drawing.Size(152, 21)
Me.cboRouteDirectionsLengthUnits.TabIndex = 20
'
'label22
'
Me.label22.Location = New System.Drawing.Point(8, 128)
Me.label22.Name = "label22"
Me.label22.Size = New System.Drawing.Size(56, 16)
Me.label22.TabIndex = 50
Me.label22.Text = "Dir Units"
'
'chkReturnRoutes
'
Me.chkReturnRoutes.Checked = True
Me.chkReturnRoutes.CheckState = System.Windows.Forms.CheckState.Checked
Me.chkReturnRoutes.Location = New System.Drawing.Point(8, 40)
Me.chkReturnRoutes.Name = "chkReturnRoutes"
Me.chkReturnRoutes.Size = New System.Drawing.Size(96, 16)
Me.chkReturnRoutes.TabIndex = 16
Me.chkReturnRoutes.Text = "Return Routes"
'
'chkReturnRouteGeometries
'
Me.chkReturnRouteGeometries.Checked = True
Me.chkReturnRouteGeometries.CheckState = System.Windows.Forms.CheckState.Checked
Me.chkReturnRouteGeometries.Location = New System.Drawing.Point(8, 24)
Me.chkReturnRouteGeometries.Name = "chkReturnRouteGeometries"
Me.chkReturnRouteGeometries.Size = New System.Drawing.Size(152, 16)
Me.chkReturnRouteGeometries.TabIndex = 15
Me.chkReturnRouteGeometries.Text = "Return Route Geometries"
'
'chkReturnStops
'
Me.chkReturnStops.Checked = True
Me.chkReturnStops.CheckState = System.Windows.Forms.CheckState.Checked
Me.chkReturnStops.Location = New System.Drawing.Point(8, 72)
Me.chkReturnStops.Name = "chkReturnStops"
Me.chkReturnStops.Size = New System.Drawing.Size(96, 16)
Me.chkReturnStops.TabIndex = 18
Me.chkReturnStops.Text = "Return Stops"
'
'chkReturnDirections
'
Me.chkReturnDirections.Checked = True
Me.chkReturnDirections.CheckState = System.Windows.Forms.CheckState.Checked
Me.chkReturnDirections.Location = New System.Drawing.Point(8, 88)
Me.chkReturnDirections.Name = "chkReturnDirections"
Me.chkReturnDirections.Size = New System.Drawing.Size(160, 16)
Me.chkReturnDirections.TabIndex = 19
Me.chkReturnDirections.Text = "Generate Directions"
'
'tabCtrlOutput
'
Me.tabCtrlOutput.Controls.Add(Me.tabReturnMap)
Me.tabCtrlOutput.Controls.Add(Me.tabReturnRouteFeatures)
Me.tabCtrlOutput.Controls.Add(Me.tabReturnBarrierFeatures)
Me.tabCtrlOutput.Controls.Add(Me.tabReturnStopsFeatures)
Me.tabCtrlOutput.Controls.Add(Me.tabReturnDirections)
Me.tabCtrlOutput.Controls.Add(Me.tabReturnRouteGeometry)
Me.tabCtrlOutput.Enabled = False
Me.tabCtrlOutput.Location = New System.Drawing.Point(440, 16)
Me.tabCtrlOutput.Name = "tabCtrlOutput"
Me.tabCtrlOutput.SelectedIndex = 0
Me.tabCtrlOutput.Size = New System.Drawing.Size(472, 496)
Me.tabCtrlOutput.TabIndex = 30
'
'tabReturnMap
'
Me.tabReturnMap.Controls.Add(Me.pictureBox)
Me.tabReturnMap.Location = New System.Drawing.Point(4, 22)
Me.tabReturnMap.Name = "tabReturnMap"
Me.tabReturnMap.Size = New System.Drawing.Size(464, 470)
Me.tabReturnMap.TabIndex = 0
Me.tabReturnMap.Text = "Map"
'
'tabReturnRouteFeatures
'
Me.tabReturnRouteFeatures.Controls.Add(Me.dataGridRouteFeatures)
Me.tabReturnRouteFeatures.Location = New System.Drawing.Point(4, 22)
Me.tabReturnRouteFeatures.Name = "tabReturnRouteFeatures"
Me.tabReturnRouteFeatures.Size = New System.Drawing.Size(464, 470)
Me.tabReturnRouteFeatures.TabIndex = 4
Me.tabReturnRouteFeatures.Text = "Route Features"
'
'dataGridRouteFeatures
'
Me.dataGridRouteFeatures.DataMember = ""
Me.dataGridRouteFeatures.HeaderForeColor = System.Drawing.SystemColors.ControlText
Me.dataGridRouteFeatures.Location = New System.Drawing.Point(8, 8)
Me.dataGridRouteFeatures.Name = "dataGridRouteFeatures"
Me.dataGridRouteFeatures.Size = New System.Drawing.Size(448, 456)
Me.dataGridRouteFeatures.TabIndex = 0
'
'tabReturnBarrierFeatures
'
Me.tabReturnBarrierFeatures.Controls.Add(Me.dataGridBarrierFeatures)
Me.tabReturnBarrierFeatures.Location = New System.Drawing.Point(4, 22)
Me.tabReturnBarrierFeatures.Name = "tabReturnBarrierFeatures"
Me.tabReturnBarrierFeatures.Size = New System.Drawing.Size(464, 470)
Me.tabReturnBarrierFeatures.TabIndex = 3
Me.tabReturnBarrierFeatures.Text = "Barrier Features"
'
'dataGridBarrierFeatures
'
Me.dataGridBarrierFeatures.DataMember = ""
Me.dataGridBarrierFeatures.HeaderForeColor = System.Drawing.SystemColors.ControlText
Me.dataGridBarrierFeatures.Location = New System.Drawing.Point(8, 8)
Me.dataGridBarrierFeatures.Name = "dataGridBarrierFeatures"
Me.dataGridBarrierFeatures.Size = New System.Drawing.Size(448, 456)
Me.dataGridBarrierFeatures.TabIndex = 0
'
'tabReturnStopsFeatures
'
Me.tabReturnStopsFeatures.Controls.Add(Me.dataGridStopFeatures)
Me.tabReturnStopsFeatures.Location = New System.Drawing.Point(4, 22)
Me.tabReturnStopsFeatures.Name = "tabReturnStopsFeatures"
Me.tabReturnStopsFeatures.Size = New System.Drawing.Size(464, 470)
Me.tabReturnStopsFeatures.TabIndex = 2
Me.tabReturnStopsFeatures.Text = "Stop Features"
'
'dataGridStopFeatures
'
Me.dataGridStopFeatures.DataMember = ""
Me.dataGridStopFeatures.HeaderForeColor = System.Drawing.SystemColors.ControlText
Me.dataGridStopFeatures.Location = New System.Drawing.Point(8, 8)
Me.dataGridStopFeatures.Name = "dataGridStopFeatures"
Me.dataGridStopFeatures.Size = New System.Drawing.Size(448, 456)
Me.dataGridStopFeatures.TabIndex = 0
'
'tabReturnDirections
'
Me.tabReturnDirections.Controls.Add(Me.treeViewDirections)
Me.tabReturnDirections.Location = New System.Drawing.Point(4, 22)
Me.tabReturnDirections.Name = "tabReturnDirections"
Me.tabReturnDirections.Size = New System.Drawing.Size(464, 470)
Me.tabReturnDirections.TabIndex = 1
Me.tabReturnDirections.Text = "Directions"
'
'treeViewDirections
'
Me.treeViewDirections.Location = New System.Drawing.Point(8, 8)
Me.treeViewDirections.Name = "treeViewDirections"
Me.treeViewDirections.Size = New System.Drawing.Size(448, 456)
Me.treeViewDirections.TabIndex = 69
'
'tabReturnRouteGeometry
'
Me.tabReturnRouteGeometry.Controls.Add(Me.treeViewRouteGeometry)
Me.tabReturnRouteGeometry.Location = New System.Drawing.Point(4, 22)
Me.tabReturnRouteGeometry.Name = "tabReturnRouteGeometry"
Me.tabReturnRouteGeometry.Size = New System.Drawing.Size(464, 470)
Me.tabReturnRouteGeometry.TabIndex = 5
Me.tabReturnRouteGeometry.Text = "Route Geometry"
'
'treeViewRouteGeometry
'
Me.treeViewRouteGeometry.Location = New System.Drawing.Point(8, 8)
Me.treeViewRouteGeometry.Name = "treeViewRouteGeometry"
Me.treeViewRouteGeometry.Size = New System.Drawing.Size(448, 456)
Me.treeViewRouteGeometry.TabIndex = 1
'
'Route_WebServiceClass
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(936, 550)
Me.Controls.Add(Me.tabCtrlOutput)
Me.Controls.Add(Me.fraINARouteSolver)
Me.Controls.Add(Me.fraINAServerRouteParams)
Me.Controls.Add(Me.fraINAServerSolverParams)
Me.Controls.Add(Me.fraINASolverSettings)
Me.Controls.Add(Me.cmdSolve)
Me.Name = "Route_WebServiceClass"
Me.Text = "NAServer - Route Web Service"
CType(Me.pictureBox, System.ComponentModel.ISupportInitialize).EndInit()
Me.fraINASolverSettings.ResumeLayout(False)
Me.fraINAServerSolverParams.ResumeLayout(False)
Me.fraINAServerSolverParams.PerformLayout()
Me.fraINARouteSolver.ResumeLayout(False)
Me.fraINARouteSolver.PerformLayout()
Me.fraINAServerRouteParams.ResumeLayout(False)
Me.tabCtrlOutput.ResumeLayout(False)
Me.tabReturnMap.ResumeLayout(False)
Me.tabReturnRouteFeatures.ResumeLayout(False)
CType(Me.dataGridRouteFeatures, System.ComponentModel.ISupportInitialize).EndInit()
Me.tabReturnBarrierFeatures.ResumeLayout(False)
CType(Me.dataGridBarrierFeatures, System.ComponentModel.ISupportInitialize).EndInit()
Me.tabReturnStopsFeatures.ResumeLayout(False)
CType(Me.dataGridStopFeatures, System.ComponentModel.ISupportInitialize).EndInit()
Me.tabReturnDirections.ResumeLayout(False)
Me.tabReturnRouteGeometry.ResumeLayout(False)
Me.ResumeLayout(False)
End Sub
#End Region
''' <summary>
''' The main entry point for the application.
''' </summary>
<STAThread()> _
Shared Sub Main()
Application.Run(New Route_WebServiceClass())
End Sub
''' <summary>
''' This function
''' - sets the server and solver parameters
''' - populates the stops NALocations
''' - gets and displays the server results (map, directions, etc.)
''' </summary>
Private Sub cmdSolve_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdSolve.Click
Me.Cursor = Cursors.WaitCursor
Try
' Get SolverParams
Dim solverParams As NAServerSolverParams = TryCast(m_naServer.GetSolverParameters(cboNALayers.Text), NAServerSolverParams)
' Set Solver params
SetNASolverSettings(solverParams)
SetSolverSpecificInterface(solverParams)
SetServerSolverParams(solverParams)
' Load Locations
LoadLocations(solverParams)
'Solve the Route
Dim solverResults As NAServerSolverResults
solverResults = m_naServer.Solve(solverParams)
'Get NAServer results in the tab controls
OutputResults(solverParams, solverResults)
Catch exception As Exception
MessageBox.Show(exception.Message, "An error has occurred")
End Try
Me.Cursor = Cursors.Default
End Sub
''' <summary>
''' This function
''' - gets all route network analysis layers
''' - selects the first route network analysis layer
''' - sets all controls for this route network analysis layer
''' </summary>
Private Sub GetNetworkAnalysisLayers()
Me.Cursor = Cursors.WaitCursor
Try
' Enable Frame
fraINAServerSolverParams.Enabled = True
'Get Route NA layer names
cboNALayers.Items.Clear()
Dim naLayers As String() = m_naServer.GetNALayerNames(esriNAServerLayerType.esriNAServerRouteLayer)
Dim i As Integer = 0
Do While i < naLayers.Length
cboNALayers.Items.Add(naLayers(i))
i += 1
Loop
' Select the first NA Layer name
If cboNALayers.Items.Count > 0 Then
cboNALayers.SelectedIndex = 0
Else
MessageBox.Show("There is no Network Analyst layer associated with this MapServer object!", "NAServer - Route Sample", System.Windows.Forms.MessageBoxButtons.OK)
End If
Catch exception As Exception
MessageBox.Show(exception.Message, "An error has occurred")
End Try
Me.Cursor = Cursors.Default
End Sub
''' <summary>
''' This function sets all controls for the selected route network analysis layer
''' </summary>
Private Sub cboNALayers_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cboNALayers.SelectedIndexChanged
Dim naLayerName As String = cboNALayers.Text
' Enable Solve Button
cmdSolve.Enabled = (naLayerName.Length = 0)
If naLayerName.Length = 0 Then
Return
End If
Me.Cursor = Cursors.WaitCursor
Try
Dim solverParams As NAServerSolverParams = m_naServer.GetSolverParameters(naLayerName)
Dim networkDescription As NAServerNetworkDescription = m_naServer.GetNetworkDescription(naLayerName)
' Setup Default Properties
GetNASolverSettings(networkDescription, solverParams)
GetSolverSpecificInterface(solverParams)
GetServerSolverParams(networkDescription, solverParams)
' Make frames Enable
MakeFramesEnabled(solverParams)
' Hide Tabs
HideTabs()
cmdSolve.Enabled = True
Catch exception As Exception
MessageBox.Show(exception.Message, "An error has occurred")
End Try
Me.Cursor = Cursors.Default
End Sub
''' <summary>
''' Get Default NASolverSettings controls (Cost Attributes, Restrictions Attributes. etc.)
''' </summary>
Private Sub GetNASolverSettings(ByVal networkDescription As NAServerNetworkDescription, ByVal solverSettings As NAServerSolverParams)
Dim impedanceIndex As Integer = 0
'Get Attributes
cboImpedance.Items.Clear()
chklstAccumulateAttributes.Items.Clear()
chklstRestrictions.Items.Clear()
cboUturnPolicy.SelectedIndex = -1
Dim attributes() As NAServerNetworkAttribute = networkDescription.NetworkAttributes
Dim accumulateAttributeNames() As String = solverSettings.AccumulateAttributeNames
Dim restrictionAttributeNames() As String = solverSettings.RestrictionAttributeNames
For i As Integer = 0 To attributes.Length - 1
Dim networkAttribute As NAServerNetworkAttribute = attributes(i)
Dim networkAttributeName As String = networkAttribute.Name
If networkAttribute.UsageType = esriNetworkAttributeUsageType.esriNAUTCost Then
chklstAccumulateAttributes.Items.Add(networkAttribute.Name, IsStringInStringArray(networkAttributeName, accumulateAttributeNames))
Dim index As Integer = cboImpedance.Items.Add(networkAttribute.Name + " (" + networkAttribute.Units.ToString().Substring(7) + ")")
If networkAttributeName = solverSettings.ImpedanceAttributeName Then
impedanceIndex = index
End If
End If
If networkAttribute.UsageType = esriNetworkAttributeUsageType.esriNAUTRestriction Then
chklstRestrictions.Items.Add(networkAttribute.Name, IsStringInStringArray(networkAttributeName, restrictionAttributeNames))
End If
Next
If cboImpedance.Items.Count > 0 Then
cboImpedance.SelectedIndex = impedanceIndex
End If
chkUseHierarchy.Checked = solverSettings.UseHierarchy
chkUseHierarchy.Enabled = solverSettings.HierarchyAttributeName.Length > 0
chkIgnoreInvalidLocations.Checked = solverSettings.IgnoreInvalidLocations
cboUturnPolicy.SelectedIndex = System.Convert.ToInt32(solverSettings.RestrictUTurns)
End Sub
Private Function IsStringInStringArray(ByVal inputString As String, ByVal stringArray() As String) As Boolean
Dim numInArray As Integer = stringArray.Length
For i As Integer = 0 To numInArray - 1
If inputString.Equals(stringArray(i)) Then
Return True
End If
Next
Return False
End Function
''' <summary>
''' Set Default route solver controls (BestOrder, UseTimeWindows, UseStartTime, etc.)
''' </summary>
Private Sub GetSolverSpecificInterface(ByVal solverParams As NAServerSolverParams)
Dim routeSolver As NAServerRouteParams = TryCast(solverParams, NAServerRouteParams)
If Not routeSolver Is Nothing Then
chkBestOrder.Checked = routeSolver.FindBestSequence
chkPreserveFirst.Checked = routeSolver.PreserveFirstStop
chkPreserveLast.Checked = routeSolver.PreserveLastStop
If chkBestOrder.Checked = True Then
Me.chkPreserveFirst.Enabled = True
Me.chkPreserveLast.Enabled = True
Else
Me.chkPreserveFirst.Enabled = False
Me.chkPreserveLast.Enabled = False
End If
chkUseTimeWindows.Checked = routeSolver.UseTimeWindows
chkUseStartTime.Checked = routeSolver.UseStartTime
If chkUseStartTime.Checked Then
txtStartTime.Enabled = True
txtStartTime.Text = routeSolver.StartTime.ToString()
Else
txtStartTime.Enabled = False
txtStartTime.Text = System.DateTime.Now.ToString()
End If
cboRouteOutputLines.SelectedIndex = System.Convert.ToInt32(routeSolver.OutputLines)
End If
End Sub
''' <summary>
''' Get ServerSolverParams controls (ReturnMap, SnapTolerance, etc.)
''' </summary>
Private Sub GetServerSolverParams(ByVal networkDescription As NAServerNetworkDescription, ByVal solverParams As NAServerSolverParams)
chkReturnMap.Checked = True
txtSnapTolerance.Text = solverParams.SnapTolerance.ToString()
txtMaxSnapTolerance.Text = solverParams.MaxSnapTolerance.ToString()
cboSnapToleranceUnits.SelectedIndex = Convert.ToInt32(solverParams.SnapToleranceUnits)
'Set Route Defaults
chkReturnRouteGeometries.Checked = False
chkReturnRoutes.Checked = True
chkReturnStops.Checked = True
chkReturnDirections.Checked = True
checkReturnBarriers.Checked = True
'Set Directions Defaults
cboRouteDirectionsTimeAttribute.Items.Clear()
Dim attributes As NAServerNetworkAttribute() = networkDescription.NetworkAttributes
Dim i As Integer = 0
Do While i < attributes.Length
Dim networkAttribute As NAServerNetworkAttribute = attributes(i)
If networkAttribute.UsageType = esriNetworkAttributeUsageType.esriNAUTCost Then
If String.Compare(networkAttribute.Units.ToString(), "esriNAUMinutes") = 0 Then
cboRouteDirectionsTimeAttribute.Items.Add(networkAttribute.Name)
End If
End If
i += 1
Loop
' Set the default direction settings
Dim routeParams As NAServerRouteParams = TryCast(solverParams, NAServerRouteParams)
If Not routeParams Is Nothing Then
cboRouteDirectionsLengthUnits.Text = routeParams.DirectionsLengthUnits.ToString().Substring(7)
'Select the first time attribute
If cboRouteDirectionsTimeAttribute.Items.Count > 0 Then
cboRouteDirectionsTimeAttribute.Text = routeParams.DirectionsTimeAttributeName
End If
End If
End Sub
''' <summary>
''' Set general solver settings (Impedance, Restrictions, Accumulates, etc.)
''' </summary>
Private Sub SetNASolverSettings(ByVal solverSettings As NAServerSolverParams)
solverSettings.ImpedanceAttributeName = ExtractImpedanceName(cboImpedance.Text)
Dim restrictionAttributes As String() = New String(chklstRestrictions.CheckedItems.Count - 1) {}
Dim i As Integer = 0
Do While i < chklstRestrictions.CheckedItems.Count
restrictionAttributes(i) = chklstRestrictions.Items(chklstRestrictions.CheckedIndices(i)).ToString()
i += 1
Loop
solverSettings.RestrictionAttributeNames = restrictionAttributes
Dim accumulateAttributes As String() = New String(chklstAccumulateAttributes.CheckedItems.Count - 1) {}
i = 0
Do While i < chklstAccumulateAttributes.CheckedItems.Count
accumulateAttributes(i) = chklstAccumulateAttributes.Items(chklstAccumulateAttributes.CheckedIndices(i)).ToString()
i += 1
Loop
solverSettings.AccumulateAttributeNames = accumulateAttributes
solverSettings.RestrictUTurns = CType(cboUturnPolicy.SelectedIndex, esriNetworkForwardStarBacktrack)
solverSettings.IgnoreInvalidLocations = chkIgnoreInvalidLocations.Checked
solverSettings.UseHierarchy = chkUseHierarchy.Checked
End Sub
''' <summary>
''' Set specific solver settings (FindBestSequence, UseTimeWindows, etc.)
''' </summary>
Private Sub SetSolverSpecificInterface(ByVal solverParams As NAServerSolverParams)
Dim routeSolver As NAServerRouteParams = TryCast(solverParams, NAServerRouteParams)
If Not routeSolver Is Nothing Then
routeSolver.FindBestSequence = chkBestOrder.Checked
routeSolver.PreserveFirstStop = chkPreserveFirst.Checked
routeSolver.PreserveLastStop = chkPreserveLast.Checked
routeSolver.UseTimeWindows = chkUseTimeWindows.Checked
routeSolver.OutputLines = CType(cboRouteOutputLines.SelectedIndex, esriNAOutputLineType)
routeSolver.UseStartTime = chkUseStartTime.Checked
If routeSolver.UseStartTime = True Then
routeSolver.StartTime = System.Convert.ToDateTime(txtStartTime.Text.ToString())
End If
End If
End Sub
''' <summary>
''' Set server solver parameters (ReturnMap, SnapTolerance, etc.)
''' </summary>
Private Sub SetServerSolverParams(ByVal solverParams As NAServerSolverParams)
solverParams.ReturnMap = chkReturnMap.Checked
solverParams.SnapTolerance = Convert.ToDouble(txtSnapTolerance.Text)
solverParams.MaxSnapTolerance = Convert.ToDouble(txtMaxSnapTolerance.Text)
solverParams.SnapToleranceUnits = CType(cboSnapToleranceUnits.SelectedIndex, esriUnits)
solverParams.ImageDescription.ImageDisplay.ImageWidth = pictureBox.Width
solverParams.ImageDescription.ImageDisplay.ImageHeight = pictureBox.Height
' // This code shows how to specify the output spatial reference in order to get the map
' // in a different spatial reference than the Network Dataset
' ESRISpatialReferenceGEN sr = pServerContext.CreateObject("esriGeometry.GeographicCoordinateSystem") as IESRISpatialReferenceGEN;
' int read;
' sr.ImportFromESRISpatialReference("GEOGCS[GCS_North_American_1983,DATUM[D_North_American_1983,SPHEROID[GRS_1980,6378137.0,298.257222101]],PRIMEM[Greenwich,0.0],UNIT[Degree,0.0174532925199433]]", out read);
' solverParams.OutputSpatialReference = sr as SpatialReference;
Dim routeParams As NAServerRouteParams = TryCast(solverParams, NAServerRouteParams)
If Not routeParams Is Nothing Then
routeParams.ReturnRouteGeometries = chkReturnRouteGeometries.Checked
routeParams.ReturnRoutes = chkReturnRoutes.Checked
routeParams.ReturnStops = chkReturnStops.Checked
routeParams.ReturnBarriers = checkReturnBarriers.Checked
routeParams.ReturnDirections = chkReturnDirections.Checked
routeParams.DirectionsLengthUnits = GetstringToesriUnits(cboRouteDirectionsLengthUnits.Text)
routeParams.DirectionsTimeAttributeName = cboRouteDirectionsTimeAttribute.Text
End If
End Sub
''' <summary>
''' Make frames Enabled
''' </summary>
Private Sub MakeFramesEnabled(ByVal solverParams As NAServerSolverParams)
fraINARouteSolver.Enabled = (Not (TryCast(solverParams, NAServerRouteParams)) Is Nothing)
fraINAServerRouteParams.Enabled = (Not (TryCast(solverParams, NAServerRouteParams)) Is Nothing)
fraINASolverSettings.Enabled = (Not (TryCast(solverParams, NAServerRouteParams)) Is Nothing)
End Sub
''' <summary>
''' Load form
''' </summary>
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
cboUturnPolicy.Items.Add("Nowhere")
cboUturnPolicy.Items.Add("Everywhere")
cboUturnPolicy.Items.Add("Only at Dead Ends")
cboSnapToleranceUnits.Items.Add("Unknown Units")
cboSnapToleranceUnits.Items.Add("Inches")
cboSnapToleranceUnits.Items.Add("Points")
cboSnapToleranceUnits.Items.Add("Feet")
cboSnapToleranceUnits.Items.Add("Yards")
cboSnapToleranceUnits.Items.Add("Miles")
cboSnapToleranceUnits.Items.Add("Nautical Miles")
cboSnapToleranceUnits.Items.Add("Millimeters")
cboSnapToleranceUnits.Items.Add("Centimeters")
cboSnapToleranceUnits.Items.Add("Meters")
cboSnapToleranceUnits.Items.Add("Kilometers")
cboSnapToleranceUnits.Items.Add("DecimalDegrees")
cboSnapToleranceUnits.Items.Add("Decimeters")
' Route
cboRouteOutputLines.Items.Add("None")
cboRouteOutputLines.Items.Add("Straight Line")
cboRouteOutputLines.Items.Add("True Shape")
cboRouteOutputLines.Items.Add("True Shape With Ms")
cboRouteDirectionsLengthUnits.Items.Add("Feet")
cboRouteDirectionsLengthUnits.Items.Add("Yards")
cboRouteDirectionsLengthUnits.Items.Add("Miles")
cboRouteDirectionsLengthUnits.Items.Add("Meters")
cboRouteDirectionsLengthUnits.Items.Add("Kilometers")
ConnectToWebService()
GetNetworkAnalysisLayers()
Catch exception As Exception
MessageBox.Show(exception.Message, "An error has occurred")
End Try
End Sub
''' <summary>
''' Get NAServer Object from the web service
''' </summary>
Private Sub ConnectToWebService()
m_naServer = Nothing
' Get NAServer
m_naServer = New SanFrancisco_NAServer()
If Not m_naServer Is Nothing Then
Return
End If
Throw (New System.Exception("Could not find the web service"))
End Sub
''' <summary>
''' This function shows how to populate stop locations using two different options:
''' 1) From Record Set using a Point Feature Class - Uncommented
''' 2) From an Array of PropertySets - Commented out
''' Uncomment the option, you would like to use
''' </summary>
Private Sub LoadLocations(ByVal solverParams As NAServerSolverParams)
' Set first point
Dim propSets As PropertySet() = New PropertySet(1) {}
propSets(0) = CreateLocationPropertySet("Stop 1", "-122.49024904900", "37.74811940430", Nothing)
propSets(1) = CreateLocationPropertySet("Stop 2", "-122.43083365400", "37.75396354490", Nothing)
Dim routeParams As NAServerRouteParams = TryCast(solverParams, NAServerRouteParams)
Dim stopsPropSets As NAServerPropertySets = New NAServerPropertySets()
stopsPropSets.PropertySets = propSets
routeParams.Stops = stopsPropSets
End Sub
''' <summary>
''' Create a property set for NALocation
''' </summary>
Private Function CreateLocationPropertySet(ByVal name As String, ByVal X As String, ByVal Y As String, ByVal sr As SpatialReference) As PropertySet
Dim propSet As PropertySet = New PropertySet()
propSet.PropertyArray = CreateLocationPropertyArray(name, X, Y, sr)
Return propSet
End Function
''' <summary>
''' Create a property location array
''' </summary>
Private Function CreateLocationPropertyArray(ByVal name As String, ByVal X As String, ByVal Y As String, ByVal sr As SpatialReference) As PropertySetProperty()
Dim propSetProperty As PropertySetProperty()
If sr Is Nothing Then
propSetProperty = New PropertySetProperty(2) {}
Else
propSetProperty = New PropertySetProperty(3) {}
End If
propSetProperty(0) = New PropertySetProperty()
propSetProperty(0).Key = "NAME"
propSetProperty(0).Value = name
propSetProperty(1) = New PropertySetProperty()
propSetProperty(1).Key = "X"
propSetProperty(1).Value = X
propSetProperty(2) = New PropertySetProperty()
propSetProperty(2).Key = "Y"
propSetProperty(2).Value = Y
If Not sr Is Nothing Then
propSetProperty(3) = New PropertySetProperty()
propSetProperty(3).Key = "SpatialReference"
propSetProperty(3).Value = sr
End If
Return propSetProperty
End Function
''' <summary>
''' Output Results Messages, Map, Route Geometries, Directions
''' </summary>
Private Sub OutputResults(ByVal solverParams As NAServerSolverParams, ByVal solverResults As NAServerSolverResults)
Dim messagesSolverResults As String = ""
' Output Solve messages
Dim gpMessages As GPMessages = solverResults.SolveMessages
Dim arrGPMessage As GPMessage() = gpMessages.GPMessages1
If Not arrGPMessage Is Nothing Then
Dim i As Integer = 0
Do While i < arrGPMessage.GetLength(0)
Dim gpMessage As GPMessage = arrGPMessage(i)
messagesSolverResults &= Constants.vbLf + gpMessage.MessageDesc
i += 1
Loop
End If
' Uncomment the following section to output the total impedance of each route in a MessageBox
'Dim routeSolverResults As NAServerRouteResults = TryCast(solverResults, NAServerRouteResults)
'If Not routeSolverResults Is Nothing Then
' Dim i As Integer = 0
' Do While i < routeSolverResults.TotalImpedances.GetLength(0)
' messagesSolverResults &= Constants.vbLf & "Total Impedance for Route[" & (i + 1) & "] = "
' messagesSolverResults &= routeSolverResults.TotalImpedances(i).ToString("f")
' messagesSolverResults &= " " & ExtractImpedanceUnits(cboImpedance.Text).ToLower()
' i += 1
' Loop
'End If
' Show a message box displaying both solver messages and total_impedance per route
If messagesSolverResults.Length > 0 Then
MessageBox.Show(messagesSolverResults, "NAServer Route Results")
End If
'Output Map
pictureBox.Image = Nothing
If solverParams.ReturnMap Then
pictureBox.Image = System.Drawing.Image.FromStream(New System.IO.MemoryStream(solverResults.MapImage.ImageData))
End If
pictureBox.Refresh()
If (Not (TryCast(solverParams, NAServerRouteParams)) Is Nothing) AndAlso (Not (TryCast(solverResults, NAServerRouteResults)) Is Nothing) Then
OutputRouteResults(TryCast(solverParams, NAServerRouteParams), TryCast(solverResults, NAServerRouteResults))
End If
End Sub
''' <summary>
''' Output Route Results according to the NAServerRouteParams
''' </summary>
Private Sub OutputRouteResults(ByVal solverParams As NAServerRouteParams, ByVal solverResults As NAServerRouteResults)
' Return Directions if generated
If solverParams.ReturnDirections Then
AddTabAndControl(Me.tabReturnDirections, Me.treeViewDirections)
OutputDirections(solverResults.Directions)
Else
Me.tabCtrlOutput.TabPages.Remove(Me.tabReturnDirections)
End If
' Return Route Geometries is generated
If solverParams.ReturnRouteGeometries Then
AddTabAndControl(Me.tabReturnRouteGeometry, Me.treeViewRouteGeometry)
OutputPolylines(solverResults.RouteGeometries)
Else
Me.tabCtrlOutput.TabPages.Remove(Me.tabReturnRouteGeometry)
End If
' Return Route Features as RecordSet
If solverParams.ReturnRoutes Then
AddTabAndControl(Me.tabReturnRouteFeatures, Me.dataGridRouteFeatures)
OutputRecSetToDataGrid(solverResults.Routes, Me.dataGridRouteFeatures)
Else
Me.tabCtrlOutput.TabPages.Remove(Me.tabReturnRouteFeatures)
End If
' Return Stop Features as RecordSet
If solverParams.ReturnStops Then
AddTabAndControl(Me.tabReturnStopsFeatures, Me.dataGridStopFeatures)
OutputRecSetToDataGrid(solverResults.Stops, dataGridStopFeatures)
Else
Me.tabCtrlOutput.TabPages.Remove(Me.tabReturnStopsFeatures)
End If
' Return Barrier Features as RecordSet
If solverParams.ReturnBarriers Then
AddTabAndControl(Me.tabReturnBarrierFeatures, Me.dataGridBarrierFeatures)
OutputRecSetToDataGrid(solverResults.Barriers, dataGridBarrierFeatures)
Else
Me.tabCtrlOutput.TabPages.Remove(Me.tabReturnBarrierFeatures)
End If
' Make TabControlOutput enable
tabCtrlOutput.Enabled = True
End Sub
''' <summary>
''' Output Route Geometries (Polylines) in a TreeView control
''' </summary>
Private Sub OutputPolylines(ByVal polylines As Polyline())
If polylines Is Nothing Then
treeViewRouteGeometry.Nodes.Clear()
Dim newNode As TreeNode = New TreeNode("Route Geometry not generated")
treeViewRouteGeometry.Nodes.Add(newNode)
Return
End If
' Suppress repainting the TreeView until all the objects have been created.
treeViewRouteGeometry.BeginUpdate()
' Clear the TreeView each time the method is called.
treeViewRouteGeometry.Nodes.Clear()
Dim i As Integer = 0
Do While i < polylines.GetLength(0)
Dim polylineN As PolylineN = TryCast(polylines(i), PolylineN)
If Not polylineN Is Nothing Then
Dim newNode As TreeNode = New TreeNode("Polyline Length for Route [" & (i + 1) & "] = " & polylineN.PathArray.GetLength(0).ToString())
treeViewRouteGeometry.Nodes.Add(newNode)
Dim j As Integer = 0
Do While j < polylineN.PathArray.GetLength(0)
Dim points As WebService.Point() = polylineN.PathArray(j).PointArray
Dim k As Integer = 0
Do While k < points.GetLength(0)
Dim point As PointN = TryCast(points(k), PointN)
If Not point Is Nothing Then
treeViewRouteGeometry.Nodes(i).Nodes.Add(New TreeNode("Point [" & (k + 1) & "]: " & point.X & "," & point.Y))
End If
k += 1
Loop
j += 1
Loop
End If
i += 1
Loop
' Check if Route Geometry has been generated
If polylines.Length = 0 Then
Dim newNode As TreeNode = New TreeNode("Route Geometry not generated")
treeViewRouteGeometry.Nodes.Add(newNode)
End If
' Begin repainting the TreeView.
treeViewRouteGeometry.ExpandAll()
treeViewRouteGeometry.EndUpdate()
End Sub
''' <summary>
''' Output Directions if a TreeView control
''' </summary>
Private Sub OutputDirections(ByVal serverDirections As NAStreetDirections())
If serverDirections Is Nothing Then
treeViewDirections.Nodes.Clear()
Dim newNode As TreeNode = New TreeNode("Directions not generated")
treeViewDirections.Nodes.Add(newNode)
Return
End If
' Suppress repainting the TreeView until all the objects have been created.
treeViewDirections.BeginUpdate()
' Clear the TreeView each time the method is called.
treeViewDirections.Nodes.Clear()
Dim i As Integer = serverDirections.GetLowerBound(0)
Do While i <= serverDirections.GetUpperBound(0)
' get Directions from the ith route
Dim directions As NAStreetDirections
directions = serverDirections(i)
' get Summary (Total Distance and Time)
Dim direction As NAStreetDirection = directions.Summary
Dim totallength As String = Nothing, totaltime As String = Nothing
Dim SummaryStrings As String() = direction.Strings
Dim k As Integer = SummaryStrings.GetLowerBound(0)
Do While k < SummaryStrings.GetUpperBound(0)
If direction.StringTypes(k) = esriDirectionsStringType.esriDSTLength Then
totallength = SummaryStrings(k)
End If
If direction.StringTypes(k) = esriDirectionsStringType.esriDSTTime Then
totaltime = SummaryStrings(k)
End If
k += 1
Loop
' Add a Top a Node with the Route number and Total Distance and Total Time
Dim newNode As TreeNode = New TreeNode("Directions for Route [" & (i + 1) & "] - Total Distance: " & totallength & " Total Time: " & totaltime)
treeViewDirections.Nodes.Add(newNode)
' Then add a node for each step-by-step directions
Dim StreetDirections As NAStreetDirection() = directions.Directions
Dim directionIndex As Integer = StreetDirections.GetLowerBound(0)
Do While directionIndex <= StreetDirections.GetUpperBound(0)
Dim streetDirection As NAStreetDirection = StreetDirections(directionIndex)
Dim StringStreetDirection As String() = streetDirection.Strings
Dim stringIndex As Integer = StringStreetDirection.GetLowerBound(0)
Do While stringIndex <= StringStreetDirection.GetUpperBound(0)
If streetDirection.StringTypes(stringIndex) = esriDirectionsStringType.esriDSTGeneral OrElse streetDirection.StringTypes(stringIndex) = esriDirectionsStringType.esriDSTDepart OrElse streetDirection.StringTypes(stringIndex) = esriDirectionsStringType.esriDSTArrive Then
treeViewDirections.Nodes(i).Nodes.Add(New TreeNode(StringStreetDirection(stringIndex)))
End If
stringIndex += 1
Loop
directionIndex += 1
Loop
i += 1
Loop
' Check if Directions have been generated
If serverDirections.Length = 0 Then
Dim newNode As TreeNode = New TreeNode("Directions not generated")
treeViewDirections.Nodes.Add(newNode)
End If
' Begin repainting the TreeView.
treeViewDirections.ExpandAll()
treeViewDirections.EndUpdate()
End Sub
''' <summary>
''' Generic function to output RecordSet (Stops, Barriers, or Routes) in a DataDrid Control
''' </summary>
Private Sub OutputRecSetToDataGrid(ByVal recSet As RecordSet, ByVal outDataGrid As System.Windows.Forms.DataGrid)
Dim fields As Fields = recSet.Fields
Dim fldArray As Field() = fields.FieldArray
Dim dataSet As DataSet = New DataSet("dataSet")
Dim dataTable As DataTable = New DataTable("Results")
dataSet.Tables.Add(dataTable)
Dim dataColumn As DataColumn = Nothing
Dim f As Integer = 0
Do While f < fldArray.Length
dataColumn = New DataColumn(fldArray(f).Name)
dataTable.Columns.Add(dataColumn)
f += 1
Loop
' Populate DataGrid rows by RecordSet
Dim newDataRow As DataRow
Dim records As Record() = recSet.Records
Dim record As Record = Nothing
Dim values As Object() = Nothing
Dim j As Integer = 0
Do While j < records.Length
newDataRow = dataTable.NewRow()
record = records(j)
values = record.Values
Dim l As Integer = 0
Do While l < values.Length
If Not values(l) Is Nothing Then
newDataRow(l) = values(l).ToString()
End If
l += 1
Loop
dataTable.Rows.Add(newDataRow)
j += 1
Loop
outDataGrid.SetDataBinding(dataSet, "Results")
outDataGrid.Visible = True
End Sub
''' <summary>
''' Enable the startTime control
''' </summary>
Private Sub chkUseStartTime_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles chkUseStartTime.CheckedChanged
If chkUseStartTime.Checked = True Then
txtStartTime.Enabled = True
Else
txtStartTime.Enabled = False
End If
End Sub
''' <summary>
''' Helper function to convert a string unit (e.g Miles) to an esriNetworkAnalystUnits (e.g esriNAUMiles)
''' </summary>
Private Function GetstringToesriUnits(ByVal stresriUnits As String) As esriNetworkAttributeUnits
Select Case stresriUnits.ToLower()
Case "inches"
Return esriNetworkAttributeUnits.esriNAUInches
Case "feet"
Return esriNetworkAttributeUnits.esriNAUFeet
Case "yards"
Return esriNetworkAttributeUnits.esriNAUYards
Case "miles"
Return esriNetworkAttributeUnits.esriNAUMiles
Case "nautical miles"
Return esriNetworkAttributeUnits.esriNAUNauticalMiles
Case "millimeters"
Return esriNetworkAttributeUnits.esriNAUMillimeters
Case "centimeters"
Return esriNetworkAttributeUnits.esriNAUCentimeters
Case "meters"
Return esriNetworkAttributeUnits.esriNAUMeters
Case "kilometers"
Return esriNetworkAttributeUnits.esriNAUKilometers
Case "decimal degrees"
Return esriNetworkAttributeUnits.esriNAUDecimalDegrees
Case "decimeters"
Return esriNetworkAttributeUnits.esriNAUDecimeters
Case "seconds"
Return esriNetworkAttributeUnits.esriNAUSeconds
Case "minutes"
Return esriNetworkAttributeUnits.esriNAUMinutes
Case "hours"
Return esriNetworkAttributeUnits.esriNAUHours
Case "days"
Return esriNetworkAttributeUnits.esriNAUDays
Case "unknown"
Return esriNetworkAttributeUnits.esriNAUUnknown
Case Else
Return esriNetworkAttributeUnits.esriNAUUnknown
End Select
End Function
''' <summary>
''' Helper function to extract the impedance name in a string like "impedancename (impedanceunits)"
''' </summary>
Private Function ExtractImpedanceName(ByVal impedanceUnits As String) As String
Dim firstIndex As Integer = impedanceUnits.LastIndexOf(" ")
Dim lastIndex As Integer = impedanceUnits.Length
Return impedanceUnits.Remove(firstIndex, (lastIndex - firstIndex))
End Function
''' <summary>
''' Helper function to extract the impedance unit in a string like "impedancename (impedanceunits)"
''' </summary>
Private Function ExtractImpedanceUnits(ByVal impedanceUnits As String) As String
Dim firstIndex As Integer = impedanceUnits.LastIndexOf("(") + 1
Dim lastIndex As Integer = impedanceUnits.LastIndexOf(")")
Return impedanceUnits.Substring(firstIndex, (lastIndex - firstIndex))
End Function
''' <summary>
''' Enable chkPreserveFirst and chkPreserveFirst controls
''' </summary>
Private Sub chkBestOrder_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles chkBestOrder.CheckedChanged
If chkBestOrder.Checked = True Then
Me.chkPreserveFirst.Enabled = True
Me.chkPreserveLast.Enabled = True
Else
Me.chkPreserveFirst.Enabled = False
Me.chkPreserveLast.Enabled = False
End If
End Sub
''' <summary>
''' Hide tabs
''' </summary>
Private Sub HideTabs()
' remove tabs initially - There are added when the result is returned.
Me.tabCtrlOutput.TabPages.Remove(Me.tabReturnDirections)
Me.tabCtrlOutput.TabPages.Remove(Me.tabReturnStopsFeatures)
Me.tabCtrlOutput.TabPages.Remove(Me.tabReturnBarrierFeatures)
Me.tabCtrlOutput.TabPages.Remove(Me.tabReturnRouteGeometry)
Me.tabCtrlOutput.TabPages.Remove(Me.tabReturnRouteFeatures)
End Sub
''' <summary>
'// Add a tab page and a tab control
''' </summary>
Private Sub AddTabAndControl(ByVal tabPage As TabPage, ByVal controlToAdd As System.Windows.Forms.Control)
If (Not tabCtrlOutput.TabPages.Contains(tabPage)) Then
tabCtrlOutput.TabPages.Add(tabPage)
tabPage.Controls.Add(controlToAdd)
End If
End Sub
End Class
End Namespace