clw-ui/src/views/fence/map/index.vue

144 lines
4.2 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="index">
<el-button type="primary" @click="drawRectangle"></el-button>
<el-button type="primary" @click="editRectangle"></el-button>
<el-button type="primary" @click="deleRectangle"></el-button>
<div id="amapContainer"></div>
</div>
</template>
<script>
export default {
name: 'amapFence',
data () {
return {
path: [], // 当前绘制的多边形经纬度数组
polygonItem: [], // 地图上绘制的所有多边形对象
polyEditors: [] // 所有编辑对象数组
}
},
props: {
paths: {} // 编辑
},
mounted () {
this.intAmap(() => {
if (this.paths) {
this.editRectangle(this.paths);
}
});
},
methods: {
// 地图初始化
intAmap (callBack) {
this.AMap = window.AMap;
this.AMap.plugin(['AMap.MouseTool', 'AMap.PolyEditor', 'AMap.ControlBar'], function () {
//TODO 创建控件并添加
});
this.map = new this.AMap.Map("amapContainer", {
center: [116.434381, 39.898515],
zoom: 14,
mapStyle: "amap://styles/darkblue",
pitch: 80,
rotation: -15,
viewMode: '3D',//开启3D视图,默认为关闭
buildingAnimation: true,//楼块出现是否带动画
});
this.map.addControl(new this.AMap.ControlBar());
if (callBack && typeof callBack == 'function') {
callBack();
}
},
// 编辑围栏
editRectangle (paths) {
const path = paths;
const AMap = window.AMap;
var polygon = new this.AMap.Polygon({
path: path,
strokeColor: "#FF33FF",
strokeWeight: 6,
strokeOpacity: 0.2,
fillOpacity: 0.4,
fillColor: '#1791fc',
zIndex: 50,
});
this.map.add(polygon);
this.polygonItem.push(polygon);
// 缩放地图到合适的视野级别
this.map.setFitView([polygon]);
this.polyEditor = new AMap.PolyEditor(this.map, polygon);
this.polyEditor.open();
this.polyEditors.push(this.polyEditor);
this.polyEditor.on('addnode', function (event) {
console.info('触发事件addnode', event)
console.info('修改后的经纬度:', polygon.getPath())
});
this.polyEditor.on('adjust', function (event) {
console.info('触发事件adjust', event)
console.info('修改后的经纬度:', polygon.getPath())
});
this.polyEditor.on('removenode', function (event) {
console.info('触发事件removenode', event)
console.info('修改后的经纬度:', polygon.getPath())
});
this.polyEditor.on('end', function (event) {
console.info('触发事件: end', event)
console.info('修改后的经纬度:', polygon.getPath())
// event.target 即为编辑后的多边形对象
});
},
// 绘制多边形
drawRectangle () {
const vm = this;
this.mouseTool = new this.AMap.MouseTool(this.map);
const polygon = this.mouseTool.polygon({
strokeColor: 'red',
strokeOpacity: 0.5,
strokeWeight: 6,
fillColor: 'blue',
fillOpacity: 0.5,
// strokeStyle还支持 solid
strokeStyle: 'solid',
// strokeDasharray: [30,10],
});
this.mouseTool.on('draw', function (event) {
// event.obj 为绘制出来的覆盖物对象
var polygonItem = event.obj;
var paths = polygonItem.getPath();//取得绘制的多边形的每一个点坐标
console.log('覆盖物对象绘制完成各个点的坐标', paths);
var path = []; // 编辑的路径
paths.forEach(v => {
path.push([v.lng, v.lat])
});
vm.path = path;
vm.editRectangle(vm.path);
vm.polygonItem.push(event.obj);
vm.map.remove(event.obj); // 删除多边形
console.log(polygon, '------polygon-----');
});
},
// 批量删除多边形
deleRectangle () {
// 取消编辑状态
this.polyEditors.forEach(v => {
v.close();
});
this.map.clearMap(); // 删除地图所有覆盖物
},
}
}
</script>
<style lang="scss" scoped>
#amapContainer {
height: 800px;
width: 1000px;
}
</style>