// ---------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // ---------------------------------------------------------------------------- using System; using System.Collections; using System.Web; using mapdemo.MapPointService; using MapPointNamespace; namespace mapdemo { /// /// Summary description for WebForm1. /// public class MapImage : System.Web.UI.Page { private const int mapWidth = 400; private const int mapHeight = 500; private void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here } protected void ServeMap() { if (!MapPointNamespace.MapPoint.Initialized) { MapPointNamespace.MapPoint.Initialize(); } bool isSeattle = true; // default to Seattle double centerLat, centerLong, zoom; if ((Request.QueryString["city"] != null) && (Request.QueryString["city"].ToLower().Equals("redmond"))) { isSeattle = false; } byte mask = 0xff; if (Request.QueryString["mask"] != null) { try { mask = Byte.Parse(Request.QueryString["mask"]); } catch (Exception) { /* ignore */ } } if (!isSeattle) { centerLat = redmondCenterLat; centerLong = redmondCenterLong; zoom = redmondZoom; } else { centerLat = seattleCenterLat; centerLong = seattleCenterLong; zoom = seattleZoom; } try { MapSpecification spec = MapPointNamespace.MapPoint.PrepareMapFromCenterZoom( mapWidth, mapHeight, centerLat, centerLong, zoom); // Add pushpins to the map specification! if (isSeattle) { spec.Pushpins = BuildPushPins(SeattlePushPins, mask); } else { spec.Pushpins = BuildPushPins(RedmondPushPins, mask);; } // Fetch the map image; byte[] data = MapPointNamespace.MapPoint.GetMap(spec); if (data == null) { Response.StatusCode = 500; Response.StatusDescription = "Failed to retrieve map data"; } else { Response.ContentType= "image/gif"; Response.BinaryWrite(data); } } catch (Exception ex) { Response.Write(ex); return; } } private mapdemo.MapPointService.Pushpin[] BuildPushPins(PushPinData[] pins, byte mask) { // First count how many pins are going to match the mask int numPins = 0; for (int i = 0; i < pins.Length; ++i) { if ((pins[i].groupMask == 0) || ((pins[i].groupMask & mask) != 0)) { numPins++; } } mapdemo.MapPointService.Pushpin[] specPins = new mapdemo.MapPointService.Pushpin[numPins]; int outputIndex = 0; for (int i = 0; i < pins.Length; ++i) { if ((pins[i].groupMask == 0) || ((pins[i].groupMask & mask) != 0)) { specPins[outputIndex] = new mapdemo.MapPointService.Pushpin(); specPins[outputIndex].LatLong = new mapdemo.MapPointService.LatLong(); specPins[outputIndex].IconDataSource = "MapPoint.Icons"; specPins[outputIndex].IconName = pins[i].icon; specPins[outputIndex].Label = pins[i].label; specPins[outputIndex].LabelNearbyRoads = false; specPins[outputIndex].LatLong.Latitude = pins[i].latitude; specPins[outputIndex].LatLong.Longitude = pins[i].longitude; specPins[outputIndex].ReturnsHotArea = false; ++outputIndex; } } return specPins; } private const double seattleCenterLat = 47.616391194232195; private const double seattleCenterLong = -122.32471226177632; private const double seattleZoom = 7; private const double redmondCenterLat = 47.664037990827104; private const double redmondCenterLong = -122.12025798221626; private const double redmondZoom = 10; private struct PushPinData { public double latitude; public double longitude; public string icon; public string label; public byte groupMask; public PushPinData(double latit, double longi, string ic, string lab, byte mask) { latitude = latit; longitude = longi; icon = ic; label = lab; groupMask = mask; } } private static readonly PushPinData[] RedmondPushPins = { // "You are here" new PushPinData(47.641372008066419, -122.14171843658843, "42" /*office building*/, "You are here (Microsoft Research)", 0), // Starbucks new PushPinData(47.681110048657551, -122.12546258636381, "DriveThruIcon" /*green coffee circle*/, null, 1), new PushPinData(47.674440368933034, -122.12920553002897, "DriveThruIcon", null, 1), new PushPinData(47.674293519865877, -122.12964266213585, "DriveThruIcon", null, 1), new PushPinData(47.670646198849091, -122.1135097553162, "DriveThruIcon", null, 1), new PushPinData(47.670878425280875, -122.11128311364686, "DriveThruIcon", null, 1), new PushPinData(47.671243840401466, -122.10595556609425, "DriveThruIcon", null, 1), new PushPinData(47.652327631495119, -122.13483360590506, "DriveThruIcon", null, 1), // Tullys new PushPinData(47.6810758977117, -122.12546258636381, "CoffeeShopIcon" /*Red coffee circle*/, null, 2), new PushPinData(47.671001368685936, -122.04650559955846, "CoffeeShopIcon", null, 2), // SBC new PushPinData(47.670178330890948, -122.11961594443427, "KioskIcon" /*Blue coffee circle*/, null, 4), new PushPinData(47.608457326456126, -122.20149625220438, "KioskIcon", null, 4), new PushPinData(47.574152701349739, -122.17140243872132, "KioskIcon", null, 4) }; private static readonly PushPinData[] SeattlePushPins = { // "You are here" new PushPinData(47.614037591008028, -122.30879852406528, "27" /*house with flag*/, "You are here (home)", 0), // Starbucks new PushPinData(47.556308832143081, -122.14664983316918, "DriveThruIcon" /*green coffee circle*/, null, 1), new PushPinData(47.609201817075657, -122.31668056236748, "DriveThruIcon", null, 1), new PushPinData(47.619942289545506, -122.31374358102437, "DriveThruIcon", null, 1), new PushPinData(47.599257061644117, -122.30209127830034, "DriveThruIcon", null, 1), new PushPinData(47.621212704731128, -122.31263709037883, "DriveThruIcon", null, 1), new PushPinData(47.612890119227465, -122.32072403435613, "DriveThruIcon", null, 1), new PushPinData(47.601862778812482, -122.28519339029373, "DriveThruIcon", null, 1), new PushPinData(47.6102400058295, -122.32292335526887, "DriveThruIcon", null, 1), new PushPinData(47.556308832143081, -122.14664983316918, "DriveThruIcon", null, 1), new PushPinData(47.622145025552832, -122.32086063813952, "DriveThruIcon", null, 1), new PushPinData(47.622367006700856, -122.32081965700451, "DriveThruIcon", null, 1), new PushPinData(47.618466968684778, -122.32557346866683, "DriveThruIcon", null, 1), new PushPinData(47.616233496826183, -122.32989014822229, "DriveThruIcon", null, 1), new PushPinData(47.617053119526588, -122.33032728032917, "DriveThruIcon", null, 1), // Tullys new PushPinData(47.556308832143081, -122.14664983316918, "137", null, 6), new PushPinData(47.626021157906813, -122.30730954282622, "CoffeeShopIcon", null, 2), new PushPinData(47.607811873579557, -122.33913822435848, "CoffeeShopIcon", null, 2), new PushPinData(47.556308832143081, -122.14664983316918, "CoffeeShopIcon", null, 2), new PushPinData(47.617097515756193, -122.35281226307684, "CoffeeShopIcon", null, 2), new PushPinData(47.605650118707253, -122.33404290323766, "CoffeeShopIcon", null, 2), new PushPinData(47.60911643971103, -122.33572312977347, "137", null, 6), new PushPinData(47.608771515157947, -122.34009445084229, "137", null, 6), new PushPinData(47.599181929563251, -122.33139278983968, "137", null, 6), new PushPinData(47.633845139601064, -122.28094501262997, "CoffeeShopIcon", null, 2), new PushPinData(47.556308832143081, -122.14664983316918, "137", null, 6), new PushPinData(47.610117062424443, -122.33346916734737, "CoffeeShopIcon", null, 2), new PushPinData(47.611677760649791, -122.33647445058217, "CoffeeShopIcon", null, 2), // SBC new PushPinData(47.610117062424443, -122.33655641285222, "KioskIcon", /*Blue coffee circle*/ null, 4), new PushPinData(47.60678051501489, -122.33355112961741, "KioskIcon", null, 8), new PushPinData(47.602412609040663, -122.33254026162025, "KioskIcon", null, 8), new PushPinData(47.608826156671306, -122.33998516781557, "KioskIcon", null, 8), new PushPinData(47.556308832143081, -122.14664983316918, "KioskIcon", null, 8) }; #region Web Form Designer generated code override protected void OnInit(EventArgs e) { // // CODEGEN: This call is required by the ASP.NET Web Form Designer. // InitializeComponent(); base.OnInit(e); } /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } #endregion } }