Animates using distance along line allowing for animation speed control.
Built with blockbuilder.org
| license: mit |
Animates using distance along line allowing for animation speed control.
Built with blockbuilder.org
| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <meta charset='utf-8' /> | |
| <title></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.12.0/mapbox-gl.js'></script> | |
| <script src='https://api.tiles.mapbox.com/mapbox.js/plugins/turf/v2.0.2/turf.min.js'></script> | |
| <link href='https://api.tiles.mapbox.com/mapbox-gl-js/v0.12.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 = 'pk.eyJ1IjoidHdlbGNoIiwiYSI6Il9pX3dtb3cifQ.YcYnsO0X2p3x0HpHPFfleg'; | |
| var map = new mapboxgl.Map({ | |
| container: 'map', | |
| style: 'mapbox://styles/mapbox/streets-v8', | |
| center: [-122.580067, 45.548602], | |
| zoom: 20 | |
| }); | |
| var iPath = turf.linestring([ | |
| [ -122.579915799999981, 45.5485545, 0.0 ], [ -122.57994530000002, 45.5485536, 0.0 ], [ -122.579944, 45.5485996, 0.0 ], [ -122.580011, 45.54860810000001, 0.0 ], [ -122.5799507, 45.5486043, 0.0 ], [ -122.579954700000016, 45.5485489, 0.0 ], [ -122.579903799999983, 45.5485489, 0.0 ] | |
| ]); | |
| var iPathLength = turf.lineDistance(iPath, 'miles'); | |
| var iPoint = turf.along(iPath, 0, 'miles'); | |
| map.on('style.load', function () { | |
| map.addSource("path", { | |
| "type": "geojson", | |
| "data": iPath, | |
| "maxzoom": 20 | |
| }); | |
| map.addLayer({ | |
| "id": "path", | |
| "type": "line", | |
| "source": "path", | |
| "layout": { | |
| "line-join": "round", | |
| "line-cap": "round" | |
| }, | |
| "paint": { | |
| "line-color": "#888", | |
| "line-width": 2 | |
| } | |
| }); | |
| map.addSource("peep", { | |
| "type": "geojson", | |
| "data": iPoint, | |
| "maxzoom": 20 | |
| }); | |
| map.addLayer({ | |
| "id": "peep", | |
| "type": "circle", | |
| "source": "peep", | |
| "layout": {}, | |
| "paint": { | |
| "circle-radius": 4 | |
| } | |
| }); | |
| var step = 0; | |
| var numSteps = 500; //Change this to set animation resolution | |
| var timePerStep = 20; //Change this to alter animation speed | |
| var pSource = map.getSource('peep'); | |
| var interval = setInterval(function() { | |
| step += 1; | |
| if (step > numSteps) { | |
| clearInterval(interval); | |
| } else { | |
| var curDistance = step / numSteps * iPathLength; | |
| var iPoint = turf.along(iPath, curDistance, 'miles'); | |
| pSource.setData(iPoint); | |
| console.log(curDistance); | |
| } | |
| }, timePerStep); | |
| }); | |
| </script> | |
| </body> | |
| </html> |