npm i @amap/amap-jsapi-loader --save
<!-- 高德地图 -->
<template>
<div style="display: flex;">
<div id="container" style="width: 800px; height: 500px; border: 1px solid red;"></div>
<div class="input-card" style="width: 200px">
<h4 style="margin-bottom: 10px; font-weight: 600">利用mouseTool绘制和编辑多边形</h4>
<button class="btn" @click="drawPolygon" style="margin-bottom: 5px">绘制多边形</button>
<button class="btn" @click="getPolygon" style="margin-bottom: 5px">获取多边形</button>
<button class="btn" @click="createPolygon" style="margin-bottom: 5px">创建多边形</button>
<button class="btn" @click="editorPolygon" style="margin-bottom: 5px">编辑多边形</button>
<button class="btn" @click="saveEditedPolygon" style="margin-bottom: 5px" :disabled="!editMode">保存编辑</button>
</div>
</div>
</template>
<script setup>
import { onMounted, ref } from 'vue'
import AMapLoader from '@amap/amap-jsapi-loader'
import { shallowRef } from '@vue/reactivity'
const map = shallowRef(null)
const mouseTool = shallowRef(null)
const polyEditor = shallowRef(null)
const path = ref([
[105.522044, 37.045952],
[105.559123, 37.028686],
[105.497668, 37.024575],
[105.495265, 37.051158]
])
const polygonOverlay = shallowRef(null)
const editMode = ref(false)
onMounted(() => {
setTimeout(() => {
mapInit()
}, 10)
})
const mapInit = () => {
AMapLoader.load({
key: "you key",
version: "2.0",
plugins: [],
}).then((AMap) => {
map.value = new AMap.Map("container", {
viewMode: "3D",
zoom: 12,
center: [105.602725, 37.076636],
})
AMap.plugin(['AMap.Scale', 'AMap.ToolBar', 'AMap.HawkEye', 'AMap.MapType', 'AMap.MouseTool','AMap.PolyEditor'], function () {
const scale = new AMap.Scale()
map.value.addControl(scale)
map.value.addControl(new AMap.ToolBar())
map.value.addControl(new AMap.HawkEye())
map.value.addControl(new AMap.MapType())
})
mouseTool.value = new AMap.MouseTool(map.value)
map.value.on('click', function (ev) {
// 地图点击事件
})
}).catch(e => {
console.log(e)
})
}
// 绘制多边形
const drawPolygon = () => {
if (mouseTool.value) {
mouseTool.value.polygon({
strokeColor: "#000",
strokeOpacity: 1,
strokeWeight: 2,
strokeOpacity: 1,
fillColor: '#1791fc',
fillOpacity: 0.1,
strokeStyle: "solid",
})
mouseTool.value.on('draw', function (event) {
// 获取绘制的覆盖物
polygonOverlay.value = event.obj
})
}
}
// 获取绘制的多边形
const getPolygon = () => {
if (polygonOverlay.value) {
// 在控制台中查看多边形的路径坐标
console.log("多边形路径坐标:", polygonOverlay.value.getPath())
}
}
// 创建多边形
const createPolygon = () => {
var polygon = new AMap.Polygon({
path: path.value,
// strokeColor: "#FF33FF",
// strokeWeight: 1,
// strokeOpacity: 0.2,
// fillOpacity: 0.4,
// fillColor: '#1791fc',
zIndex: 50,
bubble: true,
})
map.value.add([polygon])
polygonOverlay.value = polygon
}
// 多边形编辑
const editorPolygon = () => {
if (polygonOverlay.value) {
console.log(polygonOverlay.value);
if (!polyEditor.value) {
// 创建多边形编辑工具
polyEditor.value = new AMap.PolyEditor(map.value, polygonOverlay.value)
}
// 进入编辑模式
polyEditor.value.open()
editMode.value = true
}
}
// 保存编辑后的多边形
const saveEditedPolygon = () => {
if (editMode.value && polyEditor.value) {
// 退出编辑模式
polyEditor.value.close()
editMode.value = false
}
}
</script>