UNPKG

2.36 kBJavaScriptView Raw
1goog.require('ol.Feature');
2goog.require('ol.Map');
3goog.require('ol.Observable');
4goog.require('ol.View');
5goog.require('ol.control');
6goog.require('ol.easing');
7goog.require('ol.geom.Point');
8goog.require('ol.layer.Tile');
9goog.require('ol.layer.Vector');
10goog.require('ol.proj');
11goog.require('ol.source.OSM');
12goog.require('ol.source.Vector');
13goog.require('ol.style.Circle');
14goog.require('ol.style.Stroke');
15goog.require('ol.style.Style');
16
17
18var map = new ol.Map({
19 layers: [
20 new ol.layer.Tile({
21 source: new ol.source.OSM({
22 wrapX: false
23 })
24 })
25 ],
26 controls: ol.control.defaults({
27 attributionOptions: {
28 collapsible: false
29 }
30 }),
31 target: 'map',
32 view: new ol.View({
33 center: [0, 0],
34 zoom: 1
35 })
36});
37
38var source = new ol.source.Vector({
39 wrapX: false
40});
41var vector = new ol.layer.Vector({
42 source: source
43});
44map.addLayer(vector);
45
46function addRandomFeature() {
47 var x = Math.random() * 360 - 180;
48 var y = Math.random() * 180 - 90;
49 var geom = new ol.geom.Point(ol.proj.transform([x, y],
50 'EPSG:4326', 'EPSG:3857'));
51 var feature = new ol.Feature(geom);
52 source.addFeature(feature);
53}
54
55var duration = 3000;
56function flash(feature) {
57 var start = new Date().getTime();
58 var listenerKey;
59
60 function animate(event) {
61 var vectorContext = event.vectorContext;
62 var frameState = event.frameState;
63 var flashGeom = feature.getGeometry().clone();
64 var elapsed = frameState.time - start;
65 var elapsedRatio = elapsed / duration;
66 // radius will be 5 at start and 30 at end.
67 var radius = ol.easing.easeOut(elapsedRatio) * 25 + 5;
68 var opacity = ol.easing.easeOut(1 - elapsedRatio);
69
70 var style = new ol.style.Style({
71 image: new ol.style.Circle({
72 radius: radius,
73 snapToPixel: false,
74 stroke: new ol.style.Stroke({
75 color: 'rgba(255, 0, 0, ' + opacity + ')',
76 width: 0.25 + opacity
77 })
78 })
79 });
80
81 vectorContext.setStyle(style);
82 vectorContext.drawGeometry(flashGeom);
83 if (elapsed > duration) {
84 ol.Observable.unByKey(listenerKey);
85 return;
86 }
87 // tell OpenLayers to continue postcompose animation
88 map.render();
89 }
90 listenerKey = map.on('postcompose', animate);
91}
92
93source.on('addfeature', function(e) {
94 flash(e.feature);
95});
96
97window.setInterval(addRandomFeature, 1000);