Animate a point along a line
This example animates the position of a point by updating a GeoJSON source on each frame.
It first defines the animation as a GeoJSON object. Then it adds a GeoJSON source referring to that GeoJSON, and adds a circle layer
that uses that source.
Finally, it starts the animation with the JavaScript window.requestAnimationFrame()
method to continuously update the GeoJSON object, resulting in a moving circle on the map.
<!DOCTYPE html><html><head><meta charset="utf-8" /><title>Animate a point along a line</title><meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" /><script src="https://cdn.ndrive.com/nmapsgl/v.1.6.8/nmaps-gl.js"></script><link href="https://cdn.ndrive.com/nmapsgl/v.1.6.8/nmaps-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> // TO MAKE THE MAP APPEAR YOU MUST ADD YOUR ACCESS TOKEN nmapsgl.accessToken = '<your access token here>'; const map = new nmapsgl.Map({container: 'map',style: 'Streets',center: [0, 0],zoom: 2}); const radius = 20; function pointOnCircle(angle) {return {'type': 'Point','coordinates': [Math.cos(angle) * radius, Math.sin(angle) * radius]};} map.on('load', () => {// 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>