Как ограничить результаты Leaflet-control-geocoder по городу или bbox?

Я пытаюсь ограничить результаты геокодера листовок (используя провайдера Nominatim) одним город с помощью geocodingQueryParams. Но предложения и результаты по-прежнему для всего мира. Я пробовал несколько модификаций (geocodingQueryParams:'liberec' / geocodingQueryParams:'city=liberec' / geocodingQueryParams:'q=liberec'), но безуспешно. У вас есть предложения? Или в этом плагине можно фильтровать по bbox?

Мой код:

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

Я использую Leaflet версии 1.5.1.


person daniel.vrbik    schedule 31.07.2019    source источник


Ответы (1)


Позвольте мне процитировать документацию Nominatim:

Ограничение результата

[...]

viewbox=<x1>,<y1>,<x2>,<y2>

Предпочтительная область для поиска результатов поиска. Любые две угловые точки параллелепипеда принимаются в любом порядке, если они охватывают реальную параллелепипед.

Также обратите внимание, что опция geocodingQueryParams от провайдера Nominatim для Leaflet-control-geocoder принимает Object, а не String; Параметры URL-запроса обычно задаются в виде набора пар ключ-значение, где имя параметра является ключом, а значение параметра — значением.

Поэтому вы можете сделать что-то вроде:

var geocoder=L.Control.geocoder({
    geocoder: new L.Control.Geocoder.Nominatim({
        geocodingQueryParams: {
            "viewbox": "14.07,49.02,24.02,54.85"
        }
    })
});

Если у вас есть экземпляр L.LatLngBounds вместо строки <x1>,<y1>,<x2>,<y2> , вы можете использовать toBBoxString()< /а>:

var bbox = L.latLngBounds(/* stuff */);

var geocoder=L.Control.geocoder({
    geocoder: new L.Control.Geocoder.Nominatim({
        geocodingQueryParams: {
            "viewbox": bbox.toBBoxString()
        }
    })
});

Nominatim также допускает параметры country и city, но это параметры структурированного запроса, только для использования, когда нет строки запроса. Следующее НЕ будет работать должным образом:

var geocoder=L.Control.geocoder({
    geocoder: new L.Control.Geocoder.Nominatim({
        geocodingQueryParams: {
            "country": "FR",
            "city": "Paris"
        }
    })
});
person IvanSanchez    schedule 31.07.2019
comment
Я нашел еще один отсутствующий параметр «ограниченный»: 1 в случае окна просмотра. Без этого не работало. Но спасибо большое, работает! :) - person daniel.vrbik; 31.07.2019