javascript - Mapbox GL JS getBounds()/fitBounds()

标签 javascript json mapbox

我正在使用 Mapbox GL JS v0.14.2,并且我已经通过文档进行了高低搜索,对此知之甚少。

如果您使用标准的 JS API,使用他们提供的示例(https://www.mapbox.com/mapbox.js/example/v1.0.0/fit-map-to-markers/)“将 map 拟合到标记”是非常清楚的;但是使用 GL api 时的设置完全不同。 GL API 有 getBounds() ( https://www.mapbox.com/mapbox-gl-js/api/#Map.getBounds ) 但是因为你没有像标准 JS API 那样的命名层,所以我正在努力研究如何使用 getBounds() 完全没有。

我找到了这个 (Mapbox GL JS API Set Bounds),但肯定不是正确的答案吗?

这是我的大部分设置;不包括 JSON 设置和其他选项。

mapboxgl.accessToken = '<myaccesstoken>';

var markers = <?php echo $programme_json; ?>;

var map = new mapboxgl.Map({
    container: 'map',
    style: 'mapbox://styles/richgc/cikyo5bse00nqb0lxebkfn2bm',
    center: [-1.470085, 53.381129],
    zoom: 15
});

map.on('style.load', function() {
    map.addSource('markers', {
        'type': 'geojson',
        'data': markers
    });

    map.addLayer({
        "id": "markers",
        "interactive": true,
        "type": "symbol",
        "source": "markers",
        "layout": {
            "icon-image": "venue-map-icon-blue",
            'icon-size': 0.5,
            "icon-allow-overlap": true
        }
    });

    map.scrollZoom.disable();

});

我尝试了以下方法:

alert(map.getBounds()); // LngLatBounds(LngLat(-1.4855345239256508, 53.37642500812015), LngLat(-1.4546354760740883, 53.38583247227842))
var bounds = [[-1.4855345239256508, 53.37642500812015],[-1.4546354760740883, 53.38583247227842]]
map.fitBounds(bounds);

所以我知道如何拟合Bounds,但我不确定如何获取它们map.getBounds() 似乎只是返回设置的中心位置 lng/lat。

标记 JSON:

var markers = {"type":"FeatureCollection","features":[{"type":"Feature","properties":{"title":"Site Gallery","url":"\/Freelance\/art-sheffield-2016\/programme\/site-gallery\/","summary":"Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Donec id justo. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Suspendisse feugiat. Etiam rhoncus.","image":"\/Freelance\/art-sheffield-2016\/site\/assets\/files\/1032\/site_gallery.jpg","marker-symbol":"venue-map-icon-blue","colour":"blue"},"geometry":{"type":"Point","coordinates":["-1.466439","53.376842"]}},{"type":"Feature","properties":{"title":"Moore Street Substation","url":"\/Freelance\/art-sheffield-2016\/programme\/moore-street-substation\/","summary":"","image":null,"marker-symbol":"venue-map-icon-green","colour":"green"},"geometry":{"type":"Point","coordinates":["-1.477881","53.374798"]}},{"type":"Feature","properties":{"title":"S1 Artspace","url":"\/Freelance\/art-sheffield-2016\/programme\/s1-artspace\/","summary":"","image":null,"marker-symbol":"venue-map-icon-red","colour":"red"},"geometry":{"type":"Point","coordinates":["-1.459620","53.380562"]}}]};

最佳答案

如果您想使 map 适合标记,您可以创建包含所有标记的边界。

var bounds = new mapboxgl.LngLatBounds();

markers.features.forEach(function(feature) {
    bounds.extend(feature.geometry.coordinates);
});

map.fitBounds(bounds);

关于javascript - Mapbox GL JS getBounds()/fitBounds(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35586360/

相关文章:

json - 使用 AKKA Stream 解码分块 JSON

mapbox - 如何获取过滤后的Mapbox图层的结果?

javascript - 如何创建html5自定义验证?

javascript - 使用 JSON 传递对象

JavaScript 循环对象以将数组附加到数组

javascript - 如何使用 json 响应中的值中的 img 源?

mapbox - 删除 mapbox gl js 中的源不会删除其图层

ios - 在 MapBox 上平移时 RMPolylineAnnotation 外观发生变化

javascript - AWS 无服务器 Web 应用程序示例

javascript - 如何将 Javascript 片段加载到 DOM 中