Show Point data from GeoJSON on the Map with OpenLayers
This tutorial shows how to add a Point GeoJSON overlay to the map using OpenLayers.
-
Copy the following code, paste it into your favorite text editor, and save it as a
.htmlfile.
Check out the step-by-step tutorial How to use OpenLayers
-
Replace
YOUR_MAPTILER_API_KEY_HEREwith your own API key. Make sure to secure the key before you publish it. -
The next is up to you. You can center your map wherever you desire (modifying the
starting position) and set an appropriate zoom level (modifying thestarting zoom) to match your users’ needs. Additionally, you can change the map’s look (by updating thesource URL); choose from a range of visually appealing map styles from our extensive MapTiler standard maps, or create your own to truly differentiate your application.
-
To follow this tutorial you can use Airports from Natural Earth. Download the Airports from Natural Earth
-
Open the data tab on MapTiler choose a new dataset - upload dataset and upload ne_10m_airports.zip.
-
Publish the dataset and copy the link to the geojson.
-
Create GeoJSON layer. The following snippet creates GeoJSON layer from an external file with point geometry.
-
Add style to this layer. Here you can get the example image icon-plane-512.png
-
Display the layer.
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Display a map</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ol@v10.1.0/ol.css">
<script src="https://cdn.jsdelivr.net/npm/ol@v10.1.0/dist/ol.js"></script>
<style>
body {
margin: 0;
padding: 0;
}
#map {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
</style>
</head>
<body>
<div id="map"></div>
<script>
const key = 'YOUR_MAPTILER_API_KEY_HERE';
const attribution = new ol.control.Attribution({
collapsible: false,
});
const source = new ol.source.TileJSON({
url: `https://api.maptiler.com/maps/streets-v4/tiles.json?key=${key}`,
tileSize: 512,
crossOrigin: 'anonymous'
});
const map = new ol.Map({
layers: [
new ol.layer.Tile({
source: source
})
],
controls: ol.control.defaults.defaults({ attribution: false }).extend([attribution]),
target: 'map',
view: new ol.View({
constrainResolution: true,
center: ol.proj.fromLonLat([16.62662018, 49.2125578]),
zoom: 14
})
});
const AirportLayer = new ol.layer.Vector({
source: new ol.source.Vector({
url: `https://api.maptiler.com/data/YOUR_MAPTILER_DATASET_ID_HERE/features.json?key=${key}`,
format: new ol.format.GeoJSON(),
}),
style: new ol.style.Style({
image: new ol.style.Icon({
src: './icon-plane-512.png',
size: [512, 512],
scale: 0.03
})
})
});
map.addLayer(AirportLayer);
</script>
</body>
</html>
-
Import the new modules needed to add the new functionality.
import VectorLayer from 'ol/layer/Vector.js'; import VectorSource from 'ol/source/Vector.js'; import Style from 'ol/style/Style.js'; import Icon from 'ol/style/Icon.js'; import GeoJSON from 'ol/format/GeoJSON.js'; -
Create GeoJSON layer. The following snippet creates GeoJSON layer from an external file with point geometry.
-
Add style to this layer. Here you can get the example image icon-plane-512.png
-
Display the layer.
npm install --save ol
import Map from 'ol/Map.js';
import View from 'ol/View.js';
import TileLayer from 'ol/layer/Tile.js';
import VectorLayer from 'ol/layer/Vector.js';
import VectorSource from 'ol/source/Vector.js';
import TileJSON from 'ol/source/TileJSON.js';
import Style from 'ol/style/Style.js';
import Icon from 'ol/style/Icon.js';
import Attribution from 'ol/control/Attribution.js';
import GeoJSON from 'ol/format/GeoJSON.js';
import { defaults as defaultControls } from 'ol/control/defaults.js';
import { fromLonLat } from 'ol/proj.js';
import 'ol/ol.css';
const key = 'YOUR_MAPTILER_API_KEY_HERE';
const attribution = new Attribution({
collapsible: false,
});
const source = new TileJSON({
url: `https://api.maptiler.com/maps/streets-v4/tiles.json?key=${key}`,
tileSize: 512,
crossOrigin: 'anonymous'
});
const map = new Map({
layers: [
new TileLayer({
source: source
})
],
controls: defaultControls({attribution: false}).extend([attribution]),
target: 'map',
view: new View({
constrainResolution: true,
center: fromLonLat([16.62662018, 49.2125578]),
zoom: 14
})
});
const AirportLayer = new VectorLayer({
source: new VectorSource({
url: `https://api.maptiler.com/data/YOUR_MAPTILER_DATASET_ID_HERE/features.json?key=${key}`,
format: new GeoJSON(),
}),
style: new Style({
image: new Icon({
src: './icon-plane-512.png',
size: [512, 512],
scale: 0.03
})
})
});
map.addLayer(AirportLayer);
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="robots" content="noindex">
<title>Show Point data from GeoJSON on the Map | NPM example</title>
<link rel="stylesheet" href="./style.css">
</head>
<body>
<div id="map"></div>
<script type="module" src="./main.js"></script>
</body>
</html>
body {
margin: 0;
padding: 0;
}
#map {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}