Search code examples
javascriptmapsopenlayersopenstreetmap

draw point on map given coordinates with openlayers?


I'm trying to plot about 300 points on an openlayers map from a table of about 300 latitude and longitude cordinates. All I found on how to do it is the draw features from their website, but it can plot a point from a mouse click by the user, not automatically. Is there a way to plot a point on the map from the code? Thank you.


Solution

  • To draw points (or any other geometry) on the map, you just need to,

    1. Create a source, in this case a vector source, with the features you want to draw.
    2. Create a layer, in this case a vector layer, with the source from step 1, and the style you prefer.
    3. Add the layer to the map.

    That is all you need to do. Take a look at the example I made for you, it generate 300 random points features and then follow the steps I describe before.

    <!doctype html>
    <html lang="en">
      <head>
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.2.1/css/ol.css" type="text/css">
        <style>
          .map {
            height: 400px;
            width: 100%;
          }
        </style>
        <script src="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.2.1/build/ol.js"></script>
        <title>Random Points From Code</title>
      </head>
      <body>
        <h2>300 Random Points From Code</h2>
        <div id="map" class="map"></div>
        <script type="text/javascript">
          // generate 300 random points features
          const getRandomNumber = function (min, ref) {
            return Math.random() * ref + min;
          }
          const features = [];
          for (i = 0; i < 300; i++) {
            features.push(new ol.Feature({
              geometry: new ol.geom.Point(ol.proj.fromLonLat([
                -getRandomNumber(50, 50), getRandomNumber(10, 50)
              ]))
            }));
          }
          // create the source and layer for random features
          const vectorSource = new ol.source.Vector({
            features
          });
          const vectorLayer = new ol.layer.Vector({
            source: vectorSource,
            style: new ol.style.Style({
              image: new ol.style.Circle({
                radius: 2,
                fill: new ol.style.Fill({color: 'red'})
              })
            })
          });
          // create map and add layers
          const map = new ol.Map({
            target: 'map',
            layers: [
              new ol.layer.Tile({
                source: new ol.source.OSM()
              }),
              vectorLayer
            ],
            view: new ol.View({
              center: ol.proj.fromLonLat([-75, 35]),
              zoom: 2
            })
          });
        </script>
      </body>
    </html>