Update a feature in realtime
Change an existing feature on your map in real-time by updating its data.
<!DOCTYPE html><html><head><meta charset="utf-8" /><title>Update a feature in realtime</title><meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" /><script src="https://unpkg.com/trackasia-gl@1.0.5/dist/trackasia-gl.js"></script><link href="https://unpkg.com/trackasia-gl@1.0.5/dist/trackasia-gl.css" rel="stylesheet" /><style> body { margin: 0; padding: 0; } #map { position: absolute; top: 0; bottom: 0; width: 100%; }</style></head><body><div id="map"></div> <script src="https://d3js.org/d3.v3.min.js" charset="utf-8"></script><script>var map = new trackasiagl.Map({container: 'map',style: 'https://maps.track-asia.com/styles/v1/streets.json?key=public_key',center: {"lat":10.762622,"lng":106.660172},zoom: 2}); map.on('load', function () {// We use D3 to fetch the JSON here so that we can parse and use it separately// from GL JS's use in the added source. You can use any request method (library// or otherwise) that you want.d3.json('https://docs.track-asia.com/assets/hike.geojson',function (err, data) {if (err) throw err; // save full coordinate list for latervar coordinates = data.features[0].geometry.coordinates; // start by showing just the first coordinatedata.features[0].geometry.coordinates = [coordinates[0]]; // add it to the mapmap.addSource('trace', { type: 'geojson', data: data });map.addLayer({'id': 'trace','type': 'line','source': 'trace','paint': {'line-color': 'orange','line-opacity': 0.75,'line-width': 5}}); // setup the viewportmap.jumpTo({ 'center': coordinates[0], 'zoom': 14 });map.setPitch(30); // on a regular basis, add more coordinates from the saved list and update the mapvar i = 0;var timer = window.setInterval(function () {if (i < coordinates.length) {data.features[0].geometry.coordinates.push(coordinates[i]);map.getSource('trace').setData(data);map.panTo(coordinates[i]);i++;} else {window.clearInterval(timer);}}, 10);});});</script> </body></html>