npm install --save mapbox-gl

<template><div id="map-box"></div>
</template><script>
import mapboxgl from 'mapbox-gl' // 引入map-box
const loadId = 'map-box' // 唯一的id
const IMAGES = { // 这些都是地图大点图标,直接引入自己喜欢的图标就行[loadId + 'parking']: require('./img/illegal_parking.png'),[loadId + 'parking-selected']: require('./img/illegal_parking-selected.png'),[loadId + 'personnel']: require('./img/personnel_aggregation_density.png'),[loadId + 'personnel-selected']: require('./img/personnel_aggregation_density-selected.png'),[loadId + 'pedlar']: require('./img/coord-pedlar.png'),[loadId + 'pedlar-selected']: require('./img/coord-pedlar-selected.png'),[loadId + 'roadside']: require('./img/roadside_booths.png'),[loadId + 'roadside-selected']: require('./img/roadside_booths-selected.png')
}
const data = {  // 模拟的点位假数据'type': 'FeatureCollection','features': [{"id": 167932,"type": "Feature",'properties': {'event_subtype_code': '0405','selected':0},"geometry": {"type": "Point","coordinates": [104.9093974867,31.1110811505],}},{"id": 167931,"type": "Feature",'properties': {'event_subtype_code': '0406','selected':0},"geometry": {"type": "Point","coordinates": [104.5093984867,31.3110841505],}},{"id": 167847,"type": "Feature",'properties': {'event_subtype_code': '0407','selected':0},"geometry": {"type": "Point","coordinates": [104.5995422476,31.1364776882],}},{"id": 167763,"type": "Feature",'properties': {'event_subtype_code': '0408','selected':1},"geometry": {"type": "Point","coordinates": [104.3715422674,31.1384774881],}}]
}
export default {data() {return {map: null}},mounted() {this.mapBox()},methods: {onMapClick(map) { // 点击地图图标事件(打印map看不到features属性) map.features console.log(map.features[0]);const projection=map.features[0].propertiesdata.features.forEach(item=>{item.properties.selected=0if (projection.event_subtype_code===item.properties.event_subtype_code) {item.properties.selected=1}})this.map&&this.map.getSource(loadId).setData(data) // 重新放回addSource里面},mapBox() {// map-box秘钥tokenmapboxgl.accessToken = 'pk.eyJ1Ijoiemhhb3h1eHUiLCJhIjoiY2w3azVnbGx3MGdlaTNxb2JhdTR4NHpwZiJ9.yM69RYEDfy5o5u0b9Lb_nw';const map = new mapboxgl.Map({container: loadId, // IDstyle: {version: 8,sources: {'gd-satellite': {type: 'raster',tiles: [// 高德地图 卫星影像'http://ak.dynamic.t0.tiles.virtualearth.net/comp/ch/{quadkey}?mkt=zh-CN&it=A,G,L&og=819&n=z',],tileSize: 206, // 文字大小},},layers: [{id: 'gd-satellite',type: 'raster',source: 'gd-satellite', // 对应sources里的属性layout: {visibility: 'visible', // 显示地图  隐藏地图none},minzoom: 0,maxzoom: 20,},],},center: [104.3995192745, 31.1364077264], // 中线点zoom: 10,  // 视角远近projection: 'globe' });this.map = mapmap.on('load', () => {map.addSource(loadId, {"type": "geojson","data": data  // 初始展示的图标数据});if (!map.hasImage(loadId)) {Object.keys(IMAGES).forEach((key) => {map.loadImage(IMAGES[key], function (error, image) { // 放入图片以及每种图片唯一keyif (error) throw errormap.addImage(key, image)})})}map.addLayer({  // 图标添加到视图上id: loadId,type: 'symbol',source: loadId,  layout: { // 图标点击高亮显示'icon-anchor': 'bottom','icon-image': [ // 图标对应的data中的属性'case',['all', ['==', ['get', 'selected'], 1], ['==', ['get', 'event_subtype_code'], '0405']], loadId + 'parking-selected',['all', ['==', ['get', 'selected'], 1], ['==', ['get', 'event_subtype_code'], '0406']], loadId + 'personnel-selected',['all', ['==', ['get', 'selected'], 1], ['==', ['get', 'event_subtype_code'], '0407']], loadId + 'pedlar-selected',['all', ['==', ['get', 'selected'], 1], ['==', ['get', 'event_subtype_code'], '0408']], loadId + 'roadside-selected',['==', ['get', 'event_subtype_code'], '0405'], loadId + 'parking',['==', ['get', 'event_subtype_code'], '0406'], loadId + 'personnel',['==', ['get', 'event_subtype_code'], '0407'], loadId + 'pedlar',loadId + 'roadside'],'icon-offset': [-8, -8],visibility: 'visible'}});map.on('click', loadId, this.onMapClick) // 点击事件setTimeout(() => {//判断存在才移除//图层Id// if (map.getLayer(loadId)) {//   map.removeLayer(loadId);// }// //图片Id// if (map.hasImage(loadId)) {//   map.removeImage(loadId);// }// if (map.getSource(loadId)) {//   map.removeSource(loadId);// }}, 5000)})}}
}
</script><style>
#map-box {width: 100%;height: 100%;
}
</style>

出图效果

map-box地图点击图标高亮事件相关推荐

  1. echarts,map中国地图点击各省,跳转展示,从省返回到中国地图【china.js】

    效果图: 1.点击省,跳转到河北省 2.返回,从省返回到中国地图 话不多说,直接上代码,1.复制粘贴,2.在引入对应js即可 注:全部各省地图,下载地址:** <!DOCTYPE html> ...

  2. 地图点击区域高亮 vue_这个Excel技巧很强大,鼠标点击即高亮显示数据区域

    ​单于吹落山头月.漫漫江上沙如雪.谁唱缕金衣.水寒船舫稀.芦花枫叶浦.忆抱琵琶语.身未发长沙.梦魂先到家. ------[宋]王观<菩萨蛮·单于吹落山头月> ​之前给大家分享过,当我们根据 ...

  3. html引入echart地图点击,基于echarts实现3D地图的定时高亮和点击事件

    技术选型 文章所选技术栈:vue.echarts.echarts-gl 安装Vue和echarts 1.安装echarts和echarts-alnpm i echarts --save npm i e ...

  4. react可视化项目 ECharts 3D区域地图图表+点击取消高亮黄色

    react 可视化项目 ECharts 3D区域地图图表 地图介绍 echarts图表引入 react页面中引入使用 地图介绍 做可视化项目时需要3d的区域地图,在网上搜到ECharts社区的一个其他 ...

  5. 高德地图 - 点击改变当前 marker 图标(marker点击切换 icon 上一个 icon 恢复原样)

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  6. 小程序地图插入图标后 怎么实现点击图标弹出窗口

    1问题描述 本次博客的要解决的问题是:小程序地图插入图标后 怎么实现点击图标弹出窗口 如图: 2算法描述点击标记点获取数据 想要在地图等页面上显示弹窗,是使用的是marke的方法,点击标记点获取数据 ...

  7. html地图无法点击,无法触发谷歌地图标记点击事件从HTML按钮

    我尝试创建一个HTML按钮,可以触发谷歌地图上的标记的点击事件,所以每当我点击按钮,地图将自动放大到标记和显示infowindow.这里是我的代码无法触发谷歌地图标记点击事件从HTML按钮 Semua ...

  8. Vue 移动端项目 百度地图 点击事件无效、不触发 解决方案

    解决百度地图 手机端 点击事件不触发 的一种方案 版权声明:本文为博主原创文章,转载请标明原文出处.  问题背景 我是半路接手的这个项目,该项目使用 Vue 开发的一款 手机端的页面.到手里时,使用百 ...

  9. openlayers 地图上加图标_Openlayers 定位,添加自定义图标,点击图标弹框

    之前已经把地图展示出来,现在可以在地图上做相关操作. 首先定义一个位置图层,这样可以动态操作 import Feature from 'ol/Feature' import {Vector as Ve ...

最新文章

  1. 浅析C#基于TCP协议的SCOKET通信
  2. angular4 学习日志(一 依赖注入)
  3. 面向对象分析方法(Object-Oriented Analysis,OOA)
  4. NandFlash详述
  5. jstack(查看线程)、jmap(查看内存)和jstat(性能分析)命令
  6. JavaScript常用算法
  7. HTML 图片加载问题
  8. linux下抓取网页快照
  9. VOS中历史话单显示通话会话超时中断详解
  10. 精美商业计划书PPT模版大合集(共107份,900M)
  11. thinkpad X230 黑屏折腾
  12. 详细的设计文档该怎么写?请注意这些地方...
  13. c语言数字语音播报,金额数字语音播报
  14. CSS实现播放暂停按钮样式
  15. iccv2020论文汇总_2020年计算机视觉与数据挖掘国际学术会议( ICCVDM2020 )
  16. 英伟达光追支持Java吗,英伟达新显卡驱动发布 GTX 10系显卡现已支持光追
  17. 用halcon提取衣服徽章
  18. SpringBoot 日志文件
  19. 品质网络的迭变之路,以及运营商的未来之匙
  20. 金山快盘 linux,WPS移动版5.5发布 支持金山快盘双向读写

热门文章

  1. 10个副业兼职创业,在家赚钱绝对真实
  2. 适配器模式实战场景和本质
  3. windows无法连接到打印机_同事的电脑无法访问,共享打印机连接不上,问题都在这...
  4. 最小生成树——克鲁斯卡尔(Kruskal)算法
  5. 这辈子你会遇见谁,早已命中注定
  6. echart显示多组数据
  7. 对于多组数据输入输出的基础题目
  8. 西部数据硬盘 篇一:绿盘、红盘、蓝盘、紫盘、黑盘和金盘的区别
  9. 免费教程《图解SQL面试题》
  10. 【入门讲解】Python使用OpenCV设置图片尺寸。