RouteMAP IMS 3.0 .NET API

Routing

With RouteMAP IMS you can find a route between two or more points using either the quickest or shortest method. You may also find an optimized route - a route with the minimum total distance possible over multiple stops.

To find a route, you will need two or more locations represented as the GeoPoint objects, highway preference, and knowledge of what kind of route you'd like to find: shortest, quickest or optimized.

The example code below shows how to find a route using the basic options. For additional options see the RoutingProblem object.

<%

// get the RoutingProblem object
var rProblem = Map.getRouting().createRoutingProblem();

// set routing stops array
var stops = new Array();
var rStop;

stops[0] = new GeoLocation( "Redlands, CA", 34.0528, -117.1531);
stops[1] = new GeoLocation( "Loma Linda, CA", 34.0484, -117.2629);
stops[2] = new GeoLocation( "San Bernardino, CA", 34.1214, -117.3046);
stops[3] = new GeoLocation( "Highland, CA", 34.1282, -117.2106);

// add routing stops
for(var i = 0; i < stops.length; i++)
{
    rStop = Server.CreateObject("RMIMS.RoutingStop");
    rStop.setStop(createPoint( stops[i].x, stops[i].y));
    rStop.setLabel(stops[i].label);
    rProblem.addStop(rStop);
}
	
rProblem.setHighwayPreference( 50);
rProblem.setWeight(rmShortest); // to find quickest use rmQuickest

rProblem.setOptimize( false); // no optimization

var Routing = Map.getRouting();
var RouteID = Routing.findRoute(rProblem, true, -1);

// show the route
Routing.setRoute( RouteID);
var r = Routing.getDrivingDirections( RouteID).getExtent();
Map.setExtent( inflateRect(r, 10)); //increase borders

// print driving directions
var DDirs = Routing.getDrivingDirections( RouteID);
var DSeg;
	
Response.Write( "<p>"+DDirs.getStartText()+"<br>\n");
Response.Write( DDirs.getFinishText()+"<br>\n");
Response.Write( DDirs.getTotalText()+"<p>\n");

for( var i =0; i < DDirs.getSegmentCount(); i++)
{
    DSeg = DDirs.getSegment( i);
    Response.Write( (i+1)+". " + DSeg.getText() + "<br>\n");
    // if there is TimeLengthText
    if( DSeg.getSegmentType() != rmArrive && DSeg.getSegmentType() != rmDepart) 
        Response.Write( DSeg.getTimeLengthText() + "<br>\n");
}	

function createPoint(x, y)
{
    var pt = Server.CreateObject("RMIMS.GeoPoint");
    pt.x = x;
    pt.y = y;

    return pt;
}

function GeoLocation( label, lat, lon)
{
    var pt = Map.getProjection().project( lat, lon);
    this.label = label;
    this.x = pt.x;
    this.y = pt.y;
}

function inflateRect(r, percVal)
{
    var dx = ((r.right - r.left) * percVal) / 100.0;
    var dy = ((r.top - r.bottom) * percVal) / 100.0;

    r.left   -= dx;
    r.top    += dy;
    r.right  += dx;
    r.bottom -= dy;

    return r;
}

%>

<img src="<%= Map.getMapImageURL(Map.getImageWidth(), Map.getImageHeight(), rmDefault)%>"
width="<%=Map.getImageWidth()%>", height="<%=Map.getImageHeight()%>">

VBScript version

Output

Advanced version of the findRoute function JScript / VBScript.


Trip Planning Mode

Trip planning mode allows you to set several useful parameters such as start and end of a driving day, driving time between rests, rest duration, etc.
The example below shows how to use the trip planning feature. We recommend reviewing the RoutingProblem description first.

<%
    var Map = OpenMap();
    
    // get the RoutingProblem object
    var rProblem = Map.getRouting().createRoutingProblem();

    // set routing stops array
    var stops = new Array();
    
    stops[0] = new GeoLocation ("Redlands, CA", 34.0528, -117.1531);
    stops[1] = new GeoLocation ("Redlands, CO", 39.0854, -108.6515);

    var rStop;
    // add routing stops
    for(var i = 0; i < stops.length; i++)
    {
        rStop = Server.CreateObject("RMIMS.RoutingStop");
        rStop.setStop(createPoint( stops[i].x, stops[i].y));
        rStop.setLabel(stops[i].label);
        rProblem.addStop(rStop);
    }
	
    rProblem.setHighwayPreference( 50);
    rProblem.setWeight(rmShortest); // to find quickest use rmQuickest

    rProblem.setOptimize( false); // no optimization

    // Trip planning *****************************************************************

    rProblem.setTripStart( createTime( 8, 0, 0));
    rProblem.setDayDriveStart( createTimeSpan( 0, 8, 30, 0));
    rProblem.setDayDriveEnd( createTimeSpan( 0, 17, 0, 0));
    rProblem.setDriveBetweenRest( createTimeSpan( 0, 3, 0, 0));
    rProblem.setRestDuration( createTimeSpan( 0, 0, 30, 0));
    rProblem.setDriveFlexibility( createTimeSpan( 0, 0, 30, 0));
    rProblem.enableRestBreaks( true);
    rProblem.enableTripPlanning( true);
    
    //********************************************************************************    

    var routing = Map.getRouting();
    
    var RouteID = routing.findRoute(rProblem, true, -1);

    // show the route
    routing.setRoute( RouteID);
    var r = routing.getDrivingDirections( RouteID).getExtent();
    Map.setExtent( inflateRect(r, 10)); // increase borders

    // print driving directions
    var DDirs = routing.getDrivingDirections( RouteID);
    var DSeg;
	
    Response.Write( "<p>"+DDirs.getStartText()+"<br>\n");
    Response.Write( DDirs.getFinishText()+"<br>\n");
    Response.Write( DDirs.getTotalText()+"<p>\n");

    for( i = 0; i < DDirs.getSegmentCount(); i++)
    {
        DSeg = DDirs.getSegment( i);
        Response.Write( (i+1)+". " + DSeg.getText() + "<br>\n");
        // if there is TimeLengthText
        if(DSeg.getSegmentType() != rmArrive &&
           DSeg.getSegmentType() != rmDepart)
        {
            Response.Write( DSeg.getTimeLengthText() + "<br>\n");
        }
    }	

    function createTimeSpan( days, hours, minutes, seconds)
    {
        var ts = Server.CreateObject( "RMIMS.TimeSpan");
        ts.setDays( days);
        ts.setHours( hours);
        ts.setMinutes( minutes);
        ts.setSeconds( seconds);
        
        return( ts);
    }
    
    function createTime( hours, minutes, seconds)
    {
        var t = Server.CreateObject( "RMIMS.Time");
        t.setHours( hours);
        t.setMinutes( minutes);
        t.setSeconds( seconds);
        return( t);        
    }
    
    function inflateRect(r, percVal)
    {
        var dx = ((r.right - r.left) * percVal) / 100.0;
        var dy = ((r.top - r.bottom) * percVal) / 100.0;

        r.left   -= dx;
        r.top    += dy;
        r.right  += dx;
        r.bottom -= dy;

        return r;
    }

    function createPoint(x, y)
    {
        var pt = Server.CreateObject("RMIMS.GeoPoint");
        pt.x = x;
        pt.y = y;

        return pt;
    }
    
%>

<img src="<%= Map.getMapImageURL(Map.getImageWidth(), Map.getImageHeight(), rmDefault)%>"
width="<%=Map.getImageWidth()%>" height="<%=Map.getImageHeight()%>">

VBScript version | Output