Permalink
Cannot retrieve contributors at this time
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
117 lines (97 sloc)
6.01 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<title>Vector tile heat map - Azure Maps Web SDK Samples</title> | |
<meta charset="utf-8" /> | |
<link rel="shortcut icon" href="/favicon.ico"/> | |
<meta http-equiv="x-ua-compatible" content="IE=Edge" /> | |
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /> | |
<meta name="description" content="This sample shows how to how to use a vector tile service to render data as a heat map." /> | |
<meta name="keywords" content="Microsoft maps, map, gis, API, SDK, heatmap, heat map, heatmaps, heat maps, density, layer, thermatic, vector tiles, mbtiles, traffic, layer, flow, incidents" /> | |
<meta name="author" content="Microsoft Azure Maps" /> | |
<!-- Add references to the Azure Maps Map control JavaScript and CSS files. --> | |
<link rel="stylesheet" href="https://atlas.microsoft.com/sdk/javascript/mapcontrol/2/atlas.min.css" type="text/css" /> | |
<script src="https://atlas.microsoft.com/sdk/javascript/mapcontrol/2/atlas.min.js"></script> | |
<script type='text/javascript'> | |
var map, datasource, popup; | |
function GetMap() { | |
//Point the Azure Maps domain to the US Azure Gov Cloud domain. | |
atlas.setDomain('atlas.azure.us'); | |
//Initialize a map instance. | |
map = new atlas.Map('myMap', { | |
center: [-78, 40], | |
style: 'grayscale_dark', | |
zoom: 5, | |
view: 'Auto', | |
//Add your Azure Maps subscription client ID to the map SDK. Get an Azure Maps client ID at https://azure.com/maps | |
authOptions: { | |
//Use Azure Active Directory authentication. | |
authType: 'anonymous', | |
clientId: 'c9f2f391-13f1-407b-a4a5-f0a241bacfbf', //Your Azure Active Directory client id for accessing your Azure Maps account. | |
getToken: function (resolve, reject, map) { | |
//URL to your authentication service that retrieves an Azure Active Directory Token. | |
var tokenServiceUrl = 'https://azuremapscodesamples.azurewebsites.us/Common/TokenService.ashx'; | |
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 reusable popup. | |
popup = new atlas.Popup(); | |
//Create a vector tile source and add it to the map. | |
datasource = new atlas.source.VectorTileSource(null, { | |
tiles: ['https://{azMapsDomain}/traffic/flow/tile/pbf?api-version=1.0&style=relative&zoom={z}&x={x}&y={y}'], | |
maxZoom: 22 | |
}); | |
map.sources.add(datasource); | |
//Create a layer for traffic flow lines. | |
var flowLayer = new atlas.layer.HeatMapLayer(datasource, null, { | |
//The name of the data layer within the data source to pass into this rendering layer. | |
sourceLayer: 'Traffic flow', | |
//Give each data point a weight based on the level of traffic. | |
//Since traffic flow level goes from 0 - closed, to 1 - free flow, lets intverse this value so slower areas have more weight. | |
weight: ['-', 1, ['get', 'traffic_level']], | |
//Give each data point a radius. | |
radius: 5, | |
//Ignore roads where traffic is travelling at 80% of the posted speed limit or higher. | |
filter: ['<', ['get', 'traffic_level'], 0.80] | |
}); | |
//Add the traffic flow layer below the labels to make the map clearer. | |
map.layers.add(flowLayer, 'labels'); | |
//Add a click event to the layer to display details about the traffic flow line. | |
map.events.add('click', flowLayer, featureClicked); | |
}); | |
} | |
function featureClicked(e) { | |
//Make sure the event occurred on a shape feature. | |
if (e.shapes && e.shapes.length > 0) { | |
//Since the data is coming from a vector tile source, it will be a raw GeoJSON feature and not a Shape class. | |
//Update the content and position of the popup. | |
popup.setOptions({ | |
//Apply a template to the properties of the shape feature. | |
content: atlas.PopupTemplate.applyTemplate(e.shapes[0].properties), | |
position: e.position | |
}); | |
//Open the popup. | |
popup.open(map); | |
} | |
} | |
</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><h1 style="font-size:16px">Vector tile heat map</h1></legend> | |
This sample shows how to how to use a vector tile service to render data as a heat map. | |
In this case traffic flow data is used. The points that make up the flow lines are used as the heat points. Points that have a traffic flow greater than 80% of the posted speed limit are ignored. The traffic level is used to weight each data point in the heat map. | |
<br /><br /> | |
This sample uses the <a href="https://docs.microsoft.com/en-us/rest/api/maps/traffic/gettrafficflowtile">Azure Maps vector tile traffic flow service</a>. | |
Detailed information about the format of the traffic flow vector tiles can be found | |
<a href="https://developer.tomtom.com/traffic-api/traffic-api-documentation-traffic-flow/vector-flow-tiles">here</a>. | |
</fieldset> | |
</body> | |
</html> |