Я пытаюсь применить ограничение поиска Mapbox Geocoder (Mapbox GL JS) в зависимости от видимых в настоящее время границ карты. Текущий код выдает ошибку при попытках поиска («uncaught exception: Object»):
map.on('zoom', function() {
var bounds = map.getBounds();
geocoder.options.bbox = [bounds.getNorthEast().lng, bounds.getNorthEast().lat, bounds.getSouthWest().lng, bounds.getSouthWest().lat];
});
Возможно ли это вообще? Если так - как исправить код?
изменить:
Решено. Оказалось, что параметр bbox имеет хитрый порядок (особенно для Великобритании с отрицательными и положительными долготами) от минимальных до максимальных значений вместо порядка LonLatBounds (от NE к SW). Если кому-то интересно - правильно работающий код будет
// notice switch from 'zoom' to 'move'
map.on('move', function() {
var bounds = map.getBounds();
var minLon = bounds.getNorthEast().lng;
var maxLon = bounds.getSouthWest().lng;
if(minLon > maxLon) {
maxLon = minLon;
var minLon = bounds.getSouthWest().lng;
}
var minLat = bounds.getNorthEast().lat;
var maxLat = bounds.getSouthWest().lat;
if(minLat > maxLat) {
maxLat = minLat;
var minLat = bounds.getSouthWest().lat;
}
if(minLon >= -180 && maxLon <= 180) geocoder.options.bbox = [minLon, minLat, maxLon, maxLat];
});
отредактировать 2: каким-то образом .flat () из-за неисправности выбранного ответа в MS Edge. Будьте осторожны.