Mapbox地理编码器的动态边界框

Mapbox地理编码器的动态边界框,mapbox,mapbox-gl-js,mapbox-gl,Mapbox,Mapbox Gl Js,Mapbox Gl,我正在尝试根据当前可见的地图边界应用Mapbox Geocoder Mapbox GL JS搜索限制。当前代码在搜索尝试时输出错误未捕获异常:对象: map.on('zoom', function() { var bounds = map.getBounds(); geocoder.options.bbox = [bounds.getNorthEast().lng, bounds.getNorthEast().lat, bounds.getSouthWest().lng,

我正在尝试根据当前可见的地图边界应用Mapbox Geocoder Mapbox GL JS搜索限制。当前代码在搜索尝试时输出错误未捕获异常:对象:

   map.on('zoom', function() {
    var bounds = map.getBounds();
    geocoder.options.bbox = [bounds.getNorthEast().lng, bounds.getNorthEast().lat, bounds.getSouthWest().lng, bounds.getSouthWest().lat];
   });
这可能吗?如果是-如何更正代码

编辑:

解决了。结果表明,bbox参数具有复杂的顺序,尤其是对于英国,其负经度和正经度均从最小值到最大值,而不是从NE到SW的LonLatBounds顺序。如果有人感兴趣-正确工作的代码将是

// 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:从MS Edge中选择的应答故障开始。小心。

请参阅API文档,正确的方法是调用

geocoder.setBbox([minX, minY, maxX, maxY]);
map.getBounds.toArray返回[sw,ne],因此您应该能够执行以下操作:

geocoder.setBbox(map.getBounds().toArray().flat());
API中没有记录geocoder.options,因此无法保证它是否能正常工作,或者是否能在新版本中继续工作