本文详细介绍了如何在MapboxGL中进行地图初始化、添加图层、高亮图层以及删除图层的操作。通过示例代码展示了如何创建多边形填充、描边及文字标注图层,并实现图层的高亮效果。同时,当需要更新地图内容时,演示了如何删除现有图层并重新渲染新图层。 摘要由CSDN通过智能技术生成 p.then(res => { Require(['Axios', 'PSRMap', 'ResourceQuery', 'SpatialAnalyst', 'Projection', 'CustomGraphics', 'Util', 'Measure', 'Diagram'], () => { vm.amap = window.amap = new WebGIS.Map(); amap.init('mapGridBox', { style: WebGIS.Config.styles.base, center: [108.78997882442495, 23.83413245081408], zoom: 6 ,// WebGIS.Config.examples.zoom container: 'mapGridBox', controls: ['geolocate', 'navigation'], fullExtent: WebGIS.Config.examples.fullExtent }, () => { amap.on('load', () => { res[0].then(res=>{ let rgbList = []; res.colorList.forEach(item => { let strlist = item.split(','); let rgbastr = `rgba(${strlist[0] + ',' + strlist[1] + ',' + strlist[2]},0.5)`; rgbList.push(rgbastr) this.layerIds = [];//初始化图层id集合 this.sourceIds = [];//初始化数据源id集合 //let num = 0; res.arrlast.forEach((ite, index) => { //num+=1; vm.drawArea(ite, rgbList[index],res.nameList[index],index) // 处理射线数据 /*******开始*******/ window.markerGroup = new WebGIS.MarkerGroup(amap); window.measure = new WebGIS.Measure(amap); amap.on('zoomend',function (data) { console.log(amap.getZoom());

2.添加图层

    drawArea(coordinates, color, name, index) {
      let that = this;
      let arr = [];
      coordinates[0].forEach(ite => {
        arr.push(new WebGIS.Projection.mercatorToWgs84(ite));
      let arrlist = [];
      arrlist.push(arr);
      //添加数据源
      amap.addSource(
        name +'gridSource' + index,
          'type': 'geojson',
          'data': {
            'type': 'Feature',
            'geometry': {
              'type': 'Polygon',
              'coordinates': arrlist
      that.sourceIds.push(name +'gridSource' + index);
      //多边形
      amap.addLayer({
        'id': name + 'fill' + index,
        'type': 'fill',
        'source':  name +'gridSource' + index, // reference the data source
        'layout': {
          'visibility': 'visible'
        'maxZoom': 22,
        'minZoom': 6,
        'paint': {
          'fill-color': color, // blue color fill
          'fill-opacity': 0.8
      that.layerIds.push(name + 'fill' + index);
      amap.addLayer({
        'id': name + 'line' + index,
        'type': 'line',
        'source': name +'gridSource' + index,
        'layout': {
          'visibility': 'visible'
        'maxZoom': 22,
        'minZoom': 6,
        'paint': {
          'line-color': '#000',
          'line-width': 1
      that.layerIds.push(name + 'line' + index);
      amap.addLayer({
        'id': name+'text'+ index,
        "type": "symbol",
        "source": name +'gridSource' + index,
        "layout": {
          'visibility': 'visible',
          "text-field": name,
          "text-size": 12
        'maxZoom': 22,
        'minZoom': 6,
      that.layerIds.push(name+'text'+ index);
      let hoveredStateId = null;
      //图层绑定click事件
      amap.on('click',name + 'fill' + index,function (e) {
        that.setAreaHigh(name + 'fill' + index,color);
        //显示左侧抽屉
        if (! that.showDrawer) {
          that.showDrawer = true;
          if (this.gridType === 1) {
            //行业分类列表全选
            setTimeout(() => {
              that.$refs.categoryInforComponent.checkAllSelect();
            },200)

3.高亮图层

    setAreaHigh(id,color){
      let that = this;
      let obj = {
        id: id,
        color: color,
        isActive: true
      if (that.polygonColor.length === 0) {
        //当前图层没有高亮则设置高亮,并将信息保存在polygonColor中
        amap.pmap.setPaintProperty(id, "fill-color", "#ff0000");
        that.polygonColor.push(obj);
      } else {
        //再次点击高亮图层则取消高亮(反之则高亮)
        if (that.polygonColor[0].id === id && that.polygonColor[0].isActive) {
          amap.pmap.setPaintProperty(
            that.polygonColor[0].id,
            "fill-color",
            that.polygonColor[0].color
          obj.isActive = false;
        } else if (that.polygonColor[0].id === id && !that.polygonColor[0].isActive) {
          amap.pmap.setPaintProperty(
            that.polygonColor[0].id,
            "fill-color",
            "#ff0000"
          obj.isActive = true;
        } else if (that.polygonColor[0].id !== id) {
          //将之前高亮的图层改完本身的颜色
          amap.pmap.setPaintProperty(
            that.polygonColor[0].id,
            "fill-color",
            that.polygonColor[0].color
          //然后将当前点击的图层高亮
          amap.pmap.setPaintProperty(
            "fill-color",
            "#ff0000"
          obj.isActive = true;
        //清空设置高亮集合
        that.polygonColor = [];
        //将当前高亮的图层信息保存在polygonColor中
        that.polygonColor.push(obj);

4.删除图层,并重新渲染图层

 async gridTypeChange(){
      //删除图层
      if (this.layerIds.length) {
        this.layerIds.forEach(id => {
          amap.removeLayer(id)
        this.layerIds = [];
      //删除数据源
      if (this.sourceIds.length) {
        this.sourceIds.forEach(id =>{
          amap.removeSource(id)
        this.sourceIds = [];
      //重新添加图层
      let res = await this.getAreaData();
      let rgbList = [];
      res.colorList.forEach(item => {
        let strlist = item.split(',');
        let rgbastr = `rgba(${strlist[0] + ',' + strlist[1] + ',' + strlist[2]},0.5)`;
        rgbList.push(rgbastr)
      let num = 0;
      res.arrlast.forEach((ite, index) => {
        num += 1;
        this.drawArea(ite, rgbList[index],res.nameList[index],num)
				
Mapbox-gl-js中添加自定义图层前言一、制作geojson地图二、使用Tippecanoe将geojson转换成vector tile(.pbf)文件三、使用mapbox-gl-js三、Mapbox-gl-js中根据矢量数据的属性过滤显示 本文说明如何制作自定义的地图数据,并使用mapbox-gl-js进行显示 一、制作geojson地图 如果自定义的地图格式已经是geojson可跳过。 有时自定义数据来源较多,格式不定,此时需要将这些五花八门的格式统一成geojson格式。 可以通过Pyt
我们点击这这个图片能获取到数据中的fid 根据fid进行过滤 (本代码中因为页面功能需求还要过滤一层type值,因为有不同的图斑) map.setLayoutProperty( `pest_address-layer`, 'icon-image', ['match',['get','type'], 1,['match',['get',
一、在index.html全局引入mapbox-gl的js和css包,由于项目中会涉及到部分空间几何对象关系的计算,需借助turf.js,详细使用方法可参考https://blog.csdn.net/weixin_39150852/article/details/116758542 二、创建地图组件,初始化地图 <template> <div class="map-wrapper" :id="mapId"></div> </template>
背景分析:采用Layer绘制方案中存在很多情况下需求在一张地图绘制n个属性显示的问题,例如行政区划面,边界等等。例如如下场合 未知多个元素汇集在同一张地图实例上去做显示,编辑等效果。 处理方案: 1.第一反应是N个layer叠加显示 优点:数据处理简单,执行编辑方案简单 缺点:需要使用存储全局变量多,绘制性能占用大,内存占用大,后续清理图层,清理数据麻烦 2.单图N元素的显示 核心利用 数据组装时 组装 features=[]; 优点:需要使用存储变量少,绘制性能占用低,图层唯一,数据,图层清理简单。整体
data: new Uint8Array(size * size * 4), onAdd: function () { const canvas = document.createElement('canvas') canvas.width = this.width
使用mapboxgl 实现特定的地图效果 最近完成的一个项目,dashboard 地图模块的需要和第三方对接,对接要求使用mapboxgl 来对接。以前的项目一直用leaflet库来处理地图需求,mapboxgl 库对我来说很陌生。学习研究一段时间,再基本实现了产品设计的地图交互功能后,我在这里写记录。 先上张设计图: 一、要求实现的功能 1.加载深圳地图瓦片、颜色采用暗色调 2.地图附有蓝色遮罩层,鼠标hover时 ,该区域高亮并展示相应的数据 3. 摄像头点位在地图上显示,两种类型,一个绿色一个蓝色,要
<meta charset="utf-8" /> <title>MapboxGL Marker Highlight Animation</title> <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" /> <script src="https://api.mapbox.com/mapbox-gl-js/v2.5.1/mapbox-gl.js"></script> <link href="https://api.mapbox.com/mapbox-gl-js/v2.5.1/mapbox-gl.css" rel="stylesheet" /> <style> body { margin: 0; padding: 0; } #map { position: absolute; top: 0; bottom: 0; width: 100%; } .highlight-animation { animation: highlight 1s infinite; @keyframes highlight { opacity: 1; transform: scale(1); 50% { opacity: 0.5; transform: scale(1.5); 100% { opacity: 1; transform: scale(1); </style> </head> <div id="map"></div> <script> mapboxgl.accessToken = 'YOUR_MAPBOX_ACCESS_TOKEN'; var lng = -122.4194; // 经度 var lat = 37.7749; // 纬度 var zoomLevel = 12; // 缩放级别 // 创建地图实例 var map = new mapboxgl.Map({ container: 'map', style: 'mapbox://styles/mapbox/streets-v11', center: [lng, lat], zoom: zoomLevel // 创建一个图层,并向地图添加一个marker var marker = new mapboxgl.Marker({ element: createMarkerElement() .setLngLat([lng, lat]) .addTo(map); // 为标记元素添加动画类 marker.getElement().classList.add('highlight-animation'); // 创建标记元素及样式 function createMarkerElement() { var el = document.createElement('div'); el.className = 'marker'; el.style.backgroundImage = 'url(https://example.com/your-marker-icon.png)'; // 替换为您自己的标记图标URL el.style.width = '40px'; el.style.height = '40px'; el.style.backgroundRepeat = 'no-repeat'; el.style.backgroundSize = 'cover'; return el; </script> </body> </html> 请确保将YOUR_MAPBOX_ACCESS_TOKEN替换为您自己的Mapbox访问令牌,并将`https://example.com/your-marker-icon.png`替换为您自己的标记图标的URL。 通过上述代码,您将能够在MapboxGL地图上添加一个marker,并为其添加高亮闪烁的动画效果。根据您的需求,您可以调整地图的样式、标记的位置和动画效果。