Animate a point
Animate the position of a point by updating a GeoJSON source on each frame.
Mapbox GL unsupported
Mapbox GL requires WebGL support. Please check that you are using a supported browser and that WebGL is enabled.
<!DOCTYPE html><html><head><meta charset='utf-8' /><title>Animate a point</title><meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' /><script src='https://api.tiles.mapbox.com/mapbox-gl-js/v0.53.0/mapbox-gl.js'></script><link href='https://api.tiles.mapbox.com/mapbox-gl-js/v0.53.0/mapbox-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>mapboxgl.accessToken = '<your access token here>';var map = new mapboxgl.Map({container: 'map',style: 'mapbox://styles/mapbox/streets-v9',center: [0, 0],zoom: 2}); var radius = 20; function pointOnCircle(angle) {return {"type": "Point","coordinates": [Math.cos(angle) * radius,Math.sin(angle) * radius]};} map.on('load', function () {// Add a source and layer displaying a point which will be animated in a circle.map.addSource('point', {"type": "geojson","data": pointOnCircle(0)}); map.addLayer({"id": "point","source": "point","type": "circle","paint": {"circle-radius": 10,"circle-color": "#007cbf"}}); function animateMarker(timestamp) {// Update the data to a new position based on the animation timestamp. The// divisor in the expression `timestamp / 1000` controls the animation speed.map.getSource('point').setData(pointOnCircle(timestamp / 1000)); // Request the next frame of the animation.requestAnimationFrame(animateMarker);} // Start the animation.animateMarker(0);});</script> </body></html>