I'm trying to restrict results of Leaflet geocoder (using the Nominatim provider) to one city by using geocodingQueryParams. But suggestions and results are still for whole world. I've tried several modifications (geocodingQueryParams:'liberec' / geocodingQueryParams:'city=liberec' / geocodingQueryParams:'q=liberec') but with no success. Do you have some suggestions? Or is it possible to filter by bbox in this plugin?
My code:
var geocoder=L.Control.geocoder({
placeholder: 'Hledej...',
errorMessage: 'Nenašli jsme :(',
defaultMarkGeocode: false,
geocoder: new L.Control.Geocoder.Nominatim({
geocodingQueryParams:'liberec'
})
})
.on('markgeocode', function(e) {
var bbox = e.geocode.bbox;
var poly = L.polygon([
bbox.getSouthEast(),
bbox.getNorthEast(),
bbox.getNorthWest(),
bbox.getSouthWest()
]);
map.fitBounds(poly.getBounds());
}).addTo(map);
I'm using Leaflet version 1.5.1.
Let me quote Nominatim's documentation:
Result limitation
[...]
viewbox=<x1>,<y1>,<x2>,<y2>The preferred area to find search results. Any two corner points of the box are accepted in any order as long as they span a real box.
Also, note that the geocodingQueryParams option from Leaflet-control-geocoder's Nominatim provider takes an Object, not a String; URL query parameters are usually given as a set of key-value pairs, with the parameter name as the key and the parameter value as the value.
Therefore, you can do something like:
var geocoder=L.Control.geocoder({
geocoder: new L.Control.Geocoder.Nominatim({
geocodingQueryParams: {
"viewbox": "14.07,49.02,24.02,54.85"
}
})
});
If you have an instance of L.LatLngBounds instead of a <x1>,<y1>,<x2>,<y2> string, you can leverage toBBoxString():
var bbox = L.latLngBounds(/* stuff */);
var geocoder=L.Control.geocoder({
geocoder: new L.Control.Geocoder.Nominatim({
geocodingQueryParams: {
"viewbox": bbox.toBBoxString()
}
})
});
Nominatim also allows for country and city parameters, but those are structured query parameters, only to be used when there's no query string. The following will NOT work as expected:
var geocoder=L.Control.geocoder({
geocoder: new L.Control.Geocoder.Nominatim({
geocodingQueryParams: {
"country": "FR",
"city": "Paris"
}
})
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With