ol.layer.Vector

by ahocevar

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/ol3/3.19.1/ol.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ol3/3.19.1/ol.css">
<div id="map"></div>
<form>
  <input type="checkbox" checked name="high">
  <label for="high">Magnitude &gt;= 5</label>
  <input type="checkbox" checked name="low">
  <label for="high">Magnitude &lt; 5</label>

</form>

CSS

#map {
  width: 512px;
  height: 256px;
}

JavaScript

var lowMagnitude = new ol.style.Style({
  image: new ol.style.Icon({
    src: 'https://rawgit.com/mapbox/maki/master/icons/triangle-15.svg'
  })
});

var highMagnitude = new ol.style.Style({
  image: new ol.style.Icon({
    src: 'https://rawgit.com/mapbox/maki/master/icons/danger-15.svg'
  })
});

var objects = new ol.layer.Vector({
  title: 'Earthquakes',
  source: new ol.source.Vector({
    format: new ol.format.GeoJSON(),
    url: 'https://rawgit.com/openlayers/workshop/v3.16.0/src/en/data/layers/7day-M2.5.json'
  }),
  style: function(feature, resolution) {
    var title = feature.get('title');
    var magnitude = parseFloat(title.replace(/[^0-9\.]/g, ''));
    return magnitude >= 5 ?
      (form.high.checked && highMagnitude) :
      (form.low.checked && lowMagnitude);
  }
});

var form = document.forms[0];
form.onclick = function() {
  objects.changed();
}

var map = new ol.Map({
  target: 'map',
  layers: [
    new ol.layer.Tile({
      source: new ol.source.OSM()
    }),
    objects
  ],
  view: new ol.View({
    center: [0, 0],
    zoom: 1
  })
});