ThinkGeo.com    |     Documentation    |     Premium Support

Travelling Salesman Problem: End the optimised route on the last point

Hi guys,


Instead of returning a closed path that goes back to the origin (start point), is it possible to leave it open and end it on the last point of the list of stop points? Eg. O is the start point and A, B, C and D are the stop points. Currently, the returned well known text draws a closed path, say O->B->D->A->C->O. We need it to draw a path O->B->D->A->C and leave out the segment C->O.


Thanks,


Nirish



 Hi Nirish,


You can get that follow below steps:


1. Add a new method used in the sample:


private RectangleShape GenerateMiniBoundingBox(PointShape pointShape)
        {
            double tolerance = 1e-3;
            RectangleShape bbox = new RectangleShape();
            double miniTolerance = tolerance / 2;
            bbox.UpperLeftPoint.X = pointShape.X - miniTolerance;
            bbox.UpperLeftPoint.Y = pointShape.Y + miniTolerance;
            bbox.LowerRightPoint.X = pointShape.X + miniTolerance;
            bbox.LowerRightPoint.Y = pointShape.Y - miniTolerance;

            return bbox;
        }


2. Add some code below in the method btnFindBestRoute_Click of that sample:


private void btnFindBestRoute_Click(object sender, EventArgs e)
        {
            ........
            // Render the route
            routingLayer.Routes.Clear();

            int count = routingResult.VisitSequence.Count;
            PointShape lastPointShape = routingResult.VisitSequence[count - 1];
            RectangleShape rectangleShape = GenerateMiniBoundingBox(lastPointShape);

            int index = routingResult.Route.Lines.Count-1; 
            while (!routingResult.Route.Lines[index].Crosses(rectangleShape))
            {
                routingResult.Route.Lines.RemoveAt(index);
                index--;
            };
            routingResult.Route.Lines.RemoveAt(index);

            routingLayer.Routes.Add(routingResult.Route);
            .........
        }


Any questions please let us know.


Thanks,


Johnny



Thanks Johnny! :)

By the way, would this feature be included in the next build of the routing extension? It might speed up the optimisation process if the route is not looped back to the origin.

Nirish, 
  
 Sure, a new input parameter will be added to allow us to choose whether the path goes back to the origin in next release. 
  
 Also, we have added a new API with fixed start and end points for Travelling Salesman Problem and you can get this feature from latest package with version 3.1.433.0 or later. 
  
 Thanks, 
  
 Johnny