# 基础用法

  • 点击绘制项,选中,再次点击,取消选中
<template>
	<l-map style="height:400px;" :zoomControl="true">
		<l-tile-layer :url="url" :options="options"> </l-tile-layer>
		<l-draw-layer @finishDraw="finishDrawFn"></l-draw-layer>
	</l-map>
</template>
<script>
	export default {
		data: () => ({
			url: "https://webrd03.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",
			options: {},
		}),
		methods: {
			finishDrawFn: (params) => {
				console.log("params---", params);
			},
		},
	};
</script>
Expand Copy

# 修改展示位置

  • position 绘制项放置的位置,string,默认 topleft
    • 可选值 'topleft', 'topright', 'bottomleft', 'bottomright'
  • dToB 绘制项到边框的位置 ,string,默认'10px 80px'
    • '10px 80px': 10px 表示 x 轴距离边框的位置,80 表示 y 轴距离边框的位置
<template>
	<button @click="handeChange">切换mode</button>
	<l-map style="height:400px;" :zoomControl="true">
		<l-tile-layer :url="url" :options="options"> </l-tile-layer>
		<l-draw-layer
			:mode="mode"
			:dToB="dToB"
			:position="position"
		></l-draw-layer>
	</l-map>
</template>
<script>
	export default {
		data: () => ({
			url: "https://webrd03.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",
			options: {},
			dToB: "10px 100px",
			position: "topright",
			mode: "vertical",
		}),
		methods: {
			handeChange() {
				this.mode =
					this.mode === "vertical" ? "horizontal " : "vertical";
			},
		},
	};
</script>
Expand Copy

# 仅绘制一个图形

  • 设置属性 drawShapeMore:false; 默认可以绘制多个图形
  • 地图只能绘制一个图像,绘制下个图形时,上个图形自动删除
  • 一个图形的限制仅 针对于'rectangle', 'polygon', 'circle', 'polyline',
<template>
	<l-map style="height:400px;" :zoomControl="true">
		<l-tile-layer :url="url" :options="options"> </l-tile-layer>
		<l-draw-layer :drawShapeMore="false"></l-draw-layer>
	</l-map>
</template>
<script>
	export default {
		data: () => ({
			url: "https://webrd03.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",
			options: {},
		}),
	};
</script>
Expand Copy

# 自定义绘制项-[string,string]

  • drawOptions 属性可以是 string 类型的数组
  • 默认显示可以绘制项的有:
  • marker(点标记), circleMarker(圆标记), rectangle(矩形), polygon(多边形), circle(圆形), polyline(多线段), delete(删除功能 )
  • 本示例仅配置显示出 marker, rectangle,polygon,delete,此种配置只能展示组件默认的展示信息,更为精细的配置请参考下一项
<template>
	<l-map style="height:400px;" :zoomControl="true">
		<l-tile-layer :url="url" :options="options"> </l-tile-layer>
		<l-draw-layer :drawOptions="drawOptions"></l-draw-layer>
	</l-map>
</template>
<script>
	export default {
		data: () => ({
			url: "https://webrd03.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",
			options: {},
			drawOptions: ["marker", "rectangle", "polygon", "delete"],
		}),
	};
</script>
Expand Copy

# 自定义绘制项-[object,object]

  • drawOptions 属性可以是 object 类型的数组
  • 对象形式,在更为精确的配置时使用,drawOptions 数组对象中的 key 必须包含 type
  • 本示例配置显示三项:rectangle,polygon,delete, 并 rectangle 自定义 title 提示信息
<template>
	<l-map style="height:400px;" :zoomControl="true">
		<l-tile-layer :url="url" :options="options"> </l-tile-layer>
		<l-draw-layer :drawOptions="drawOptions"></l-draw-layer>
	</l-map>
</template>
<script>
	export default {
		data: () => ({
			url: "https://webrd03.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",
			options: {},
			drawOptions: [
				{ type: "rectangle", title: "自定义title显示名" },
				{ type: "polygon" },
				{ type: "delete" },
			],
		}),
	};
</script>
Expand Copy

# 自定义绘制项-[object,string]

  • drawOptions 属性可以是 object 和 string 混合类型的数组
  • 这种配置,可应用于只有个别的绘制项需要自定义配置的情况下
  • 本示例配置显示三项:rectangle,polygon,circle,polyline,delete,
<template>
	<l-map style="height:400px;" :zoomControl="true">
		<l-tile-layer :url="url" :options="options"> </l-tile-layer>
		<l-draw-layer :drawOptions="drawOptions"></l-draw-layer>
	</l-map>
</template>
<script>
	export default {
		data: () => ({
			url: "https://webrd03.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",
			options: { foo: "bar" },
			drawOptions: [
				"rectangle",
				{ type: "polygon", title: "自定义多边形的提示名称" },
				"circle",
				"polyline",
				"delete",
			],
		}),
	};
</script>
Expand Copy

# 自定义绘制项 - object

  • drawOptions 属性值为 object,对象的 key 为绘制项的类型
  • 此种配置方式和[object]大致相同
  • 本示例配置显示项:rectangle,polygon,delete,
<template>
	<l-map style="height:400px;" :zoomControl="true">
		<l-tile-layer :url="url" :options="options"> </l-tile-layer>
		<l-draw-layer :drawOptions="drawOptions"></l-draw-layer>
	</l-map>
</template>
<script>
	export default {
		data: () => ({
			url: "https://webrd03.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",
			options: { foo: "bar" },
			drawOptions: {
				rectangle: {
					title: "自定义绘制矩形提示名称",
				},
				polygon: {},
				delete: {},
			},
		}),
	};
</script>
Expand Copy

# 测量功能

  • 测量功能仅支持 rectangle,polygon,circle 的面积测量, polyline 的长度测量
  • 设置属性 measure:true; 表示以上几种类型全部测试,默认不测量
<template>
	<l-map style="height:400px;" :zoomControl="true">
		<l-tile-layer :url="url" :options="options"> </l-tile-layer>
		<l-draw-layer :measure="true"></l-draw-layer>
	</l-map>
</template>
<script>
	export default {
		data: () => ({
			url: "https://webrd03.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",
			options: { foo: "bar" },
		}),
	};
</script>
Expand Copy

# 自定义测量显示内容

  • 自定义测量后的显示内容,属性 measureFormat 传值函数,参数 measureNumber(计算后的长度或面积)和 type
  • type 测量的类型,三种值
    • length 长度单位米;
    • circle 圆的面积,单位平方米;
    • area 多边形的面积,单位平方米
<template>
	<l-map style="height:400px;" :zoomControl="true">
		<l-tile-layer :url="url" :options="options"> </l-tile-layer>
		<l-draw-layer
			:measure="true"
			:measureFormat="measureFormat"
		></l-draw-layer>
	</l-map>
</template>
<script>
	export default {
		data: () => ({
			url: "https://webrd03.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",
			options: { foo: "bar" },
		}),
		methods: {
			measureFormat(type, measureNumber) {
				if (type == "length") {
					return `自定义长度显示:${measureNumber}长度单位`;
				} else if (type == "circle" || type == "area") {
					return `自定义面积显示:${measureNumber}面积单位`;
				}
			},
		},
	};
</script>
Expand Copy

# 自定义部分测量功能

  • 示例中,仅设置 polygon 需要测量面积
<template>
	<l-map style="height:400px;" :zoomControl="true">
		<l-tile-layer :url="url" :options="options"> </l-tile-layer>
		<l-draw-layer :drawOptions="drawOptions"></l-draw-layer>
	</l-map>
</template>
<script>
	export default {
		data: () => ({
			url: "https://webrd03.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",
			options: { foo: "bar" },
			drawOptions: [
				"rectangle",
				{ type: "polygon", measure: true },
				"circle",
				"polyline",
				"delete",
			],
		}),
	};
</script>
Expand Copy

# 自定义绘制图形的样式

  • 属性 commonStyle,自定义整体绘制图形的样式
  • 类型:object, 参考:leaflet 中定义图形 Options 参数中 style 对象
  • 优先级:drawOptions 中的 style 配置 > 优先级大于 commonStyle 中的配置
  • 绘制样式改变,绘制标记点的边框会随之改变
  • 示例中,polygon 类型是绘制样式特殊设定的,也可将每个绘制项都配置成不一样的
<template>
	<l-map style="height:400px;" :zoomControl="true">
		<l-tile-layer :url="url" :options="options"> </l-tile-layer>
		<l-draw-layer
			:commonStyle="commonStyle"
			:drawOptions="drawOptions"
		></l-draw-layer>
	</l-map>
</template>
<script>
	export default {
		data: () => ({
			url: "https://webrd03.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",
			options: { foo: "bar" },
			commonStyle: {
				color: "#E5D612",
				weight: 3,
			},
			drawOptions: [
				"rectangle",
				{
					type: "polygon",
					style: { color: "red", weigth: 5, fillColor: "#000000" },
				},
				"circle",
				"polyline",
				"delete",
			],
		}),
	};
</script>
Expand Copy

# 自定义绘制标记点

  • 属性 commonIconStyle,自定义整理绘制时的标记点的样式
  • 类型:object, 参考:css 样式写法
  • 优先级:drawOptions 中的 iconStyle 配置 > commonIconStyle > commonStyle 的影响 > drawOptions 中的 style 的影响
  • 示例中,polygon 类型是绘制样式特殊设定的,也可将每个绘制项都配置成不一样的
<template>
	<l-map style="height:400px;" :zoomControl="true">
		<l-tile-layer :url="url" :options="options"> </l-tile-layer>
		<l-draw-layer
			:commonIconStyle="commonIconStyle"
			:drawOptions="drawOptions"
		></l-draw-layer>
	</l-map>
</template>
<script>
	export default {
		data: () => ({
			url: "https://webrd03.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",
			options: { foo: "bar" },
			commonIconStyle: {
				border: "1px solid red",
				"background-color": "#FC05E8",
			},
			drawOptions: [
				"rectangle",
				{
					type: "polygon",
					iconStyle: {
						border: "none",
						"background-color": "#8B868B",
						"border-radius": "0",
					},
				},
				"circle",
				"polyline",
				"delete",
			],
		}),
	};
</script>
Expand Copy

# 自定义点标记 marker

<template>
	<l-map style="height:400px;" :zoomControl="true">
		<l-tile-layer :url="url" :options="options"> </l-tile-layer>
		<l-draw-layer :drawOptions="drawOptions"></l-draw-layer>
	</l-map>
</template>
<script>
	export default {
		data: () => ({
			url: "https://webrd03.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",
			options: { foo: "bar" },
			drawOptions: [],
		}),
		mounted() {
			const L = require("leaflet");
			this.drawOptions = [
				{
					type: "marker",
					style: {
						icon: L.icon({
							iconUrl: require("./marker-icon.png"),
							iconAnchor: [12, 38],
						}),
						title: "default",
					},
				},
				"rectangle",
				"polygon",
				"circle",
				"polyline",
				"delete",
			];
		},
	};
</script>
Expand Copy

# 自定义圆标记 circleMarker

  • style 中的配置,请参考 Path 类的 Options
<template>
	<l-map style="height:400px;" :zoomControl="true">
		<l-tile-layer :url="url" :options="options"> </l-tile-layer>
		<l-draw-layer :drawOptions="drawOptions"></l-draw-layer>
	</l-map>
</template>
<script>
	export default {
		data: () => ({
			url: "https://webrd03.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",
			options: { foo: "bar" },
			drawOptions: [
				{
					type: "circleMarker",
					style: {
						border: 20,
						color: "red",
						fillColor: "blue",
						fillOpacity: 0.5,
					},
				},
				"rectangle",
				"polygon",
				"circle",
				"polyline",
				"delete",
			],
		}),
	};
</script>
Expand Copy

# 属性说明

属性名称 说明 类型 可选值 默认值
mode 模式,操作栏水平或垂直 string horizontal / vertical vertical
customClass 组件最外层容器 类名 string
drawOptions 配置选项,具体看下表 object
drawShapeMore 是否绘制多个图形 boolean true
commonStyle 绘制图形时的图形样式
具体配置参考 Path 类的 Options
object
commonIconStyle 绘制图形时的标记点样式
具体配置参考 css 规则书写
object
measure 是否测量绘制图形的面积或长度
marker、circleMarker 类型不能测量
boolean false
position 地图类型的卡片显示的位置 string topleft/ topright/ bottomleft/ bottomright topright
dToB 地图类型的卡片距离表框的位置。 ( 如果想设置卡片距离 x 轴和 y 轴的边框距离不一样,可设置值为“10px 20px”,字符串中的两个值用空格隔开即可,或者设置为数组["10px","20px"] ) string,array 60px 10px
measureFormat 自定义测量后的显示内容 function 参数:type:测量类型,
measureNumber:测量出的数值

# drawOptions

drawOptions 中的配置优先级 > 属性说明中的配置

参数名称 说明 类型 可选值 默认值
type 绘制项的类型 string marker/circleMarker/rectangle
/polygon/circle/polyline/delete
title 鼠标滑过绘制栏时的提示信息 string
style 当前绘制图形的样式 object
iconStyle 当前绘制图形的标记点样式 object
measure 当前绘制的图形是否需要测量 boolean false

# 方法说明

方法名称 说明 参数 返回值
clearLayers 清除所有的绘制图层 this
getDrawLayers 得到所有的绘制图层 Layer[]
getDrawLayer 得到绘制图层 object
返回 featureGroup 图层本身
toGeoJSON 将绘制的图层转换标记为 GeoJSON 格式对象数据 object
返回 GeoJSON 的数据
toWKT 将绘制图层转换标记为 wkt 格式的字符串数据 string
返回 wkt 的数据,类型 type 为几何集合 GeometryCollection
toWktArray 将绘制图层数据转换为 wkt 格式的字符串 array
返回 wkt 的数据,数组中每项的类型为简单几何类型。(Point,LineString,Polygon,MultiPoint,MultiLineString,MultiPolygon)
setDrawShape 设置绘制图形 shapeInfo:绘制的图形信息,在类型和 drawOptions 保持一致 setDrawShape(shapeInfo={})
cancelDraw 取消图形绘制

# 事件说明

事件名称 说明 回调参数
changeType 切换绘制类型是触发 共一个参数,依次为:当前绘制类型包含的信息[object]
{type:'',title:'',style:{}}
startDraw 开始绘制时触发
marker、circleMarker 类型只能触发开始,无绘制中和绘制结束事件
共两个参数,依次为:绘制开始时的坐标[array]、绘制项的图形类型[string]
drawing 正在绘制、绘制中触发 共三个参数,依次为:绘制图形的临时图层[layer]、绘制图形的类型[string]、绘制图形的坐标[array]
finishDraw 绘制结束时触发 共一个参数,依次为:绘制图形的图层[layer]