在地图展示场景中,填充图层可以用来展示区域范围或空间分布等信息,广泛应用于城市规划、土地利用、人口分布等领域。
本代码实现了基于WebGL的地图填充图层交互功能,用户可以动态添加和移除填充图层,并在地图上进行交互操作,如悬浮选中和点击获取数据信息。
1. 导入地图库
首先,需要导入百度地图WebGL库和相关插件库。
await Promise.all([
this.loadScripts([
'https://api.map.baidu.com/api?type=subway&v=1.0&ak=cxtWZ9zGiLlLdQwBSuGGwpanwqfaLvEc&services=&t=20240319170303',
'http://api.map.baidu.com/getscript?type=webgl&v=1.0&ak=cxtWZ9zGiLlLdQwBSuGGwpanwqfaLvEc&services=&t=20240319170303',
// ...其他插件库
]),
this.loadStyles([
'http://api.map.baidu.com/res/webgl/10/bmap.css',
// ...其他插件库样式
]),
])
2. 创建地图实例
创建BMapGL地图实例,并设置地图中心点、缩放级别和地图样式。
const map = new BMapGL.Map('allmap')
var point = new BMapGL.Point(116.414, 39.915)
map.centerAndZoom(point, 10)
map.enableScrollWheelZoom(true)
map.setMapStyleV2({ styleJson: darkStyle })
3. 定义填充图层
定义填充图层,设置CRS、交互属性和样式。
var fillLayer = new BMapGL.FillLayer({
crs: 'GCJ02',
enablePicked: true,
autoSelect: true,
pickWidth: 30,
pickHeight: 30,
selectedColor: 'green', // 悬浮选中项颜色
border: true,
style: {
fillColor: [
'case',
['boolean', ['feature-state', 'picked'], false],
'red',
[
'match',
['get', 'name'],
'海淀区',
'#ce4848',
'朝阳区',
'blue',
'通州区',
'blue',
'丰台区',
'#6704ff',
'房山区',
'#6704ff',
'orange',
],
],
fillOpacity: 0.3,
strokeWeight: 1,
strokeColor: 'blue',
},
})
4. 填充图层交互事件
为填充图层添加点击事件,获取点击区域信息。
fillLayer.addEventListener('click', function (e) {
if (e.value.dataIndex !== -1 && e.value.dataItem) {
console.log('click', e.value.dataItem)
}
})
5. 添加和移除填充图层
通过按钮控制添加和移除填充图层。
function addFillLayer() {
// ...加载数据
if (!fillLayer) {
// ...初始化填充图层
}
map.addNormalLayer(fillLayer)
fillLayer.setData(testFillData)
}
function removeFillLayer() {
map.removeNormalLayer(fillLayer)
}
开发经验与收获
未来拓展与优化