mapbox-gl-draw 自定义绘制样式

  1. 创建 theme.js 文件
    拷贝 node_modules/mapbox-gl-draw/src/lib/theme.js 文件 此文件是绘制时显示的样式图层

    // 注释掉的是原来的样式  新加的是红色
    module.exports = [
      // 面 绘制结束填充样式
      {
        'id': 'gl-draw-polygon-fill-inactive',
        'type': 'fill',
        'filter': ['all',
          ['==', 'active', 'false'],
          ['==', '$type', 'Polygon'],
          ['!=', 'mode', 'static']
        ],
        'paint': {
          // 'fill-color': '#3bb2d0',
          'fill-color': '#ff0000',
          // 'fill-outline-color': '#3bb2d0',
          'fill-outline-color': '#ff0000',
          'fill-opacity': 0.1
        }
      },
      // 面 绘制时填充样式
      {
        'id': 'gl-draw-polygon-fill-active',
        'type': 'fill',
        'filter': ['all', ['==', 'active', 'true'], ['==', '$type', 'Polygon']],
        'paint': {
          // 'fill-color': '#fbb03b',
          'fill-color': '#ff0000',
          // 'fill-outline-color': '#fbb03b',
          'fill-outline-color': '#ff0000',
          'fill-opacity': 0.1
        }
      },
      // 线上扩展点位样式
      {
        'id': 'gl-draw-polygon-midpoint',
        'type': 'circle',
        'filter': ['all',
          ['==', '$type', 'Point'],
          ['==', 'meta', 'midpoint']],
        'paint': {
          // 'circle-radius': 3,
          'circle-radius': 5,
          // 'circle-color': '#fbb03b'
          'circle-color': '#ff0000'
        }
      },
      // 面 绘制结束后轮廓线
      {
        'id': 'gl-draw-polygon-stroke-inactive',
        'type': 'line',
        'filter': ['all',
          ['==', 'active', 'false'],
          ['==', '$type', 'Polygon'],
          ['!=', 'mode', 'static']
        ],
        'layout': {
          'line-cap': 'round',
          'line-join': 'round'
        },
        'paint': {
          // 'line-color': '#3bb2d0',
          'line-color': '#ff0000',
          // 'line-width': 2
          'line-width': 3
        }
      },
      // 面 绘制中虚线
      {
        'id': 'gl-draw-polygon-stroke-active',
        'type': 'line',
        'filter': ['all', ['==', 'active', 'true'], ['==', '$type', 'Polygon']],
        'layout': {
          'line-cap': 'round',
          'line-join': 'round'
        },
        'paint': {
          // 'line-color': '#fbb03b',
          'line-color': '#ff0000',
          // 'line-dasharray': [0.2, 2],
          'line-dasharray': [2, 2],
          // 'line-width': 2
          'line-width': 3
        }
      },
      // 线 绘制双击结束后显示
      {
        'id': 'gl-draw-line-inactive',
        'type': 'line',
        'filter': ['all',
          ['==', 'active', 'false'],
          ['==', '$type', 'LineString'],
          ['!=', 'mode', 'static']
        ],
        'layout': {
          'line-cap': 'round',
          'line-join': 'round'
        },
        'paint': {
          // 'line-color': '#3bb2d0',
          'line-color': '#ff0000',
          // 'line-width': 2
          'line-width': 3
        }
      },
      // 线 绘制中虚线
      {
        'id': 'gl-draw-line-active',
        'type': 'line',
        'filter': ['all',
          ['==', '$type', 'LineString'],
          ['==', 'active', 'true']
        ],
        'layout': {
          'line-cap': 'round',
          'line-join': 'round'
        },
        'paint': {
          // 'line-color': '#fbb03b',
          'line-color': '#ff0000',
          // 'line-dasharray': [0.2, 2],
          'line-dasharray': [2, 2],
          // 'line-width': 2
          'line-width': 3
        }
      },
      // 线 节点外圈
      {
        'id': 'gl-draw-polygon-and-line-vertex-stroke-inactive',
        'type': 'circle',
        'filter': ['all',
          ['==', 'meta', 'vertex'],
          ['==', '$type', 'Point'],
          ['!=', 'mode', 'static']
        ],
        'paint': {
          // 'circle-radius': 5,
          'circle-radius': 7,
          'circle-color': '#fff'
        }
      },
      // 线 节点内圈
      {
        'id': 'gl-draw-polygon-and-line-vertex-inactive',
        'type': 'circle',
        'filter': ['all',
          ['==', 'meta', 'vertex'],
          ['==', '$type', 'Point'],
          ['!=', 'mode', 'static']
        ],
        'paint': {
          // 'circle-radius': 3,
          'circle-radius': 5,
          // 'circle-color': '#fbb03b'
          'circle-color': '#ff0000'
        }
      },
      // 点 绘制结束后显示 外圈
      {
        'id': 'gl-draw-point-point-stroke-inactive',
        'type': 'circle',
        'filter': ['all',
          ['==', 'active', 'false'],
          ['==', '$type', 'Point'],
          ['==', 'meta', 'feature'],
          ['!=', 'mode', 'static']
        ],
        'paint': {
          // 'circle-radius': 5,
          'circle-radius': 6,
          'circle-opacity': 1,
          'circle-color': '#fff'
        }
      },
      // 点 绘制结束后显示 内圈
      {
        'id': 'gl-draw-point-inactive',
        'type': 'circle',
        'filter': ['all',
          ['==', 'active', 'false'],
          ['==', '$type', 'Point'],
          ['==', 'meta', 'feature'],
          ['!=', 'mode', 'static']
        ],
        'paint': {
          // 'circle-radius': 3,
          'circle-radius': 4,
          // 'circle-color': '#3bb2d0'
          'circle-color': '#ff0000'
        }
      },
      // 点线面上选中点位 外圈
      {
        'id': 'gl-draw-point-stroke-active',
        'type': 'circle',
        'filter': ['all',
          ['==', '$type', 'Point'],
          ['==', 'active', 'true'],
          ['!=', 'meta', 'midpoint']
        ],
        'paint': {
          // 'circle-radius': 7,
          'circle-radius': 9,
          'circle-color': '#fff'
        }
      },
      // 点线面上选中点位 内圈
      {
        'id': 'gl-draw-point-active',
        'type': 'circle',
        'filter': ['all',
          ['==', '$type', 'Point'],
          ['!=', 'meta', 'midpoint'],
          ['==', 'active', 'true']],
        'paint': {
          // 'circle-radius': 5,
          'circle-radius': 7,
          'circle-color': '#ff0000'
        }
      },
      {
        'id': 'gl-draw-polygon-fill-static',
        'type': 'fill',
        'filter': ['all', ['==', 'mode', 'static'], ['==', '$type', 'Polygon']],
        'paint': {
          'fill-color': '#404040',
          'fill-outline-color': '#404040',
          'fill-opacity': 0.1
        }
      },
      {
        'id': 'gl-draw-polygon-stroke-static',
        'type': 'line',
        'filter': ['all', ['==', 'mode', 'static'], ['==', '$type', 'Polygon']],
        'layout': {
          'line-cap': 'round',
          'line-join': 'round'
        },
        'paint': {
          'line-color': '#404040',
          'line-width': 2
        }
      },
      {
        'id': 'gl-draw-line-static',
        'type': 'line',
        'filter': ['all', ['==', 'mode', 'static'], ['==', '$type', 'LineString']],
        'layout': {
          'line-cap': 'round',
          'line-join': 'round'
        },
        'paint': {
          'line-color': '#404040',
          'line-width': 2
        }
      },
      {
        'id': 'gl-draw-point-static',
        'type': 'circle',
        'filter': ['all', ['==', 'mode', 'static'], ['==', '$type', 'Point']],
        'paint': {
          'circle-radius': 5,
          'circle-color': '#404040'
        }
      }
    ];
    
    
  2. 使用修改后的样式文件

    import MapboxDraw from "mapbox-gl-draw";
    import theme from '@/utils/theme.js'
    
    MapDraw = new MapboxDraw({
        displayControlsDefault: false,
        controls: {
          point: true, // 启用绘制点
          line_string: true,
          polygon: true,
          trash: true,
        },
        styles: theme // 使用修改后的样式文件
      })
    
  3. 动态修改图层样式

    // 可以使用mapbox此方法动态修改图层样式
    map.setPaintProperty('gl-draw-polygon-fill-inactive', 'fill-color', '#faafee');
    
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mapbox-GL-Draw是一款基于Mapbox GL JS的开源绘图库。它提供了一系列的绘图工具,可以在地图上绘制点、线、面等要素。同时,它也支持自定义绘图控件,可以满足不同的绘图需求。 要绘制箭头控件,可以使用Mapbox-GL-Draw自定义绘图控件功能。具体步骤如下: 1. 创建一个绘图控件,继承自`mapboxgl.Draw`: ```javascript var ArrowControl = mapboxgl.Draw.extend({ // ... }); ``` 2. 在控件的`onAdd`方法中创建绘图工具,并添加箭头绘制模式: ```javascript ArrowControl.prototype.onAdd = function(map) { // ... this.addMode('arrow', ArrowMode); // ... } ``` 3. 定义箭头绘制模式: ```javascript var ArrowMode = { // ... onSetup: function() { // ... }, onDrag: function() { // ... }, onClick: function() { // ... }, // ... }; ``` 4. 在`onSetup`方法中创建箭头要素,并添加到地图上: ```javascript onSetup: function() { var arrow = { type: 'Feature', geometry: { type: 'LineString', coordinates: [] }, properties: { 'arrow': 'true' } }; this.addFeature(arrow); this.arrow = arrow; // ... }, ``` 5. 在`onDrag`方法中更新箭头要素的坐标: ```javascript onDrag: function(event) { var arrow = this.arrow; var coords = arrow.geometry.coordinates; if (coords.length === 0) { coords.push(event.lngLat.toArray()); coords.push(event.lngLat.toArray()); this.updateUIClasses({mouse: 'add'}); } else { coords[1] = event.lngLat.toArray(); this.updateUIClasses({mouse: 'mousemove'}); } arrow.geometry.coordinates = coords; this.map.fire('draw.update', {action: 'change', feature: arrow}); }, ``` 6. 在`onClick`方法中结束绘制: ```javascript onClick: function(event) { var arrow = this.arrow; var coords = arrow.geometry.coordinates; if (coords.length === 2) { this.updateUIClasses({mouse: 'pointer'}); this.changeMode('simple_select', {featureIds: [arrow.id]}); } }, ``` 7. 最后,在地图上添加箭头控件: ```javascript map.addControl(new ArrowControl()); ``` 以上就是绘制箭头控件的基本流程,具体实现可以参考Mapbox-GL-Draw的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值