-
Notifications
You must be signed in to change notification settings - Fork 445
/
Update layer based on map style.html
133 lines (113 loc) · 5.74 KB
/
Update layer based on map style.html
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
121
122
123
124
125
126
127
128
129
130
131
132
133
<!DOCTYPE html>
<html lang="en">
<head>
<title>Update layer based on map style - Azure Maps Web SDK Samples</title>
<meta charset="utf-8" />
<link rel="shortcut icon" href="/favicon.ico"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="This sample shows how to monitor the maps style and update the style of a layer accordingly." />
<meta name="keywords" content="Microsoft maps, map, gis, API, SDK, markers, pins, pushpins, symbols, layer, icon, image, styledata" />
<meta name="author" content="Microsoft Azure Maps" /><meta name="version" content="1.0" />
<meta name="screenshot" content="screenshot.gif" />
<!-- Add references to the Azure Maps Map control JavaScript and CSS files. -->
<link href="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.css" rel="stylesheet" />
<script src="https://atlas.microsoft.com/sdk/javascript/mapcontrol/3/atlas.min.js"></script>
<script>
var map, datasource, layer;
function getMap() {
//Initialize a map instance.
map = new atlas.Map('myMap', {
center: [-73.985708, 40.75773],
zoom: 12,
view: 'Auto',
//Add authentication details for connecting to Azure Maps.
authOptions: {
//Use Microsoft Entra ID authentication.
authType: 'anonymous',
clientId: 'e6b6ab59-eb5d-4d25-aa57-581135b927f0', //Your Azure Maps client id for accessing your Azure Maps account.
getToken: function (resolve, reject, map) {
//URL to your authentication service that retrieves an Microsoft Entra ID Token.
var tokenServiceUrl = 'https://samples.azuremaps.com/api/GetAzureMapsToken';
fetch(tokenServiceUrl).then(r => r.text()).then(token => resolve(token));
}
//Alternatively, use an Azure Maps key. Get an Azure Maps key at https://azure.com/maps. NOTE: The primary key should be used as the key.
//authType: 'subscriptionKey',
//subscriptionKey: '[YOUR_AZURE_MAPS_KEY]'
}
});
//Wait until the map resources are ready.
map.events.add('ready', function () {
//Create a style control and add it to the map.
map.controls.add(new atlas.control.StyleControl(), {
position: 'top-right'
});
//Create a data source and add it to the map.
datasource = new atlas.source.DataSource();
map.sources.add(datasource);
//Create a point feature and add it to the data source.
datasource.add(new atlas.data.Feature(new atlas.data.Point([-73.985708, 40.75773]), {
title: 'Hi'
}));
//Add a layer for rendering point data as symbols. Apply any common styles that will not change when the map style changes.
layer = new atlas.layer.SymbolLayer(datasource, null, {
textOptions: {
//Displaye the "title" property of the feature.
textField: ['get', 'title'],
//Offset the text so that it appears on top of the icon.
offset: [0, -1]
}
});
//Update the layer based on the maps initial style.
mapStyleChanged();
//Add the layer to the map.
map.layers.add(layer);
//Add an event to monitor changes in the map style.
map.events.add('styledata', mapStyleChanged);
});
}
function mapStyleChanged() {
var style = map.getStyle().style;
//Style the symbol layer differently depending on if the map style is light or dark.
switch (style) {
//Dark styles.
case 'grayscale_dark':
case 'highcontrast_dark':
case 'night':
case 'satellite_roads_labels':
case 'satellite':
layer.setOptions({
iconOptions: {
image: 'marker-yellow'
},
textOptions: {
color: '#000000'
}
});
break;
//Light styles.
case 'road':
default: //Specify a default as new map styles may be added in the future.
layer.setOptions({
iconOptions: {
image: 'marker-blue'
},
textOptions: {
color: '#FFFFFF'
}
});
break;
}
}
</script>
</head>
<body onload="getMap()">
<div id="myMap" style="position:relative;width:100%;min-width:290px;height:600px;"></div>
<fieldset style="width:calc(100% - 30px);min-width:290px;margin-top:10px;">
<legend>Update layer based on map style</legend>
This sample shows how to monitor the maps style and update the style of a layer accordingly.
The map monitors the 'styledata' event to keep track of when the base map style changes.
In this sample a symbol layer is updated such that when the map style is dark, a yellow icon
with black text is displayed, when the map style is light, a blue icon with white text is displayed.
</fieldset>
</body>
</html>