How to manage maps in Windows 8 without a native control

If you want to show a map with a pushpin in Metro app you need, up to now, to embed the Map into a WebView control to avoid the lack of a native Map Control in Windows 8.

To generate a valid URL from latitude and longitude parameters use this method in your code

public static string GetMapUri(double latitude, double longitude, int zoom, string mapStyle, int width, int height)
{
ObservableCollection pins = new ObservableCollection();

ImageryService.Pushpin pushpin = new ImageryService.Pushpin();
pushpin.Location = new ImageryService.Location();
pushpin.Location.Latitude = latitude;
pushpin.Location.Longitude = longitude;
pushpin.IconStyle = "2";

pins.Add(pushpin);

MapUriRequest mapUriRequest = new MapUriRequest();

// Set credentials using a valid Bing Maps Key
mapUriRequest.Credentials = new ImageryService.Credentials();
mapUriRequest.Credentials.ApplicationId = BingMapKey; // use your personal key

// Set the location of the requested image
mapUriRequest.Pushpins = pins;

// Set the map style and zoom level
MapUriOptions mapUriOptions = new MapUriOptions();

switch (mapStyle.ToUpper())
{
case "HYBRID":
mapUriOptions.Style = ImageryService.MapStyle.AerialWithLabels;
break;
case "ROAD":
mapUriOptions.Style = ImageryService.MapStyle.Road;
break;
case "AERIAL":
mapUriOptions.Style = ImageryService.MapStyle.Aerial;
break;
default:
mapUriOptions.Style = ImageryService.MapStyle.Road;
break;
}

mapUriOptions.ZoomLevel = zoom;

// Set the size of the requested image to match the size of the image control
mapUriOptions.ImageSize = new ImageryService.SizeOfint();
mapUriOptions.ImageSize.Height = height;
mapUriOptions.ImageSize.Width = width;

mapUriRequest.Options = mapUriOptions;

ImageryServiceClient imageryService = new ImageryServiceClient(ImageryServiceClient.EndpointConfiguration.BasicHttpBinding_IImageryService);
MapUriResponse mapUriResponse = null;
try
{
mapUriResponse = imageryService.GetMapUriAsync(mapUriRequest).Result;
}
catch (Exception ex)
{
Debug.WriteLine("GeoLocation: " + ex.Message);
}

return mapUriResponse.Uri;
}

You also need to reference the Bing Maps SOAP Services
GeocodeService
http://dev.virtualearth.net/webservices/v1/geocodeservice/geocodeservice.svc?wsdl

SearchService
http://dev.virtualearth.net/webservices/v1/searchservice/searchservice.svc?wsdl

ImageryService
http://dev.virtualearth.net/webservices/v1/imageryservice/imageryservice.svc?wsdl

RouteService
http://dev.virtualearth.net/webservices/v1/routeservice/routeservice.svc?wsdl

Wrap the generated string in a URI and insert it into the WebView controller.

How to locate resources in WinRT Metro App

MS invented another URI format for WinRT resources. For example, to set the Image.Source attribute on WinRT Metro App follow this steps:

  1. Define a new Image
  2. Add the Source attribute in the code behind
Image image = new Image();
image.Source = new BitmapImage(new Uri("ms-resource://MyAssembly/.../image.png", UriKind.ReletiveOrAbsolute));

You’ve to add the path above to locate the resouce in WinRT Metro App.

How to install Windows 8 Developer Preview

Download the Windows 8 Developer Preview from the follow link http://msdn.microsoft.com/en-us/windows/apps/br229516. Choose your version.

Download and install Oracle VirtualBox.

  1. Launch VirtualBox and create a New virtual machine (VM).
  2. Create a new VM with Windows 8 Developer Preview OS. Next
  3. Select at least half the RAM on your machine. Next
  4. Create a new Hard Drive. Next
  5. Select VDI (VirtualBox Disk Image). Next
  6. Select Dynamically Allocated. Next
  7. Set the position and the size (a minimum of 80GB is required) of the Virtual Drive. Next
  8. Create.
  9. A new empty Virtual Machine was created.

To install the relative OS load the .iso image on a virtual optical device in the guest machine.

  1. Open VirtualBox and launch the Virtual Machine created before
  2. Follow the procedure of the first start
  3. Choose the installation support (the virtual optical device where you loaded the .iso image
  4. Wait until the OS installation is finished

For developers:

After Windows 8 installation, launch the new OS and download Microsoft® Visual Studio® 11 Developer Preview (Web installer) from http://www.microsoft.com/download/en/details.aspx?id=27543