Icon Symbolizer

Example using an icon to symbolize a point.

Example using an icon to symbolize a point.

<!DOCTYPE html>
    <title>Icon Symbolizer</title>
    <link rel="stylesheet" href="https://openlayers.org/en/v5.3.0/css/ol.css" type="text/css">
    <!-- The line below is only needed for old environments like Internet Explorer and Android 4.x -->
    <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script>
    <script src="https://code.jquery.com/jquery-2.2.3.min.js"></script>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
      #map {
        position: relative;
    <div id="map" class="map"><div id="popup"></div></div>
      import Feature from 'ol/Feature.js';
      import Map from 'ol/Map.js';
      import Overlay from 'ol/Overlay.js';
      import View from 'ol/View.js';
      import Point from 'ol/geom/Point.js';
      import {Tile as TileLayer, Vector as VectorLayer} from 'ol/layer.js';
      import TileJSON from 'ol/source/TileJSON.js';
      import VectorSource from 'ol/source/Vector.js';
      import {Icon, Style} from 'ol/style.js';

      var iconFeature = new Feature({
        geometry: new Point([0, 0]),
        name: 'Null Island',
        population: 4000,
        rainfall: 500

      var iconStyle = new Style({
        image: new Icon(/** @type {module:ol/style/Icon~Options} */ ({
          anchor: [0.5, 46],
          anchorXUnits: 'fraction',
          anchorYUnits: 'pixels',
          src: 'data/icon.png'


      var vectorSource = new VectorSource({
        features: [iconFeature]

      var vectorLayer = new VectorLayer({
        source: vectorSource

      var rasterLayer = new TileLayer({
        source: new TileJSON({
          url: 'https://api.tiles.mapbox.com/v3/mapbox.geography-class.json?secure',
          crossOrigin: ''

      var map = new Map({
        layers: [rasterLayer, vectorLayer],
        target: document.getElementById('map'),
        view: new View({
          center: [0, 0],
          zoom: 3

      var element = document.getElementById('popup');

      var popup = new Overlay({
        element: element,
        positioning: 'bottom-center',
        stopEvent: false,
        offset: [0, -50]

      // display popup on click
      map.on('click', function(evt) {
        var feature = map.forEachFeatureAtPixel(evt.pixel,
          function(feature) {
            return feature;
        if (feature) {
          var coordinates = feature.getGeometry().getCoordinates();
            placement: 'top',
            html: true,
            content: feature.get('name')
        } else {

      // change mouse cursor when over marker
      map.on('pointermove', function(e) {
        if (e.dragging) {
        var pixel = map.getEventPixel(e.originalEvent);
        var hit = map.hasFeatureAtPixel(pixel);
        map.getTarget().style.cursor = hit ? 'pointer' : '';