Mapbox Geocoder的动态边界框

问题描述 投票:0回答:1

我正在尝试根据当前可见的地图边界来应用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参数从最小值到最大值具有复杂的顺序(特别是对于同时显示负经度和正经度的UK),而不是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];
});
mapbox mapbox-gl-js mapbox-gl
1个回答
0
投票

请参阅API文档https://github.com/mapbox/mapbox-gl-geocoder/blob/master/API.md#setbbox的正确方法是调用

geocoder.setBbox([minX, minY, maxX, maxY]);

[map.getBounds().toArray()返回[sw, ne],因此您应该可以:

geocoder.setBbox(map.getBounds().toArray().flat());

geocoder.options没有记录在API中,因此无法保证它是否可以工作或是否可以在新版本中继续工作。

© www.soinside.com 2019 - 2024. All rights reserved.