Как да ограничим резултатите от 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()< /a>:

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
Намерих друг липсващ параметър 'bounded':1 в случай на viewbox. Без това не работеше. Но благодаря много, работи! :) - person daniel.vrbik; 31.07.2019