vue使用leaflet的draw插件绘制电子围栏

本文详细介绍了如何在Vue应用中使用Leaflet的draw插件创建地图编辑器,包括安装、引入、创建编辑器和控件,以及绘制逻辑,特别提到了自定义marker和设置形状选项等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vue使用leaflet的draw插件绘制电子围栏

效果图

在这里插入图片描述

引入步骤

1 安装leaflet-draw插件

npm install leaflet-draw

在这里插入图片描述
附上插件文档

2 在vue中引入插件

前提是已经安装好了leaflet,才能使用这些插件

// script里面导入插件
<script>
import 'leaflet-draw';
</script>

// 同时要引入插件样式
<style>
@import '~leaflet-draw/dist/leaflet.draw.css';      /*引入draw插件样式*/
</style>

3 创建编辑器和控件

var editableLayers  = new L.FeatureGroup();
console.log('编辑器:',editableLayers );
this.map.addLayer(editableLayers );

var drawControl = new L.Control.Draw({
	position: 'topleft',//控件位置 'topleft'(默认), 'topright', 'bottomleft' or 'bottomright'
    edit: {
         featureGroup: editableLayers ,
         remove: false
     },
});
console.log('控件:',drawControl)
this.map.addControl(drawControl);

5 绘制逻辑

this.map.on(L.Draw.Event.CREATED, function (e) {
     console.log('绘制ing',e)
     var latlngs = e.layer._latlngs   // arr [lat,lng] 一组经纬度,每个点都有
     
     console.log(latlngs)
     var type = e.layerType,
         layer = e.layer;
     if (type === 'marker') {
         layer.bindPopup('A popup!');
     }
     editableLayers.addLayer(layer);
 });

完整代码

import markerIcon from '@/assets/images/marker-icon.png';  // 导入的一张图片

// 编辑方法
drawEditor(){
    var MyCustomMarker = L.Icon.extend({
        options: {
            shadowUrl: null,
            iconAnchor: new L.Point(12, 12),
            iconSize: new L.Point(24, 24),
            iconUrl: markerIcon,
        }
    });
    var editableLayers  = new L.FeatureGroup();
    console.log('编辑器:',editableLayers );
    this.map.addLayer(editableLayers );
    var drawControl = new L.Control.Draw({
        position: 'topleft',//控件位置 'topleft'(默认), 'topright', 'bottomleft' or 'bottomright'
        edit: {
            featureGroup: editableLayers ,
            remove: false
        },
        polyline: {
            shapeOptions: {
                color: '#f357a1',
                weight: 10
            }
        },
        polygon: {
            allowIntersection: false, // Restricts shapes to simple polygons
            drawError: {
                color: 'red', // Color the shape will turn when intersects
                message: '<strong>Oh snap!<strong> you can\'t draw that!' // Message that will show when intersect
            },
            shapeOptions: {
                color: 'red'
            }
        },
        circle: false, // Turns off this drawing tool
        rectangle: {
            shapeOptions: {
                clickable: false
            }
        },
        marker: {
            icon: new MyCustomMarker()
        }
    });
    console.log('控件:',drawControl)
    this.map.addControl(drawControl);
    this.map.on(L.Draw.Event.CREATED, function (e) {
        console.log('绘制ing',e)
        var latlngs = e.layer._latlngs   // arr [lat,lng] 一组经纬度,每个点都有
        
        console.log(latlngs)
        var type = e.layerType,
            layer = e.layer;
        if (type === 'marker') {
            layer.bindPopup('A popup!');
        }
        editableLayers.addLayer(layer);
    });
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值