Animate a point
Animate the position of a point by updating a GeoJSON source on each frame.
<!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://cdn.jsdelivr.net/npm/@goongmaps/goong-js@1.0.9/dist/goong-js.js"></script><link href="https://cdn.jsdelivr.net/npm/@goongmaps/goong-js@1.0.9/dist/goong-js.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>goongjs.accessToken = '8qzxZAuxcsctSlmOszInchP1A5GrmRBHJwCBCjO6';var map = new goongjs.Map({container: 'map',style: 'https://tiles.goong.io/assets/goong_map_web.json',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>