leaflet-draw详细使用

 leaflet-draw

此篇文章是我leaflet基本用法的延伸地图信息 leaflet +vue3 一个文档让你掌握leaflet基础用法_vue3+leaflet-CSDN博客

所以没有过多介绍leaflet。

废话不多说,直接上代码,此处的我把该事件单独放在了一个js文件,map是初始化地图,以下代码包含了英文转中文(好像可以直接引入leaflet.draw-cn.js文件也可转换,但有可能不行,所以科学上网哟各位!!!)

有啥问题,优化改进欢迎留言

import L from 'leaflet'
import 'leaflet/dist/leaflet.css'
import 'leaflet-draw'
import 'leaflet-draw/dist/leaflet.draw.css'
export function useTools(map) {
    //添加绘制图层
    let drawnItems = new L.FeatureGroup();
    map.addLayer(drawnItems);
    添加绘制控件
     let drawControl = new L.Control.Draw({
       draw: {
             polyline: true, //绘制线
             polygon: true,  //绘制多边形
             rectangle: true, //绘制矩形
             circle: true,//绘制圆
             marker: true,   //绘制标注
             circlemarker: true, //绘制圆形标注

         },
         edit: {
             featureGroup: drawnItems, //绘制图层   
             edit: true,   //图形编辑控件
             remove: true, //图形删除控件
         }
    });

    //添加绘制控件
     map.addControl(drawControl);
    // 线段提示
    L.drawLocal.draw = {
        toolbar: {
            actions: {
                // title: '取消绘图',
                text: '取消绘图'
            },
            finish: {
                // title: '完成绘图',
                text: '完成绘图'
            },
            undo: {
                // title: '删除最后绘制的点',//'Delete last point drawn',
                text: '删除最后绘制的点',//'Delete last point'
            },
            buttons: {
                polyline: '绘制一个多段线',//'Draw a polyline',
                polygon: '绘制一个多边形',//'Draw a polygon',
                rectangle: '绘制一个矩形',//'Draw a rectangle',
                circle: '绘制一个圆',//'Draw a circle',
                marker: '绘制一个标记',//'Draw a marker',
                circlemarker: '绘制一个圆形标记',//'Draw a circlemarker'
            }
        },
        handlers: {
            circle: {
                tooltip: {
                    start: '单击并拖动以绘制圆',//'Click and drag to draw circle.'
                },
            },
            simpleshape: {
                tooltip: {
                    end: '释放鼠标完成绘图',//'Release mouse to finish drawing.'
                }
            },
            rectangle: {
                tooltip: {
                    start: '单击并拖动以绘制矩形',//'Click and drag to draw rectangle.'
                }
            },
            polyline: {
                tooltip: {
                    start: '单击开始绘制线',//'Click to start drawing line.',
                    cont: '单击以继续绘制线',//'Click to continue drawing line.',
                    end: '单击“最后一点”以结束线',//'Click last point to finish line.'
                }
            },
            polygon: {
                tooltip: {
                    start: '单击开始绘制形状',//'Click to start drawing shape.',
                    cont: '单击继续绘制形状',//'Click to continue drawing shape.',
                    end: '单击第一个点关闭此形状',//'Click first point to close this shape.'
                }
            },
            marker: {
                tooltip: {
                    start: '单击“地图”以放置标记',//'Click and drag to draw circle.'
                },
            },
            circlemarker: {
                tooltip: {
                    start: '单击“地图”以放置圆标记',//'Click map to place circle marker.'
                }
            },
        },

    }
    L.drawLocal.edit = {
        toolbar: {
            actions: {
                save: {
                    // title: '保存更改',//'Save changes',
                    text: '保存',//'Save'
                },
                cancel: {
                    // title: '取消编辑,放弃所有更改',//'Cancel editing, discards all changes',
                    text: '取消',//'Cancel'
                },
                clearAll: {
                    // title: '清除所有图层',//'Clear all layers',
                    text: '清除所有',//'Clear All'
                }
            },
            buttons: {
                edit: '编辑图层',//'Edit layers',
                editDisabled: '无可编辑的图层',//'No layers to edit',
                remove: '删除图层',//'Delete layers',
                removeDisabled: '无可删除的图层',//'No layers to delete'
            }
        },
        handlers: {
            edit: {
                tooltip: {
                    text: '拖动控制柄或标记以编辑要素',//'Drag handles or markers to edit features.',
                    subtext: '单击“取消”撤消更改',//'Click cancel to undo changes.'
                }
            },
            remove: {
                tooltip: {
                    text: '单击要删除的要素',//'Click on a feature to remove.'
                }
            }
        }
    }

    //绘制事件
    map.on(L.Draw.Event.CREATED, function (e) {
        console.log('ejs', e);
        let type = e.layerType;
        //获取绘制图层
        let drawlayer = e.layer;
        console.log('type', type, 'drawlayer', drawlayer);
        if (type === 'marker') {
            L.icon({
                iconUrl: require("@/assets/leaflet/person1.png"),
                iconSize: [50, 50],
            })
            drawlayer.bindPopup('A popup!');
        }
        drawnItems.addLayer(drawlayer);
    });
}

### 自定义 Leaflet.draw 插件的中文语言提示 为了实现 Leaflet.draw 插件的中文语言提示,可以通过配置 `L.drawLocal` 对象来自定义界面文本。具体方法如下: #### 修改默认语言设置 在引入 LeafletLeaflet.draw 库之后,在初始化地图之前添加以下代码片段以覆盖默认英文提示为中文[^2]。 ```javascript // 定义中文翻译对象 var zhCN = { draw: { toolbar: { actions: { title: "取消绘制", text: "取消" }, finish: { title: "完成绘制", text: "完成" }, undo: { title: "删除最后一点", text: "回退" }, buttons: { polyline: "画折线", polygon: "画多边形", rectangle: "画矩形", circle: "画圆", marker: "放置标记" } }, handlers: { circle: { radius: "半径" } } }, edit: { toolbar: { actions: { save: "保存更改", cancel: "取消编辑, 取消所有更改" }, edit: "编辑图层", editDisabled: "无可用图层进行编辑", remove: "删除图层", removalDisabled: "无可用图层可以移除" }, handlers: { edit: { tooltip: { start: "拖动顶点或者路径来调整形状." } }, remove: { tooltip: { start: "点击要删除的目标." } } } } }; // 设置本地化字符串到 L.drawLocal 中 L.drawLocal = $.extend(true, {}, L.drawLocal, zhCN); ``` 上述代码通过扩展 `L.drawLocal` 来替换原有的英语表达为对应的中文描述。这允许开发者根据实际需求进一步微调各个控件上的文字说明。 #### 加载顺序注意事项 确保按照正确的顺序加载资源文件:首先是 Leaflet.js(基础地图库),接着是 Leaflet.Draw.js(绘制工具)以及任何其他依赖项或自定义脚本[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值