diff --git a/bingmaps/bingmaps-test.ts b/bingmaps/bingmaps-test.ts new file mode 100644 index 000000000..bccc5c8f2 --- /dev/null +++ b/bingmaps/bingmaps-test.ts @@ -0,0 +1,93 @@ +/// +/// +/// +/// +/// +/// +/// + +module BingMapsTests { + + // An interactive set of Bing Maps AJAX control usages can be found at http://www.bingmapsportal.com/isdk/ajaxv7 + // A full API description can be found at http://msdn.microsoft.com/en-us/library/gg427610.aspx + export class TestFixture { + + public createMap( + // This key can be acquired at http://www.microsoft.com/maps/create-a-bing-maps-key.aspx + bingMapsApiKey: string, + // This is the HTML container that the map will be drawn inside of + target: HTMLElement, + // These positions will be placed as pushpins onto the map + mapPositions: Array, + // This will fire if the geolocation fails and will pass the original target (parameter 2) + onFailure: (element: HTMLElement) => any) { + + var self = this; + var map: Microsoft.Maps.Map; + + navigator.geolocation.getCurrentPosition((position: Position) => { + + var locations: Array = new Array(); + var options: Microsoft.Maps.MapOptions; + + function loadMap() { + options = {}; + options.credentials = bingMapsApiKey; + options.enableClickableLogo = false; + options.enableSearchLogo = false; + options.showDashboard = false; + options.showScalebar = false; + options.center = self.toLocation(position); + options.zoom = 16; + options.mapTypeId = Microsoft.Maps.MapTypeId.road; + options.height = target.clientHeight; + options.width = target.clientWidth; + + target.innerHTML = ""; + + map = new Microsoft.Maps.Map(target, options); + + for (var i = 0; i < mapPositions.length; ++i) { + + var mapPosition: Position = mapPositions[i]; + var location: Microsoft.Maps.Location = self.createPushpin(map, mapPosition); + + locations.push(location); + } + + // Sets the view of the map to the smallest size that contains all of the + // specified locations (in this case the pusphin locations) + map.setView({ bounds: Microsoft.Maps.LocationRect.fromLocations(locations) }); + } + + if ((window).Windows != undefined) { + // Running in Win8 app + Microsoft.Maps.loadModule("Microsoft.Maps.Map", { callback: loadMap }); + } else { + // Running anywhere else + loadMap(); + } + }, () => onFailure(target), { maximumAge: 3000, timeout: 5000, enableHighAccuracy: true }); + + } + + // Converts a standard HTML geolocation Position to a Location + private toLocation(position: Position): Microsoft.Maps.Location { + return new Microsoft.Maps.Location(position.coords.latitude, position.coords.longitude); + } + + // Creates a pushpin on a specified map and returns the Location for potentially setting the map view + private createPushpin(map: Microsoft.Maps.Map, position: Position): Microsoft.Maps.Location { + + var location: Microsoft.Maps.Location; + var pushpin: Microsoft.Maps.Pushpin; + + location = this.toLocation(position); + pushpin = new Microsoft.Maps.Pushpin(location, null); + + map.entities.push(pushpin); + + return location; + } + } +} \ No newline at end of file