---
title: "How to search places using OpenLayers geocoding control | Openlayers | Geocoding"
description: "Search for places using OpenLayers geocoding control."
---

> For AI agents: a documentation index is available at [/llms.txt](https://docs.maptiler.com/llms.txt). Markdown versions of all pages are available by appending .md to any URL.

# How to search places using OpenLayers geocoding control

This tutorial shows how to search for places using MapTiler geocoding control in [OpenLayers](https://docs.maptiler.com/openlayers/). The geocoding control facilitates the use of the [MapTiler Geocoding API](https://www.maptiler.com/cloud/geocoding/).

1.  Copy the following code, paste it into your favorite text editor, and save it as a `.html` file.
    
    ```html
    <!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>
         <style>
           #map {position: absolute; top: 0; right: 0; bottom: 0; left: 0;}
         </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
             })
           });
         </script>
       </body>
     </html>
    ```
    

Check out the step-by-step tutorial [How to use OpenLayers](https://docs.maptiler.com/openlayers/examples/how-to-use-openlayers/)

1.  Install the npm package.
    
    ```bash
    npm install --save ol
    ```
    
2.  Include the CSS file.
    
    If you have a bundler that can handle CSS, you can [`import`](#) the CSS or include it with a [`<link>`](#) in the head of the document via the CDN
    
    ```js
    import "ol/ol.css";
    ```
    
    ```html
    <link href='https://cdn.jsdelivr.net/npm/ol@v10.1.0/dist/ol.js' rel='stylesheet' />
    ```
    
3.  Include the following code in your JavaScript file (Example: main.js).
    
    ```js
    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';
        
    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
      })
    });
    ```
    

1.  Replace `YOUR_MAPTILER_API_KEY_HERE` with [your own API key](https://cloud.maptiler.com/account/keys/). Make sure to [secure the key](https://docs.maptiler.com/guides/credentials/api-key/#secure-key) before you publish it.
    
2.  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 the `starting zoom`) to match your users’ needs. Additionally, you can change the map’s look (by updating the `source URL`); choose from a range of visually appealing map styles from our extensive [MapTiler standard maps](https://cloud.maptiler.com/maps/), or create your own to truly differentiate your application.
    

1.  Include the geocoder component JavaScript and CSS files in the `<head>` of your HTML file.
    
    ```html
    <script src="https://cdn.maptiler.com/maptiler-geocoding-control/v3.1.0/openlayers.umd.js"></script>
    ```
    
2.  Instantiate the geocoding control and add it to the map.
    
    ```js
    const gc = new maptilerGeocoder.GeocodingControl({
       apiKey: key,
     });
        
     map.addControl(gc);
    ```
    
3.  Create the `GeocodingControl` CSS style. Add the GeocodingControl style to your stylesheet.
    
    ```css
    .openlayers-ctrl-geocoder {
       position: absolute;
       right: 0.5em;
       top: 0.5em;
     }
    ```
    

### Complete source code

```html
<!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.1.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>
```

1.  Include the geocoder component JavaScript and CSS files in your JS file.
    
    ```js
    import { GeocodingControl } from "@maptiler/geocoding-control/openlayers";
    ```
    
2.  Instantiate the geocoding control and add it to the map.
    
    ```js
    const gc = new GeocodingControl({
       apiKey: key,
     });
        
     map.addControl(gc);
    ```
    
3.  Create the `GeocodingControl` CSS style. Add the GeocodingControl style to your stylesheet.
    
    ```css
    .openlayers-ctrl-geocoder {
       position: absolute;
       right: 0.5em;
       top: 0.5em;
     }
    ```
    

### Complete source code

```bash
npm install --save ol @maptiler/geocoding-control
```

#### main.js

```js
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);
```

#### index.html

```html
<!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>
```

#### style.css

```css
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.

```css
.openlayers-ctrl-geocoder {
  position: absolute;
  right: 0.5em;
  top: 0.5em;
}
```

## Learn more

For all search options, visit the [MapTiler Geocoding API reference](https://docs.maptiler.com/cloud/api/geocoding/); 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](https://github.com/maptiler/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](https://docs.maptiler.com/sdk-js/examples/geocoder-component/)), **Leaflet** ([Leaflet Geocoding control](https://docs.maptiler.com/leaflet/examples/geocoding-control/)), or **MapLibre GL JS** ([MapLibre GL JS Geocoding control](https://docs.maptiler.com/maplibre/examples/geocoding-control/)).
