Limit geocoder results to a named region

Use the mapbox-gl-geocoder control to search for places using Mapbox Geocoding API limiting results to a region.

<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8' />
    <title>Limit geocoder results to a named region</title>
    <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
    <script src='https://api.tiles.mapbox.com/mapbox-gl-js/v0.44.1/mapbox-gl.js'></script>
    <link href='https://api.tiles.mapbox.com/mapbox-gl-js/v0.44.1/mapbox-gl.css' rel='stylesheet' />
    <style>
        body { margin:0; padding:0; }
        #map { position:absolute; top:0; bottom:0; width:100%; }
    </style>
</head>
<body>

<script src='https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v2.2.0/mapbox-gl-geocoder.min.js'></script>
<link rel='stylesheet' href='https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v2.2.0/mapbox-gl-geocoder.css' type='text/css' />
<div id='map'></div>

<script>
mapboxgl.accessToken = '<your access token here>';
var map = new mapboxgl.Map({
    container: 'map',
    style: 'mapbox://styles/mapbox/streets-v9',
    center: [146.359, -32.648],
    zoom: 4
});

map.addControl(new MapboxGeocoder({
    accessToken: mapboxgl.accessToken,

    // limit results to Australia
    country: 'au',

    // further limit results to the geographic bounds representing the region of
    // New South Wales
    bbox: [139.965, -38.030, 155.258, -27.839],

    // apply a client side filter to further limit results to those strictly within
    // the New South Wales region
    filter: function (item) {
        // returns true if item contains New South Wales region
        return item.context.map((i) => {
            // id is in the form {index}.{id} per https://github.com/mapbox/carmen/blob/master/carmen-geojson.md
            // this example attempts to find the `region` named `New South Wales`
            return (i.id.split('.').shift() === 'region' && i.text === 'New South Wales');
        }).reduce((acc, cur) => {
            return acc || cur;
        });
    }
}));
</script>

</body>
</html>
Copy example