private static void UpdatePhotos(bool newPhotos) { if (newPhotos) { if (_mapEntities != null) { _map.Entities.Remove(_mapEntities); } _mapEntities = new MapEntityCollection(); _map.Entities.Push(_mapEntities); _photoViews = new Dictionary <string, PhotoView>(); } if (_model.Photos.Count == 0) { Document.Body.ClassName = MapModeClassName; return; } Document.Body.ClassName = PhotosModeClassName; _graph = new Graph(); _model.Photos.ForEach(delegate(Photo photo) { MapLocation location = new MapLocation(photo.latitude, photo.longitude); MapPoint point = _map.TryLocationToPixel(location, MapPointReference.Control); PhotoView photoView; if (newPhotos) { MapPolylineOptions connectorOptions = new MapPolylineOptions(); connectorOptions.StrokeColor = new MapColor(255, 0x4E, 0xD3, 0x4E); connectorOptions.StrokeThickness = 2; MapInfoboxOptions calloutOptions = new MapInfoboxOptions(); calloutOptions.Width = 50; calloutOptions.Height = 50; calloutOptions.ShowPointer = false; calloutOptions.ShowCloseButton = false; calloutOptions.Offset = new MapPoint(-25, -25); calloutOptions.HtmlContent = "<div class=\"photoInfobox\" style=\"background-image: url(" + photo.thumbnailUrl + ")\"" + " title=\"" + photo.title.HtmlEncode() + "\"></div>"; calloutOptions.Visible = true; MapPushpinOptions pushpinOptions = new MapPushpinOptions(); pushpinOptions.Icon = "Dot.png"; pushpinOptions.Width = 10; pushpinOptions.Height = 10; pushpinOptions.Anchor = new MapPoint(5, 5); pushpinOptions.TypeName = "locationPushpin"; photoView = new PhotoView(); photoView.pushpin = new MapPushpin(location, pushpinOptions); photoView.connector = new MapPolyline(new MapLocation[] { location, location }, connectorOptions); photoView.callout = new MapInfobox(location, calloutOptions); photoView.callout.Data = photo; _photoViews[photo.id] = photoView; _mapEntities.Insert(photoView.connector, 0); _mapEntities.Insert(photoView.callout, 0); _mapEntities.Insert(photoView.pushpin, 0); MapEvents.AddHandler(photoView.callout, "click", delegate(MapEventArgs e) { ShowPhoto(photo); }); } else { photoView = _photoViews[photo.id]; } photoView.pushpinNode = new GraphNode(); photoView.pushpinNode.x = point.X; photoView.pushpinNode.y = point.Y; photoView.pushpinNode.moveable = false; photoView.calloutNode = new GraphNode(); photoView.calloutNode.x = point.X; photoView.calloutNode.y = point.Y; GraphEdge connectorEdge = new GraphEdge(photoView.pushpinNode, photoView.calloutNode, 10 + Math.Random() * 15); _graph.AddNode(photoView.pushpinNode); _graph.AddNode(photoView.calloutNode); _graph.AddEdge(connectorEdge); }); Window.SetTimeout(UpdateLayout, 30); }
public void Run() { Element rootElement = Document.GetElementById("map"); MapOptions mapOptions = new MapOptions(); mapOptions.Credentials = (string)rootElement.GetAttribute("data-credentials"); mapOptions.Width = 640; mapOptions.Height = 480; mapOptions.ShowCopyright = false; mapOptions.ShowMapTypeSelector = false; mapOptions.ShowLogo = false; mapOptions.ShowScalebar = false; mapOptions.ShowNavControl = false; mapOptions.ShowDashboard = false; mapOptions.Center = new MapLocation(47.610377, -122.2006786); mapOptions.Zoom = 10; mapOptions.MapType = MapType.Road; MapPushpinOptions pushpinOptions = new MapPushpinOptions(); _pushpin = new MapPushpin(mapOptions.Center, pushpinOptions); MapInfoboxOptions infoboxOptions = new MapInfoboxOptions(); infoboxOptions.Title = "Bellevue"; infoboxOptions.Visible = false; infoboxOptions.Offset = new MapPoint(0, 20); infoboxOptions.Height = 48; infoboxOptions.Width = 80; infoboxOptions.ShowCloseButton = false; _infobox = new MapInfobox(mapOptions.Center, infoboxOptions); _map = new Map(rootElement, mapOptions); _map.Entities.Push(_pushpin); _map.Entities.Push(_infobox); MapEvents.AddHandler(_pushpin, "click", OnPushpinClick); MapEvents.AddHandler(_map, "viewchange", OnViewChanged); MapModuleOptions trafficOptions = new MapModuleOptions(); trafficOptions.Callback = delegate() { TrafficLayer trafficLayer = new TrafficLayer(_map); trafficLayer.Show(); }; Map.LoadModule(MapModule.Traffic, trafficOptions); MapModuleOptions venueMapOptions = new MapModuleOptions(); venueMapOptions.Callback = delegate() { VenueMapFactory venueMapFactory = new VenueMapFactory(_map); VenueMapSearchOptions searchOptions = new VenueMapSearchOptions(); searchOptions.Map = _map; searchOptions.Location = mapOptions.Center; searchOptions.Radius = 1000; searchOptions.Callback = delegate(Venue[] venues) { if (venues.Length != 0) { VenueMapOptions venueOptions = new VenueMapOptions(); venueOptions.VenueMapID = venues[0].Metadata.ID; venueOptions.SuccessCallback = delegate(VenueMap venueMap, VenueMapOptions options) { venueMap.Show(); if (Window.Confirm("Zoom to " + venueMap.Name + "?")) { _map.SetView(venueMap.BestMapView); } }; venueMapFactory.Create(venueOptions); } }; venueMapFactory.Search(searchOptions); }; Map.LoadModule(MapModule.VenueMaps, venueMapOptions); Element locateMeButton = Document.GetElementById("locateMeButton"); locateMeButton.AddEventListener("click", OnLocateMeClick, false); }
static Page() { if (Document.Body.GetAttribute("data-app") == null) { return; } string flickrKey = (string)Document.Body.GetAttribute("data-flickr-key"); Debug.Assert(String.IsNullOrEmpty(flickrKey) == false); string bingMapsKey = (string)Document.Body.GetAttribute("data-bingmaps-key"); Debug.Assert(String.IsNullOrEmpty(bingMapsKey) == false); _tileUrlFormat = (string)Document.Body.GetAttribute("data-tile-url"); Debug.Assert(String.IsNullOrEmpty(_tileUrlFormat) == false); _model = new PageModel(new FlickrService(flickrKey), new HtmlStorageService()); _model.PropertyChanged += delegate(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == "Searching") { Element progressElement = Utility.GetElement("searchProgress"); if (_model.Searching) { progressElement.ClassName = "active"; } else { progressElement.ClassName = ""; } } else if (e.PropertyName == "Photos") { if (_model.SelectedPhoto != null) { ShowPhoto(null); } UpdatePhotos(/* newPhotos */ true); } }; MapOptions mapOptions = new MapOptions(); mapOptions.Credentials = bingMapsKey; mapOptions.ShowMapTypeSelector = false; mapOptions.ShowDashboard = false; mapOptions.ShowScalebar = false; mapOptions.ShowCopyright = false; mapOptions.ShowLogo = false; mapOptions.MapType = MapType.Custom; mapOptions.Zoom = 2; mapOptions.BackgroundColor = new MapColor(255, 255, 255, 255); _map = new Map(Utility.GetElement("mapContainer"), mapOptions); MapTileSourceOptions sourceOptions = new MapTileSourceOptions(); sourceOptions.UriGenerator = CreateTileUrl; MapTileLayerOptions layerOptions = new MapTileLayerOptions(); layerOptions.Mercator = new MapTileSource(sourceOptions); _map.Entities.Push(new MapTileLayer(layerOptions)); MapEvents.AddHandler(_map, "viewchangestart", delegate(MapEventArgs e) { _viewChanging = true; _zoomLevel = _map.GetZoom(); }); MapEvents.AddThrottledHandler(_map, "viewchangeend", delegate(MapEventArgs e) { _viewChanging = false; if (_zoomLevel != _map.GetZoom()) { UpdatePhotos(/* newPhotos */ false); } }, 250); MapEvents.AddHandler(_map, "mousedown", delegate(MapEventArgs e) { _oldMode = Document.Body.ClassName; Document.Body.ClassName = MapModeClassName; }); MapEvents.AddHandler(_map, "mouseup", delegate(MapEventArgs e) { Document.Body.ClassName = _oldMode; }); Utility.SubscribeKey("searchBox", delegate(ElementEvent e) { Window.SetTimeout(delegate() { Document.GetElementById("searchButton").ClassName = String.IsNullOrEmpty(Utility.GetElement("searchBox").As <InputElement>().Value) ? "reset" : ""; }, 0); }); Utility.SubscribeBlur("searchBox", delegate(ElementEvent e) { Window.SetTimeout(delegate() { Document.GetElementById("searchButton").ClassName = ""; }, 0); }); Utility.SubscribeClick("searchButton", delegate(ElementEvent e) { Search(Utility.GetElement("searchBox").As <InputElement>().Value); Document.ActiveElement.Blur(); }); Utility.SubscribeClick("locateMeButton", delegate(ElementEvent e) { ShowLocation(); }); Utility.SubscribeClick("favButton", delegate(ElementEvent e) { ShowFavorites(); }); Utility.SubscribeClick("photoAroundButton", delegate(ElementEvent e) { SearchSimilar(); }); Utility.SubscribeClick("photoCloseButton", delegate(ElementEvent e) { HidePhoto(); }); Utility.SubscribeClick("photoSaveButton", delegate(ElementEvent e) { FavoritePhoto(); }); Utility.SubscribeClick("photoShareButton", delegate(ElementEvent e) { SharePhoto(); }); Utility.SubscribeClick("photoSourceButton", delegate(ElementEvent e) { ShowPhotoFlickrPage(); }); ShowLocation(); }