接到一个需求,把地图上一个选区的建筑物高亮标识。但是用 mapbox 生成的 3D 建筑物没有唯一的 ID 标识,无法判断具体的建筑物名称。
通过科学搜索找到了如下两个demo。
单击选中建筑物
在选中 demo 中,了解到了可以采用 新建一个图层,再动态的设置该图层的 data,来达到修改楼宇样式的方法。
// 增加一个空数据
再使用 map.queryRenderedFeatures api 来获取渲染的 Feature objects。
点开属性发现了一些经纬度信息,推测是用来保存顶点位置的。
如此一来只要把 Feature objects 的顶点经纬度和我们自己的区域经纬度做一次对比,判断所有的顶点坐标是否落在区域内即可。
最终把过滤的 Feature objects 对象赋值到新图层即可。
不过这种方法还有一个bug,生成的图形会”穿模“,颜色会混合在一起闪动, 我的解决办法是调整覆盖图层的高度。不知道有没有更好的解决办法。
demo :
Display buildings in 3Dmydaoyuan.github.io题图的demo:
https://mydaoyuan.github.io/mapboxdemo/index.htmlmydaoyuan.github.io