====== Source Code DesktopEditionSample TravelingSalesmanProblem CS 100325.zip ======
====Form1.cs====
using System;
using System;
using System.Diagnostics;
using System.Globalization;
using System.Windows.Forms;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.DesktopEdition;
using ThinkGeo.MapSuite.Routing;
namespace TravelingSalesmanProblem
{
public partial class Form1 : Form
{
private static RoutingEngine routingEngine;
private static RoutingSource routingSource;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
LayerOverlay overlay = (LayerOverlay)winformsMap1.Overlays["RoutingOverlay"];
RoutingLayer routingLayer = (RoutingLayer)overlay.Layers["RoutingLayer"];
Stopwatch watch = new Stopwatch();
watch.Start();
//New API for GetRouteViaVisitstops wher you can have a start and an end point.
RoutingResult routingResult = routingEngine.GetRoute(routingLayer.StartPoint, routingLayer.EndPoint, routingLayer.StopPoints, int.Parse(txtIterations.Text));
watch.Stop();
// Render the route
routingLayer.Routes.Clear();
routingLayer.Routes.Add(routingResult.Route);
winformsMap1.Refresh(winformsMap1.Overlays["RoutingOverlay"]);
routingLayer.StopPoints.Clear();
foreach (PointShape stop in routingResult.OrderedStops)
{
routingLayer.StopPoints.Add(stop);
}
routingLayer.ShowStopOrder = true;
txtTimeUsed.Text = watch.ElapsedMilliseconds.ToString(CultureInfo.InvariantCulture) + " ms";
txtDistance.Text = routingResult.Distance.ToString(CultureInfo.InvariantCulture);
winformsMap1.Refresh(overlay);
}
private void Form1_Load(object sender, EventArgs e)
{
ShapeFileFeatureSource featureSource = new ShapeFileFeatureSource(@"..\..\data\Austinstreets.shp");
routingSource = new RtgRoutingSource(@"..\..\data\Austinstreets.rtg");
routingEngine = new RoutingEngine(routingSource, new AStarRoutingAlgorithm(), featureSource);
RenderMap();
}
private void RenderMap()
{
winformsMap1.MapUnit = GeographyUnit.DecimalDegree;
winformsMap1.BackgroundOverlay.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#e6e5d1"));
winformsMap1.CurrentExtent = new RectangleShape(-97.7319606824951, 30.2922109418945, -97.7002033277588, 30.269551640136);
WorldMapKitWmsDesktopOverlay worldMapKitsOverlay = new WorldMapKitWmsDesktopOverlay();
winformsMap1.Overlays.Add(worldMapKitsOverlay);
RoutingLayer routingLayer = new RoutingLayer();
LayerOverlay routingOverlay = new LayerOverlay();
winformsMap1.Overlays.Add("RoutingOverlay", routingOverlay);
routingOverlay.Layers.Add("RoutingLayer", routingLayer);
string[] startCoordinates = txtStart.Text.Split(',');
routingLayer.StartPoint = new PointShape(double.Parse(startCoordinates[0], CultureInfo.InvariantCulture), double.Parse(startCoordinates[1], CultureInfo.InvariantCulture));
string[] endCoordinates = EndTxt.Text.Split(',');
routingLayer.EndPoint = new PointShape(double.Parse(endCoordinates[0], CultureInfo.InvariantCulture), double.Parse(endCoordinates[1], CultureInfo.InvariantCulture));
foreach (object item in lsbPoints.Items)
{
string[] coordinate = item.ToString().Split(',');
PointShape pointNeedVisit = new PointShape(double.Parse(coordinate[0], CultureInfo.InvariantCulture), double.Parse(coordinate[1], CultureInfo.InvariantCulture));
routingLayer.StopPoints.Add(pointNeedVisit);
}
routingLayer.ShowStopOrder = false;
InMemoryFeatureLayer routingExtentLayer = new InMemoryFeatureLayer();
routingExtentLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new AreaStyle(new GeoPen(GeoColor.SimpleColors.Green));
routingExtentLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
routingExtentLayer.InternalFeatures.Add(new Feature(new RectangleShape(-97.815409, 30.369949, -97.657999, 30.217922)));
routingOverlay.Layers.Add("RoutingExtentLayer", routingExtentLayer);
winformsMap1.Refresh();
}
}
}
====Program.cs====
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace TravelingSalesmanProblem
{
static class Program
{
///
/// The main entry point for the application.
///
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}