mapbox点 线 面绘画工具添加

1.安装

npm install @mapbox/mapbox-gl-draw

2.引入

import mapboxgl from 'mapbox-gl';
import MapboxDraw from "@mapbox/mapbox-gl-draw";
import StaticMode from '@mapbox/mapbox-gl-draw-static-mode';

import '@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css'

const modes = MapboxDraw.modes;
modes.static = StaticMode;
<script src='https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-draw/v1.3.0/mapbox-gl-draw.js'></script>

<link rel='stylesheet' href='https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-draw/v1.3.0/mapbox-gl-draw.css' type='text/css' />

3.使用

<template>
	<div class="panel-map">
        <span class="title">停车场面域绘制</span>
        <div
            class="masking"
            v-loading="mapRendering"
            element-loading-text="地图渲染中"
        />
        <base-map
            ref="map"
            :option="mapOption"
            @mapReady="addControl"
        >
        </base-map>
    </div>
</template>

<script>
    //底层地图
	import BaseMap from 'components/base-map-mapbox-ft';
    //引入
	import MapboxDraw from "@mapbox/mapbox-gl-draw";
	import StaticMode from '@mapbox/mapbox-gl-draw-static-mode';
	import '@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css';
	import Api from '../api';

	const modes = MapboxDraw.modes;
	modes.static = StaticMode;

	export default {
		components: {
			BaseMap
		},
		props: {
		},
		computed: {
		},
		data() {
			return {
                mapOption: {
					zoom: 15,
					center:['113.738','22.755']
				},
                mapRendering:false,
                //添加绘制左上角绘制工具
				draw: new MapboxDraw({
					displayControlsDefault: false,
					controls: {
						polygon: true,
						trash: true
					},
					modes: modes
				}),
				geojson: {
					features: [],
					type: "FeatureCollection"
				},
                //绘制类型分为添加面域add或者修改面域update
                type:'add',
			}
		},
		methods: {
            //添加绘制组件
			addControl() {
				const map = this.$refs.map.getMap();
				map.addControl(this.draw, 'top-left');

				map.on('draw.create', this.updateArea);
				map.on('draw.delete', this.updateArea);
				map.on('draw.update', this.updateArea);

				if ( this.actionType === 'update') {
					this.initMapAndForm(map);
				}
                //左上侧工具按钮鼠标移入提示文字
				const polygonButton = document.querySelector('.mapbox-gl-draw_polygon');
				polygonButton.setAttribute('title', '绘制面域');
				const trashButton = document.querySelector('.mapbox-gl-draw_trash');
				trashButton.setAttribute('title', '删除面域');
				//地图加载状态
				this.mapRendering = false;
			},
            //将修改之前的面域绘制在地图上
			initMapAndForm() {
                //editData存储的是编辑之前的数据
				if(!this.editData.geometry?.coordinates){
                    return
                }
                let arr = [];
                this.editData.geometry.coordinates[0].forEach(coor => {
                    let poi = [coor[0]*1, coor[1]*1];
					arr.push( poi );
                });
                this.geojson = {
					type: "FeatureCollection",
					features: [{
						type: "Feature",
						geometry: {
							type: "Polygon",
							coordinates: [arr]
						},
						properties: {
                            fname:this.editData.fname,
                        }
					}]
				};
				this.draw.add(this.geojson);
                map.flyTo({
                    center: [this.editData.longitude*1,this.editData.latitude*1],
                    padding: 100,
                    zoom:15,
                    speed: 2,
                    curve: 1,
                    easing(t) {
                        return t
                    }
                });
			},
			updateArea() {
                //geojson存储的就是绘制面域的数据
				this.geojson = this.draw.getAll();
			}
		}
	}
</script>

<style lang="less" scoped>
	.panel-map{
        padding: 0 20px;
        height: 180px;
        .title{
            display: inline-block;
            margin-bottom: 10px;
         }
    }
</style>

4.效果

新增效果 

编辑效果

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Mapbox添加动态图层,可以使用Mapbox GL JS中的GeoJSON数据源和图层。下是实现该功能的一些步骤: 1. 首先,需要创建一个GeoJSON数据源,该数据源将包含您要添加的动态的位置和属性信息。 2. 然后,需要创建一个图层,该图层将使用该数据源来呈现动态。您可以使用Mapbox GL JS中提供的“circle”图层类型来创建一个图层。 3. 接下来,需要将动态添加到数据源中。为此,您可以使用Mapbox GL JS中提供的方法,例如“addSourceData”和“setData”。 4. 最后,可以使用JavaScript定时器或其他方法来更新数据源中的位置和属性信息,从而使动态始终保持更新状态。 以下是一个示例代码片段,展示了如何使用Mapbox GL JS添加动态图层: ``` // 创建一个GeoJSON数据源 var geojsonSource = { type: 'geojson', data: { type: 'FeatureCollection', features: [] } }; // 创建一个图层 var pointLayer = { id: 'point-layer', type: 'circle', source: 'my-data-source', paint: { 'circle-radius': 10, 'circle-color': 'red' } }; // 添加数据源和图层到地图中 map.addSource('my-data-source', geojsonSource); map.addLayer(pointLayer); // 更新数据源中的位置和属性信息 setInterval(function() { // 获取数据源中的所有Feature var features = geojsonSource.data.features; // 更新Feature的位置和属性 for (var i = 0; i < features.length; i++) { features[i].geometry.coordinates = [newLng, newLat]; features[i].properties = { ... }; } // 更新数据源 map.getSource('my-data-source').setData(geojsonSource.data); }, 1000); ``` 请注意,此示例代码仅用于演示目的,实际应用中可能需要根据具体需求进行修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值