UNPKG

3.06 kBJavaScriptView Raw
1goog.require('ol.Feature');
2goog.require('ol.Map');
3goog.require('ol.View');
4goog.require('ol.geom.Point');
5goog.require('ol.layer.Vector');
6goog.require('ol.source.Vector');
7goog.require('ol.style.Icon');
8goog.require('ol.style.Style');
9
10
11var iconInfo = [{
12 offset: [0, 0],
13 opacity: 1.0,
14 rotateWithView: true,
15 rotation: 0.0,
16 scale: 1.0,
17 size: [55, 55]
18}, {
19 offset: [110, 86],
20 opacity: 0.75,
21 rotateWithView: false,
22 rotation: Math.PI / 2.0,
23 scale: 1.25,
24 size: [55, 55]
25}, {
26 offset: [55, 0],
27 opacity: 0.5,
28 rotateWithView: true,
29 rotation: Math.PI / 3.0,
30 scale: 1.5,
31 size: [55, 86]
32}, {
33 offset: [212, 0],
34 opacity: 1.0,
35 rotateWithView: true,
36 rotation: 0.0,
37 scale: 1.0,
38 size: [44, 44]
39}];
40
41var i;
42
43var iconCount = iconInfo.length;
44var icons = new Array(iconCount);
45for (i = 0; i < iconCount; ++i) {
46 var info = iconInfo[i];
47 icons[i] = new ol.style.Icon({
48 offset: info.offset,
49 opacity: info.opacity,
50 rotateWithView: info.rotateWithView,
51 rotation: info.rotation,
52 scale: info.scale,
53 size: info.size,
54 crossOrigin: 'anonymous',
55 src: 'data/Butterfly.png'
56 });
57}
58
59var featureCount = 50000;
60var features = new Array(featureCount);
61var feature, geometry;
62var e = 25000000;
63for (i = 0; i < featureCount; ++i) {
64 geometry = new ol.geom.Point(
65 [2 * e * Math.random() - e, 2 * e * Math.random() - e]);
66 feature = new ol.Feature(geometry);
67 feature.setStyle(
68 new ol.style.Style({
69 image: icons[i % (iconCount - 1)]
70 })
71 );
72 features[i] = feature;
73}
74
75var vectorSource = new ol.source.Vector({
76 features: features
77});
78var vector = new ol.layer.Vector({
79 source: vectorSource
80});
81
82var map = new ol.Map({
83 renderer: /** @type {ol.renderer.Type} */ ('webgl'),
84 layers: [vector],
85 target: document.getElementById('map'),
86 view: new ol.View({
87 center: [0, 0],
88 zoom: 5
89 })
90});
91
92var overlayFeatures = [];
93for (i = 0; i < featureCount; i += 30) {
94 var clone = features[i].clone();
95 clone.setStyle(null);
96 overlayFeatures.push(clone);
97}
98
99new ol.layer.Vector({
100 map: map,
101 source: new ol.source.Vector({
102 features: overlayFeatures
103 }),
104 style: new ol.style.Style({
105 image: icons[iconCount - 1]
106 })
107});
108
109map.on('click', function(evt) {
110 var info = document.getElementById('info');
111 info.innerHTML =
112 'Hold on a second, while I catch those butterflies for you ...';
113
114 window.setTimeout(function() {
115 var features = [];
116 map.forEachFeatureAtPixel(evt.pixel, function(feature) {
117 features.push(feature);
118 return false;
119 });
120
121 if (features.length === 1) {
122 info.innerHTML = 'Got one butterfly';
123 } else if (features.length > 1) {
124 info.innerHTML = 'Got ' + features.length + ' butterflies';
125 } else {
126 info.innerHTML = 'Couldn\'t catch a single butterfly';
127 }
128 }, 1);
129});
130
131map.on('pointermove', function(evt) {
132 if (evt.dragging) {
133 return;
134 }
135 var pixel = map.getEventPixel(evt.originalEvent);
136 var hit = map.hasFeatureAtPixel(pixel);
137 map.getTarget().style.cursor = hit ? 'pointer' : '';
138});