How to search places using OpenLayers geocoding control
This tutorial shows how to search for places using MapTiler geocoding control in OpenLayers. The geocoding control facilitates the use of the MapTiler Geocoding API.
-
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.
-
Include the geocoder component JavaScript and CSS files in the
<head>of your HTML file. -
Instantiate the geocoding control and add it to the map.
-
Create the
GeocodingControlCSS style. Add the GeocodingControl style to your stylesheet.
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
<title>MapTiler Geocoding control</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>
<script
src="https://cdn.maptiler.com/maptiler-geocoding-control/v3.0.0/openlayers.umd.js"></script>
<style>
body {
margin: 0;
padding: 0;
}
#map {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
.openlayers-ctrl-geocoder {
position: absolute;
right: 0.5em;
top: 0.5em;
}
</style>
</head>
<body>
<div id="map">
<a href="https://www.maptiler.com" style="position:absolute;left:10px;bottom:10px;z-index:999;"><img
src="https://api.maptiler.com/resources/logo.svg" alt="MapTiler logo"></a>
</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}`, // source URL
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]), // starting position [lng, lat]
zoom: 14 // starting zoom
})
});
const gc = new maptilerGeocoder.GeocodingControl({
apiKey: key,
});
map.addControl(gc);
</script>
</body>
</html>
-
Include the geocoder component JavaScript and CSS files in your JS file.
-
Instantiate the geocoding control and add it to the map.
-
Create the
GeocodingControlCSS style. Add the GeocodingControl style to your stylesheet.
npm install --save ol @maptiler/geocoding-control
import Map from 'ol/Map.js';
import View from 'ol/View.js';
import TileLayer from 'ol/layer/Tile.js';
import TileJSON from 'ol/source/TileJSON.js';
import Attribution from 'ol/control/Attribution.js';
import { defaults as defaultControls } from 'ol/control/defaults.js';
import { fromLonLat } from 'ol/proj.js';
import 'ol/ol.css';
import { GeocodingControl } from "@maptiler/geocoding-control/openlayers";
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}`, // source URL
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]), // starting position [lng, lat]
zoom: 14 // starting zoom
})
});
const gc = new GeocodingControl({
apiKey: key,
});
map.addControl(gc);
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="robots" content="noindex">
<title>How to search places using OpenLayers geocoding control | NPM example</title>
<link rel="stylesheet" href="./style.css">
</head>
<body>
<div id="map">
<a href="https://www.maptiler.com" style="position:absolute;left:10px;bottom:10px;z-index:999;"><img src="https://api.maptiler.com/resources/logo.svg" alt="MapTiler logo"></a>
</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;
}
.openlayers-ctrl-geocoder {
position: absolute;
right: 0.5em;
top: 0.5em;
}
How to position the geocoding control
To position the geocoding control effectively on your map interface, you’ll need to utilize the CSS class .openlayers-ctrl-geocoder. This class provides the flexibility to place the control precisely where you want it within your map layout. Similar to other map control elements, the positioning requires the use of position: absolute; declaration in your CSS, followed by specific positioning.
For example, to achieve placement in the bottom right corner of the map, you can implement the appropriate CSS positioning values. This approach ensures the geocoding control remains fixed in your desired location while maintaining proper functionality and user accessibility.
Learn more
For all search options, visit the MapTiler Geocoding API reference; for example, specifying the language of the results, etc.
Do you want to see how the geocoding component works and its options? Check the MapTiler Geocoding control repository.
Are you currently using a different map library? No worries! Learn how to incorporate the geocoding control functionality with MapTiler SDK JS (MapTiler SDK JS Geocoding control), Leaflet (Leaflet Geocoding control), or MapLibre GL JS (MapLibre GL JS Geocoding control).