using MapControl; using System; using System.Collections.Generic; using System.ComponentModel; #if WINDOWS_UWP using Windows.UI; using Windows.UI.Xaml; using Windows.UI.Xaml.Media; #else using System.Windows; using System.Windows.Media; #endif namespace ViewModel { public class MapLayers : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private readonly Dictionary mapLayers = new Dictionary { { "OpenStreetMap", MapTileLayer.OpenStreetMapTileLayer }, { "OpenStreetMap German", new MapTileLayer { SourceName = "OpenStreetMap German", Description = "© [OpenStreetMap contributors](http://www.openstreetmap.org/copyright)", TileSource = new TileSource { UriFormat = "http://{c}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png" }, MaxZoomLevel = 19 } }, { "Stamen Terrain", new MapTileLayer { SourceName = "Stamen Terrain", Description = "Map tiles by [Stamen Design](http://stamen.com/), under [CC BY 3.0](http://creativecommons.org/licenses/by/3.0)\nData by [OpenStreetMap](http://openstreetmap.org/), under [ODbL](http://www.openstreetmap.org/copyright)", TileSource = new TileSource { UriFormat = "http://tile.stamen.com/terrain/{z}/{x}/{y}.png" }, MaxZoomLevel = 17 } }, { "Stamen Toner Light", new MapTileLayer { SourceName = "Stamen Toner Light", Description = "Map tiles by [Stamen Design](http://stamen.com/), under [CC BY 3.0](http://creativecommons.org/licenses/by/3.0)\nData by [OpenStreetMap](http://openstreetmap.org/), under [ODbL](http://www.openstreetmap.org/copyright)", TileSource = new TileSource { UriFormat = "http://tile.stamen.com/toner-lite/{z}/{x}/{y}.png" }, MaxZoomLevel = 18 } }, { "Seamarks", new MapTileLayer { SourceName = "OpenSeaMap", TileSource = new TileSource { UriFormat = "http://tiles.openseamap.org/seamark/{z}/{x}/{y}.png" }, MinZoomLevel = 9, MaxZoomLevel = 18 } }, { "Bing Maps Road", new BingMapsTileLayer { SourceName = "Bing Maps Road", Description = "© [Microsoft](http://www.bing.com/maps/)", Mode = BingMapsTileLayer.MapMode.Road } }, { "Bing Maps Aerial", new BingMapsTileLayer { SourceName = "Bing Maps Aerial", Description = "© [Microsoft](http://www.bing.com/maps/)", Mode = BingMapsTileLayer.MapMode.Aerial, MapForeground = new SolidColorBrush(Colors.White), MapBackground = new SolidColorBrush(Colors.Black) } }, { "Bing Maps Aerial with Labels", new BingMapsTileLayer { SourceName = "Bing Maps Hybrid", Description = "© [Microsoft](http://www.bing.com/maps/)", Mode = BingMapsTileLayer.MapMode.AerialWithLabels, MapForeground = new SolidColorBrush(Colors.White), MapBackground = new SolidColorBrush(Colors.Black) } }, { "OpenStreetMap WMS", new WmsImageLayer { Description = "© [terrestris GmbH & Co. KG](http://ows.terrestris.de/)\nData © [OpenStreetMap contributors](http://www.openstreetmap.org/copyright)", ServerUri = new Uri("http://ows.terrestris.de/osm/service"), Layers = "OSM-WMS" } }, { "OpenStreetMap TOPO WMS", new WmsImageLayer { Description = "© [terrestris GmbH & Co. KG](http://ows.terrestris.de/)\nData © [OpenStreetMap contributors](http://www.openstreetmap.org/copyright)", ServerUri = new Uri("http://ows.terrestris.de/osm/service"), Layers = "TOPO-OSM-WMS" } }, { "SevenCs ChartServer", new WmsImageLayer { Description = "© [SevenCs GmbH](http://www.sevencs.com)", ServerUri = new Uri("http://chartserver4.sevencs.com:8080"), Layers = "ENC", MaxBoundingBoxWidth = 360 } } }; private string currentMapLayerName = "OpenStreetMap"; public string CurrentMapLayerName { get { return currentMapLayerName; } set { currentMapLayerName = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(CurrentMapLayerName))); PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(CurrentMapLayer))); } } public UIElement CurrentMapLayer { get { return mapLayers[currentMapLayerName]; } } public UIElement SeamarksLayer { get { return mapLayers["Seamarks"]; } } public List MapLayerNames { get; } = new List { "OpenStreetMap", "OpenStreetMap German", "Stamen Terrain", "Stamen Toner Light", "OpenStreetMap WMS", "OpenStreetMap TOPO WMS", "SevenCs ChartServer" }; public MapLayers() { //BingMapsTileLayer.ApiKey = "..."; // Bing Maps TileLayers with tile URLs retrieved from the Imagery Metadata Service // (see http://msdn.microsoft.com/en-us/library/ff701716.aspx). // A Bing Maps API Key (see http://msdn.microsoft.com/en-us/library/ff428642.aspx) is required // for using these layers and must be assigned to the static BingMapsTileLayer.ApiKey property. if (!string.IsNullOrEmpty(BingMapsTileLayer.ApiKey)) { MapLayerNames.Add("Bing Maps Road"); MapLayerNames.Add("Bing Maps Aerial"); MapLayerNames.Add("Bing Maps Aerial with Labels"); } } } }