ThinkGeo.com    |     Documentation    |     Premium Support

Routes segments

 i want to store all of the vertices of the calculate route 


i used this method 



Collection<LineShape> seg1 = new Collection<LineShape>();


       Collection<Vertex> v = new Collection<Vertex>();


  seg1 = routingResult.Route.Lines;


         


                foreach (LineShape ln in seg1)


                {


                    midpoint1 = new PointShape(ln.Vertices.First<Vertex>());


               md1.Add(new PointShape(midpoint1.GetWellKnownBinary()));


}


but it has a problems  : it does not take every vertex


but i want all vertices of the calculated route




Thanks for your question! 
  
 A couple of issues I see with your current method of collecting points.  
 First, LineShapes can potentially have more than just two points. Consider a curved LineShape that could have many points making up the curve. 
  
 To help avoid getting duplicate points you might considered implementing a check to see if a point exists in your collection before adding it to your collection. This will be a bit slower but should allow you to then loop through all the available points. 
  
 Can you provide me any additional information about your end goal? A better understanding of your goal might help me to assist you.

 i don't get how to vertex has same coordinates the problem is i select vertex of the route then calculate their route with a point, the problem is in vertex collection it adds same points(gives no error) and in distance collection same distance is added but when that duplicate point in dictonary it gives error of same key added. and it skips that point 



foreach (PointShape p in md1)


               {


 


                   routingLayer.StartPoint = p;


                   routingLayer.EndPoint = g;


                   RoutingResult sp = routingEngine2.GetRoute(routingLayer.StartPoint, routingLayer.EndPoint);


                   distance = sp.Route.GetLength(GeographyUnit.DecimalDegree, DistanceUnit.Meter);


                   routingLayer.Routes.Clear();


                   rs.Features.Clear();


                   if (distances.Count == 0)


                   {


                       distances.Add(distance);


                       final.Add(distance, p);


                   


                     


                      


                   }


                   else if (distance == distances[index])


                   {


                      continue;


 


                   }


                   else


                   {


                       index++;


                       distances.Add(distance);


                       final.Add(distance, p);


         


                   }


because of this 
it skips a vetex which is more appropirate and select vertex next to it 
 
 
 
 
 



 kindly tell me am i doing a correct thing of saving routes and a point? because it gives error of "same item key added " thats why i add if else conditions?



Thanks for your patience. 

We worked up a sample application that can allow you to get the route as a single LineShape. This way you can easily loop through and get the vertices you need.



Thanks for your patience. 

We worked up a sample application that can allow you to get the route as a single LineShape. This way you can easily loop through and get the vertices you need.



Hi, 
  
 We did some changes to our product in latest version 6.0.150.0 or later.  Now the RoutingResult.Route just includes only one LineShape consisting of all the segments connected with header to end. 
  
 Thanks, 
 Johnny

 Hello,


 


sorry johnny i don't get you. i am using 6.0.5.9 version is this version includes that what you have said?


and kindly explain your reply



Hi,


If you download the Daily Build Development 6.0.150.0 version of the Map Suite Routing Edition from helpdesk.thinkgeo.com and include the new RoutingEdition.dll in your application you will now have the ability to get the RoutingResult.Route returned as a LineShape. This LineShape has a Vertices collection that you can loop through which is what you were attempting to do in your first post.


The 6.0.150.0 version is a Daily Build from today so it is the newest build available.



 thanks ryan u have already uploaded version 6.0.0.59 for me and it is wroking properly


 


if i am understng correctly 


i have t0 change this 


 RoutingResult routingResult = routingEngine.GetRoute(routingLayer.StartPoint, routingLayer.EndPoint);


to 


LineShape routingResult = routingEngine.GetRoute(routingLayer.StartPoint, routingLayer.EndPoint);



I believe this change was only implemented with the 6.0.150.0 version. I don't believe this will work with the 6.0.0.59 version you mentioned.

 


You can implement this using the following: 



LineShape routeLineShape = routingEngine.GetRoute(txtStartId.Text, txtEndId.Text).GetSingleLineRoute();

 



Just an update to my original post:


Starting with the 6.0.166.0 Development Daily Build you the following will return a LineShape



routingEngine.GetRoute(txtStartId.Text, txtEndId.Text).Route;