-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathProviders.cs
120 lines (114 loc) · 4.42 KB
/
Providers.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
using System.Linq;
using Ptv.XServer.Controls.Map.TileProviders;
using Ptv.XServer.Controls.Map.Layers.Tiled;
using System.Text.RegularExpressions;
using System;
namespace Ptv.XServer.Controls.Map
{
public static class Here
{
/// <summary>
/// The basic map types
/// </summary>
public enum HereType
{
/// <summary>
/// Complete map
/// </summary>
MapTile,
/// <summary>
/// The basic map tile without streets and labels
/// </summary>
BaseTile,
/// <summary>
/// Street and label overlay only
/// </summary>
StreetTile,
/// <summary>
/// Label overlay only
/// </summary>
LabelTile
}
/// <summary>
/// The scheme for the tiles
/// </summary>
public enum HereScheme
{
NormalDay,
NormalDayCustom,
CarNavDay,
SatelliteDay,
HybridDay,
TerrainDay,
NormalDayTransit,
NormalDayGrey,
CarnavDayGrey,
NormalNightMobile,
PedestrianDay,
PedestrianNight
}
/// <summary>
/// Removes all nokia base map layers.
/// </summary>
/// <param name="layers">The layers collection.</param>
public static void RemoveBaseMapLayers(this LayerCollection layers)
{
var nokiaLayers = from layer in layers
where layer.Name.StartsWith("HERE_") || layer.Name.StartsWith("OSM_")
select layer;
foreach (var layer in nokiaLayers.ToList())
layers.Remove(layer);
}
/// <summary>
/// Add a HERE layer to the layers collection of the map.
/// </summary>
/// <param name="layers">The layers collection.</param>
/// <param name="type">The basic map type.</param>
/// <param name="scheme">The scheme of the map.</param>
/// <param name="appId">The application id.</param>
/// <param name="token">The token.</param>
public static void AddHereLayer(this LayerCollection layers, HereType type, HereScheme scheme, string appId, string token)
{
string schemeString = Regex.Replace(scheme.ToString(), "[a-z][A-Z]", m => m.Value[0] + "." + m.Value[1]).ToLower();
string baseString = scheme == Here.HereScheme.SatelliteDay || scheme == Here.HereScheme.TerrainDay ? "aerial" : "base";
string typeString = type.ToString().ToLower();
string caption = type == HereType.StreetTile
? "Streets"
: type == HereType.LabelTile ? "Labels" : "BaseMap";
layers.Add(new TiledLayer("HERE_" + type)
{
Caption = caption,
IsBaseMapLayer = type == HereType.MapTile || type == HereType.BaseTile, // cannot be moved over content-layers
IsLabelLayer = type == HereType.LabelTile || type == HereType.StreetTile, // uses tile-pruning for overlays
TiledProvider = new RemoteTiledProvider
{
MinZoom = 0,
MaxZoom = 20,
RequestBuilderDelegate = (x, y, level) =>
$"https://{"1234"[(x ^ y) % 4]}.{baseString}.maps.api.here.com/maptile/2.1/{typeString}/newest/{schemeString}/{level}/{x}/{y}/256/png8?app_id={appId}&token={token}",
},
Copyright = $"Map © 1987-{DateTime.Now.Year} HERE"
});
}
/// <summary>
/// Add an OSM layer to the layers collection of the map.
/// </summary>
/// <param name="layers">The layers collection.</param>
public static void AddOSMLayer(this LayerCollection layers)
{
layers.Add(new TiledLayer("OSM_DE")
{
Caption = "OpenStreetMap.DE",
IsBaseMapLayer = true,
TiledProvider = new RemoteTiledProvider
{
MinZoom = 0,
MaxZoom = 18,
RequestBuilderDelegate = (x, y, level) =>
$"https://{"abc"[(x ^ y) % 3]}.tile.openstreetmap.de/tiles/osmde/{level}/{x}/{y}.png",
},
Copyright = $"Map © OpenStreetMap contributors"
});
}
}
}