Mapbox GL JS:缩放到过滤多边形?

前端之家收集整理的这篇文章主要介绍了Mapbox GL JS:缩放到过滤多边形?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用MapBox GL JS来显示多边形图层.我想允许用户从下拉列表中选择一个名称,然后突出显示并缩放到匹配的多边形.

我已经知道如何使用map.setFilter突出显示匹配的多边形,但我不知道如何缩放到匹配多边形的边界.这是我目前的代码

map.addLayer({
    'id': 'polygon_hover','source': 'mysource','source-layer': 'mylayer','type': 'fill','paint': {
        'fill-color': 'red',"fill-opacity": 0.6
    },"filter": ["==",'CUSTNAME',""]
});
// Get details from dropdown
custname.on("change",function(e) {
    // get details of name from select event
    map.setFilter('polygon_hover',["==",name]);
    // Get bounds of filtered polygon somehow?
    // var bounds = ??;
    // map.fitBounds(bounds);
});

我已经检查了Mapbox example of zooming to bounds,但它假设你已经知道了界限是什么.

有没有办法可以让多边形的边界与MapBox中的地图过滤器匹配?

解决方法

我找到了解决问题的方法. Leaflet有一个 polygon类,它接受一个多边形坐标数组,并有一个名为getBounds()的函数返回西南和东北边界.但是,Leaflet不遵循LngLat的惯例,其格式为LatLng.因此,您必须切换它.我从MapBox Show drawn polygon area中拿出了一个例子,并准确地添加了你想要的东西.
var polygon = data.features[0].geometry.coordinates;
var fit = new L.Polygon(polygon).getBounds();
var southWest = new mapBoxgl.LngLat(fit['_southWest']['lat'],fit['_southWest']['lng']);
var northEast = new mapBoxgl.LngLat(fit['_northEast']['lat'],fit['_northEast']['lng']);
var center = new mapBoxgl.LngLatBounds(southWest,northEast).getCenter();
// map.flyTo({center: center,zoom: 10});
map.fitBounds(new mapBoxgl.LngLatBounds(southWest,northEast));
原文链接:https://www.f2er.com/js/157978.html

猜你在找的JavaScript相关文章