Page 1 of 1

Alternative routes together on one map

Posted: Thu Jan 14, 2016 12:26 pm
by VPlachy
Hello,
I need help with counting and displaying several alternative routes together on one map.
This feature is available?
What should I set to work properly?
It is a simple model of how to do it?

Thank you.
Vladimir Plachy

Re: Alternative routes together on one map

Posted: Fri Jan 15, 2016 3:27 pm
by Bernd Welter
Hello Vladimir,

basically the computation of alternative routes is based on the following principles:
  • in a first step a regular route is calculated, let's call it the VERSION_0.

    Code: Select all

    Route route = svcRoute.calculateRoute(arrWPD, arrRoutingOptions, null, resultListOptions, callerContext);
  • The output of the call is a route object including a so-called binaryPathDescription.
  • Based on the binaryPath you create an ExceptionPath together with a malus that suits your requirements, e.g. 500 if you want to avoid each VERSION_0 segment with a malus of 500%.
  • in a second call you use the same routing parametrization (profile/snippet encapsulated in the CallerCOntext, routing options as explicit parameters if necessary) but you add the ExceptionPath as an additional input information.
Maybe the following source in c# is a quick sample:

Code: Select all

Route route = svcRoute.calculateRoute(arrWPD, arrRoutingOption, null, rlo, cc);
ExceptionPath[] arrExPath = new ExceptionPath[] {
         new ExceptionPath() {
                   binaryPathDesc = route.binaryPathDesc,
            relMalus = 500
         }
};
Route alternativeRoute = svcRoute.calculateRoute(arrWPD, arrRoutingOption, arrExPath, rlo, cc);
So whenever you want to compute the alternative #N you have to compute the VERSION[0], VERSION[1], ... VERSION[N-1] and provide it in the call of VERSION[N].

There is also a shortcut available:
There is a special RoutingOption avalable for that scenario. So if you want to compute the VERSION[2] with just one single call you may use it:

Code: Select all

int malus = 500;
int indexALT = 2;
RoutingOption alt = new RoutingOption() {
  parameter = RoutingParameter.EXPERT_OPTIONS,
  value = "ALT|" + malus + "|" + indexALT
};
Be aware that the proper ExceptionPath mechanisms offers both an absolute malus and a relative malus..

Here are some example screenshots:
urban example
urban example
regional example
regional example
So quite often especially start and final part of a route do not change that much.

Best regards
Bernd

PS: my description is based on calcRoute but also works with calcExtendedRoute and the other, more complex variants.

Re: Alternative routes together on one map

Posted: Tue Jan 26, 2016 1:18 pm
by VPlachy
Hello Bernd,
Thank you for your help.

Vladimir

Re: Alternative routes together on one map

Posted: Mon Feb 06, 2017 2:26 pm
by g.fiume
Bernd Welter wrote:Hello Vladimir,

basically the computation of alternative routes is based on the following principles:
  • in a first step a regular route is calculated, let's call it the VERSION_0.

    Code: Select all

    Route route = svcRoute.calculateRoute(arrWPD, arrRoutingOptions, null, resultListOptions, callerContext);
  • The output of the call is a route object including a so-called binaryPathDescription.
  • Based on the binaryPath you create an ExceptionPath together with a malus that suits your requirements, e.g. 500 if you want to avoid each VERSION_0 segment with a malus of 500%.
  • in a second call you use the same routing parametrization (profile/snippet encapsulated in the CallerCOntext, routing options as explicit parameters if necessary) but you add the ExceptionPath as an additional input information.
Hi, I've tryed to use a similar method, but I do not like the given results becouse if I assign a malus to a route the system creates a completely different alternative without taking into account that a better choice could be have a part of route in common.
As you can see in the image xroute gives me a route totally different from the first one.
cattura2_Ink_LI.jpg
Maybe I've to change the relMalus value but I'm not able to understand the meaning of the different values. Change the relMalus value from 2501 to 2000 doesn't make any difference.

Thank you

Re: Alternative routes together on one map

Posted: Tue Feb 07, 2017 4:38 pm
by Bernd Welter
Routing means (in rough terms):
determine the sequence of segments that successfully connects waypoint A(x0,y0) to waypoint B(x1,y1) and produces the minimum aggregated "cost".
The costs of a single segment are influenced by various factors, e.g.
  • length of a segment
  • driving time (derived by network class via speed values)
  • percentage malus due to road category (AVOID_TOLLROADS, AVOID_...)
  • other malus values (e.g. based on ExceptionPath)
Now setting the ALTERNATIVE ROUTE MALUS means that all the succeeding alternatives will "malify" the segments used in previous ALTERNATIVES. I attached some screenshots, maybe they can help you to understand the approaches,
MALUS = 25, small impact, some initial parts of the alternatives share segments
MALUS = 25, small impact, some initial parts of the alternatives share segments
MALUS = 2500, forces the (n+1) alternative to leave the (0),(1), ..(n) paths. so almost NO overlapping but possible (e.g. green + orange)
MALUS = 2500, forces the (n+1) alternative to leave the (0),(1), ..(n) paths. so almost NO overlapping but possible (e.g. green + orange)
MALUS = 2501, segments of a previous call are forbidden which could cause an error due to "no valid path found".
MALUS = 2501, segments of a previous call are forbidden which could cause an error due to "no valid path found".
If not let me know!

Regards Bernd

Re: Alternative routes together on one map

Posted: Fri Feb 10, 2017 9:51 am
by g.fiume
Bernd Welter wrote:Routing means (in rough terms):
determine the sequence of segments that successfully connects waypoint A(x0,y0) to waypoint B(x1,y1) and produces the minimum aggregated "cost".
The costs of a single segment are influenced by various factors, e.g.
  • length of a segment
  • driving time (derived by network class via speed values)
  • percentage malus due to road category (AVOID_TOLLROADS, AVOID_...)
  • other malus values (e.g. based on ExceptionPath)
Now setting the ALTERNATIVE ROUTE MALUS means that all the succeeding alternatives will "malify" the segments used in previous ALTERNATIVES. I attached some screenshots, maybe they can help you to understand the approaches,
alt25.PNG
alt2500.PNG
alt2501.PNG
If not let me know!

Regards Bernd
Thank you very much. With your help my routes are improving.