Showing posts with label Bing maps. Show all posts
Showing posts with label Bing maps. Show all posts

April 25, 2012

How to get to Norway.

Bing is cool! (at least the map part)

I loaded up Visual Studio and fixed a developer key at www.bingmapsportal.com and then I spent an hour hacking with the Bing web services for routes.

I wanted to create an easy function to get directions from coordinate A to coordinate B and I wanted it to be asynchronous. Oh, yeah, I didn't care much about performance or any other details, just wanted results. After all a hack is a hack.

So. This is how I did it. Step by step.

1. Get a key to bing maps.


3. Created a route class with the following code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MapTools.BingRouteReference;

namespace MapTools
{
public class Routes
{
public delegate void RouteCompletedHandler(object sender, RouteFinishedEventArgs e);

public event RouteCompletedHandler RouteCompleted;

public void Calculate(Location start, Location end)
{
BingRouteReference.RouteServiceClient routeService = new
                                            BingRouteReference.RouteServiceClient();

RouteRequest routeRequest = new RouteRequest();
routeRequest.Credentials = new Credentials();
routeRequest.Credentials.ApplicationId = "[put your map key here!]";

routeRequest.Waypoints = new Waypoint[2];
routeRequest.Waypoints[0] = new Waypoint();
routeRequest.Waypoints[1] = new Waypoint();
routeRequest.Waypoints[0].Location = start;
routeRequest.Waypoints[1].Location = end;

routeService.CalculateRouteCompleted += new 
                                         EventHandler<CalculateRouteCompletedEventArgs>      
                                         (routeService_CalculateRouteCompleted);

routeService.CalculateRouteAsync(routeRequest);
}

void routeService_CalculateRouteCompleted(object sender,  
                                        CalculateRouteCompletedEventArgs e)
{
StringBuilder stringBuilder = new StringBuilder();
foreach (var item in e.Result.Result.Legs.SelectMany(s=>s.Itinerary) )
{
stringBuilder.AppendLine(item.Text);
}
RouteFinishedEventArgs eventArgs = new RouteFinishedEventArgs()
                                     {RouteDescription = stringBuilder.ToString()};
RouteCompleted(this, eventArgs);
}
}
public class RouteFinishedEventArgs
{
public string RouteDescription { get; set; }
}
}

4. Created a client (winform is still quicker for trying out hacks):

Routes routes = new Routes();

public FormTester()
{
InitializeComponent();
routes.RouteCompleted += new 
                                Routes.RouteCompletedHandler(routes_RouteCompleted);
}
private void buttonExecute_Click(object sender, EventArgs e)
{
                        //Stockholm to Oslo
routes.Calculate(
                                new MapTools.BingRouteReference.Location() 
                                { Latitude = 59.32944, Longitude = 18.06861 },
                                new MapTools.BingRouteReference.Location() 
                                { Latitude = 59.94944, Longitude = 10.75639 });
}

void routes_RouteCompleted(object sender, RouteFinishedEventArgs e)
{
textBoxResults.Text = e.RouteDescription;
}

5. Sat back and enjoyed the directions:

<VirtualEarth:Action>Depart</VirtualEarth:Action> <VirtualEarth:RoadName>Gustav Adolfs Torg</VirtualEarth:RoadName> toward <VirtualEarth:Toward>Malmtorgsgatan</VirtualEarth:Toward>
<VirtualEarth:Action>Bear</VirtualEarth:Action> <VirtualEarth:TurnDir>right</VirtualEarth:TurnDir> onto <VirtualEarth:RoadName>Norrbro</VirtualEarth:RoadName>
<VirtualEarth:Action>Turn</VirtualEarth:Action> <VirtualEarth:TurnDir>left</VirtualEarth:TurnDir> onto <VirtualEarth:RoadName>Slottskajen</VirtualEarth:RoadName>
<VirtualEarth:Action>Bear</VirtualEarth:Action> <VirtualEarth:TurnDir>right</VirtualEarth:TurnDir> onto <VirtualEarth:RoadName>Skeppsbron</VirtualEarth:RoadName>
<VirtualEarth:Action>Road name changes</VirtualEarth:Action> to <VirtualEarth:RoadName>Södermalmstorg</VirtualEarth:RoadName>
<VirtualEarth:Action>Road name changes</VirtualEarth:Action> to <VirtualEarth:RoadName>Västra Slussgatan</VirtualEarth:RoadName>
<VirtualEarth:Action>Road name changes</VirtualEarth:Action> to <VirtualEarth:RoadName>Hornsgatan</VirtualEarth:RoadName>
<VirtualEarth:Action>Bear</VirtualEarth:Action> <VirtualEarth:TurnDir>left</VirtualEarth:TurnDir> onto <VirtualEarth:RoadName>Långholmsgatan</VirtualEarth:RoadName>
<VirtualEarth:Action>Road name changes</VirtualEarth:Action> to <VirtualEarth:RoadName>Liljeholmsbron</VirtualEarth:RoadName>
<VirtualEarth:Action>Road name changes</VirtualEarth:Action> to <VirtualEarth:RoadName>Södertäljevägen</VirtualEarth:RoadName>
At exit <VirtualEarth:ExitNumber>Södertäljevägen</VirtualEarth:ExitNumber>, <VirtualEarth:Action>take</VirtualEarth:Action> ramp <VirtualEarth:TurnDir>left</VirtualEarth:TurnDir> for <VirtualEarth:RoadName>E20 / E4</VirtualEarth:RoadName> toward <VirtualEarth:Sign>Helsingborg / Göteborg</VirtualEarth:Sign>
At exit <VirtualEarth:ExitNumber>Trafikplats Saltskog östra</VirtualEarth:ExitNumber>, <VirtualEarth:Action>take</VirtualEarth:Action> ramp <VirtualEarth:TurnDir>right</VirtualEarth:TurnDir> for <VirtualEarth:RoadName>E20</VirtualEarth:RoadName> toward <VirtualEarth:Sign>Strängnäs / Södertälje C / Göteborg</VirtualEarth:Sign>
<VirtualEarth:Action>At roundabout</VirtualEarth:Action>, <VirtualEarth:Action>take</VirtualEarth:Action> <VirtualEarth:ExitNumber>1st</VirtualEarth:ExitNumber> exit
At exit <VirtualEarth:ExitNumber>Trafikplats Gräsnäs</VirtualEarth:ExitNumber>, <VirtualEarth:Action>take</VirtualEarth:Action> ramp <VirtualEarth:TurnDir>right</VirtualEarth:TurnDir> for <VirtualEarth:RoadName>E18 / 249 / E20</VirtualEarth:RoadName> toward <VirtualEarth:Sign>Örebro / Göteborg / Lindesberg / Oslo</VirtualEarth:Sign>
At exit <VirtualEarth:ExitNumber>110A</VirtualEarth:ExitNumber>, <VirtualEarth:Action>take</VirtualEarth:Action> ramp <VirtualEarth:TurnDir>right</VirtualEarth:TurnDir> for <VirtualEarth:RoadName>E18</VirtualEarth:RoadName> toward <VirtualEarth:Sign>Örebro flygplats / Karlskoga / Oslo</VirtualEarth:Sign>
<VirtualEarth:Action>Pass through 2 roundabouts</VirtualEarth:Action>, remaining on <VirtualEarth:RoadName>Örebrovägen</VirtualEarth:RoadName>
<VirtualEarth:Action>At roundabout</VirtualEarth:Action>, <VirtualEarth:Action>take</VirtualEarth:Action> <VirtualEarth:ExitNumber>2nd</VirtualEarth:ExitNumber> exit onto <VirtualEarth:RoadName>E18 / E45</VirtualEarth:RoadName>
<VirtualEarth:Action>Keep</VirtualEarth:Action> <VirtualEarth:TurnDir>straight</VirtualEarth:TurnDir> onto <VirtualEarth:RoadName>E18 / Orrhagen</VirtualEarth:RoadName>
<VirtualEarth:Action>Pass through 4 roundabouts</VirtualEarth:Action>, remaining on <VirtualEarth:RoadName>Trøgstadveien</VirtualEarth:RoadName>
At exit <VirtualEarth:ExitNumber>Vinterbrokrysset</VirtualEarth:ExitNumber>, <VirtualEarth:Action>take</VirtualEarth:Action> ramp <VirtualEarth:TurnDir>left</VirtualEarth:TurnDir> for <VirtualEarth:RoadName>E6</VirtualEarth:RoadName> toward <VirtualEarth:Sign>Oslo</VirtualEarth:Sign>
<VirtualEarth:Action>Keep</VirtualEarth:Action> <VirtualEarth:TurnDir>straight</VirtualEarth:TurnDir> onto <VirtualEarth:RoadName>E6</VirtualEarth:RoadName>
<VirtualEarth:Action>Road name changes</VirtualEarth:Action> to <VirtualEarth:RoadName>150 / Hjalmar Brantings Vei / Ring 3</VirtualEarth:RoadName>
<VirtualEarth:Action>Take</VirtualEarth:Action> ramp <VirtualEarth:TurnDir>right</VirtualEarth:TurnDir> toward <VirtualEarth:Sign>Tåsen / Maridalen</VirtualEarth:Sign>
<VirtualEarth:Action>At roundabout</VirtualEarth:Action>, <VirtualEarth:Action>take</VirtualEarth:Action> <VirtualEarth:ExitNumber>2nd</VirtualEarth:ExitNumber> exit onto <VirtualEarth:RoadName>Rolf Wickstrøms Vei</VirtualEarth:RoadName>
<VirtualEarth:Action>At roundabout</VirtualEarth:Action>, <VirtualEarth:Action>take</VirtualEarth:Action> <VirtualEarth:ExitNumber>1st</VirtualEarth:ExitNumber> exit onto <VirtualEarth:RoadName>Maridalsveien</VirtualEarth:RoadName>
<VirtualEarth:Action>Turn</VirtualEarth:Action> <VirtualEarth:TurnDir>right</VirtualEarth:TurnDir> onto <VirtualEarth:RoadName>Blåsbortveien</VirtualEarth:RoadName>
<VirtualEarth:Action>Turn</VirtualEarth:Action> <VirtualEarth:TurnDir>left</VirtualEarth:TurnDir> onto <VirtualEarth:RoadName>Ustvedts Vei</VirtualEarth:RoadName>
<VirtualEarth:Action>Arrive</VirtualEarth:Action> at <VirtualEarth:WaypointName>Ustvedts Vei</VirtualEarth:WaypointName>

So now you know how to get to Norway...

PS. Just let me know if you want the full code.