UNPKG

2.24 kBJavaScriptView Raw
1goog.require('ol.Map');
2goog.require('ol.View');
3goog.require('ol.format.KML');
4goog.require('ol.geom.Polygon');
5goog.require('ol.layer.Tile');
6goog.require('ol.layer.Vector');
7goog.require('ol.render');
8goog.require('ol.source.Stamen');
9goog.require('ol.source.Vector');
10goog.require('ol.style.Fill');
11goog.require('ol.style.Icon');
12goog.require('ol.style.Stroke');
13goog.require('ol.style.Style');
14
15
16var symbol = [[0, 0], [4, 2], [6, 0], [10, 5], [6, 3], [4, 5], [0, 0]];
17var scale;
18var scaleFunction = function(coordinate) {
19 return [coordinate[0] * scale, coordinate[1] * scale];
20};
21
22var styleCache = {};
23var styleFunction = function(feature) {
24 // 2012_Earthquakes_Mag5.kml stores the magnitude of each earthquake in a
25 // standards-violating <magnitude> tag in each Placemark. We extract it from
26 // the Placemark's name instead.
27 var name = feature.get('name');
28 var magnitude = parseFloat(name.substr(2));
29 var size = parseInt(10 + 40 * (magnitude - 5), 10);
30 scale = size / 10;
31 var style = styleCache[size];
32 if (!style) {
33 var canvas =
34 /** @type {HTMLCanvasElement} */ (document.createElement('canvas'));
35 var vectorContext = ol.render.toContext(
36 /** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d')),
37 {size: [size, size], pixelRatio: 1});
38 vectorContext.setStyle(new ol.style.Style({
39 fill: new ol.style.Fill({color: 'rgba(255, 153, 0, 0.4)'}),
40 stroke: new ol.style.Stroke({color: 'rgba(255, 204, 0, 0.2)', width: 2})
41 }));
42 vectorContext.drawGeometry(new ol.geom.Polygon([symbol.map(scaleFunction)]));
43 style = new ol.style.Style({
44 image: new ol.style.Icon({
45 img: canvas,
46 imgSize: [size, size],
47 rotation: 1.2
48 })
49 });
50 styleCache[size] = style;
51 }
52 return style;
53};
54
55var vector = new ol.layer.Vector({
56 source: new ol.source.Vector({
57 url: 'data/kml/2012_Earthquakes_Mag5.kml',
58 format: new ol.format.KML({
59 extractStyles: false
60 })
61 }),
62 style: styleFunction
63});
64
65var raster = new ol.layer.Tile({
66 source: new ol.source.Stamen({
67 layer: 'toner'
68 })
69});
70
71var map = new ol.Map({
72 layers: [raster, vector],
73 target: 'map',
74 view: new ol.View({
75 center: [0, 0],
76 zoom: 2
77 })
78});