功能需求

引入并创建地图

支持鼠标工具

鼠标画矢量图(线、圆、矩形、多边形)

支持矢量图编辑、获取各点经纬度及求面积等操作

自定义鼠标右键事件

一图胜千言,效果图如下

创建地图对象

//DOM加载后动态引入地图脚本并map初始化

//template

//mounted

this.$nextTick(function() {

this.initMap();

});

initMap() {

var url = 'https://webapi.amap.com/maps?v=1.4.15&key=秘钥;

var jsapi = document.createElement('script');

jsapi.charset = 'utf-8';

jsapi.src = url;

document.head.appendChild(jsapi);

setTimeout(() => {//一秒延迟,等待脚本加载

let that = this;

let map = new AMap.Map('map', {

zoom: 13, //级别

center: [117.226737, 31.820066], //中心点坐标

pitch: 30, // 地图俯仰角度,有效范围 0 度- 83 度

viewMode: '2D' // 地图模式

});

this.MAP = map;//将map挂载到组件data,后续交互需要用到

}, 1000);

},

复制代码

插件介绍(plugin)

map众多功能需要插件的支持官方文档

使用步奏

//1、引入插件,支持按需异步加载和同步加载,可同时引入多个插件

AMap.plugin(

[

'AMap.InfoWindow',

'AMap.ContextMenu',

'AMap.Heatmap',

'AMap.MouseTool',

'AMap.RangingTool',

'AMap.CircleEditor',

'AMap.PolyEditor',

'AMap.ToolBar',

'AMap.Scale',

'AMap.OverView',

'AMap.MapType',

'AMap.Geolocation'

],

function() {

//插件引入回调事件,可添加工具控件,也可创建插件实例

map.addControl(new AMap.ToolBar({ position: 'RT' }));// 在图面添加比例尺控件,展示地图在当前层级和纬度下的比例尺

map.addControl(new AMap.Scale());// 在图面添加鹰眼控件,在地图右下角显示地图的缩略图

map.addControl(new AMap.OverView({ isOpen: true }));// 在图面添加类别切换控件,实现默认图层与卫星图、实施交通图层之间切换的控制

}

);

2、创建插件实例,非特殊情况需避免重复创建多个实例,复用同一个实例即可,vue中可将实例保存到data中;

//插件实例可在任何地方创建,例如鼠标工具实例创建如下:

//注意:实例的创建过程需要放到plugin的回调函数中执行,防止创建实例前没有获取到map实例

this.mouseTool = new AMap.MouseTool(map);

//this.mouseTool 实例挂载到data,方便全局使用

//AMap.MouseTool 插件名

//map 初始化的地图对象

//监听鼠标工具出发的事件

this.mouseTool.on('draw', function(e) {

//做些什么

});

//自定义交互事件,当事件被dom触发后可以被mouseTool监听到

画圆

draw(type) {

switch (type) {

case 'polygon': {

......

break;

}

case 'circle': {

......

break;

}

}

},

3、调用实例的方法,使用相关功能。

this.ruler = new AMap.RangingTool(map); //创建测量工具实例

this.ruler.turnOn();

复制代码

鼠标画矢量图

划线
画圆
矩形
多边形

draw(type) {

//mouseTool是鼠标工具实例

switch (type) {

case 'marker': {//画点

mouseTool.marker({

//同Marker的Option设置

});

break;

}

case 'polyline': {//划线

mouseTool.polyline({

strokeColor: '#80d8ff'

//同Polyline的Option设置

});

break;

}

case 'polygon': {//画多边形

mouseTool.polygon({

strokeColor: '#f7797d',

strokeOpacity: 1,

strokeWeight: 2,

strokeOpacity: 1,

strokeStyle: 'solid',

fillOpacity: 0.1,

fillColor: '#69AC8F',

zIndex: 100

});

break;

}

case 'rectangle': {//画矩形

mouseTool.rectangle({

strokeColor: '#f7797d',

strokeOpacity: 1,

strokeWeight: 2,

strokeOpacity: 1,

strokeStyle: 'solid',

fillOpacity: 0.1,

fillColor: '#69AC8F',

zIndex: 100

});

break;

}

case 'circle': {//画圆

mouseTool.circle({

strokeColor: '#f7797d',

strokeOpacity: 1,

strokeWeight: 2,

strokeOpacity: 1,

strokeStyle: 'solid',

fillOpacity: 0.1,

fillColor: '#69AC8F',

zIndex: 100

});

break;

}

}

}

复制代码

支持矢量图编辑、获取各点经纬度及求面积等工具插件

//编辑各种矢量图形需要对应的插件

1、引入

2、创建实例

3、使用:调用方法、监听事件

let circleEditor = new AMap.CircleEditor(map, e.obj);//创建圆实例,e.obj是mouseTool事件回调函数返回的数据对象

circleEditor.open(); //打开编辑状态

监听圆编辑过程中的事件

circleEditor.on('move', function(event){

// event.target 即为编辑后的图形对象,包含图形的相关数据和方法

event.target.getCenter().lat.toFixed(7)//获取圆心经度

});

circleEditor.on('adjust', function(event){

});

circleEditor.on('end', function(event){

});

复制代码

自定义鼠标右键事件

//地图绑定鼠标右击事件——弹出右键菜单

//地图对象监听右键事件(这里监听的是地图上的右键事件,如果是监听绘画的矢量图右键,

则把监听对象改成绘画的矢量图)

map.on('rightclick', function(e){

that.rightclickObj(); //定义右键内容

that.contextMenu.open(map, e.lnglat);

that.contextMenuPositon = e.lnglat; //右键菜单位置

});

//定义右键内容

rightclickObj() {

let that = this;

//定义内容

let content = [];

content.push("

");

content.push(

"

启用编辑

"

);

content.push(

"

结束编辑

"

);

content.push(

"

计算面积

"

);

content.push(

"

移除图形

"

);

if (that.circleEditor) {

content.push(

"

半径

"

);

}

content.push('

');

//创建右键实例并添加自定义的内容

that.contextMenu = new AMap.ContextMenu({

isCustom: true,

content: content.join('')

});

}

//强调说明:自定义的dom是基于地图对象生成的,并不能像vue一样绑定事件,这里采用jQuery的方式出发的事件。如下

mounted() {

this.$nextTick(function(){

this.initMap();

});

$('body').on('click', '.menu-list-edit-start', () => {//这里采用箭头函数,为了this指向vue

//调用定义的dom交互

this.rightMenuu(0);

});

$('body').on('click', '.menu-list-edit-end', () => {

this.rightMenuu(1);

});

$('body').on('click', '.menu-list-get-area', () => {

this.rightMenuu(2);

});

$('body').on('click', '.menu-list-remove', () => {

this.rightMenuu(3);

});

$('body').on('click', '.menu-list-radius', () => {

this.rightMenuu(4);

});

}

复制代码

总结

仔细对比会发现,地图无非就是自身API和引入插件实现相应功能

事件监听通过 .on(‘支持的事件名’,function)

事件插件需要引入并创建实例,实例也包含方法和事件,方法直接调用,事件用.on监听,事件的回调函数会返回图形的相关数据以及方法

最后,地图的所有功能都是由一个或多个API或插件组合而成,好在官方文档足够详细且每个功能点都有demo,所以当遇到一个功能不知如何下手时,试着把功能拆成更小的步奏或单元

初次使用地图,以上所述如有不足之处或者你有更好的方法,欢迎留言指出

vue 高德地图多边形_Vue + 高德地图画矢量图相关推荐

  1. vue 高德地图多边形_高德地图只显示部分地区遮罩其他地区(vue)

    mounted() { this.$nextTick(()=>{ this.initmap(); this.init1("新疆"); }); }, initmap() { / ...

  2. 高德地图多边形覆盖物等间距缩小或者放大算法

    需求: 高德地图多边形覆盖物等间距缩小,效果如下 原理可参考:https://blog.csdn.net/weixin_38169413/article/details/101161891 实现 第一 ...

  3. js 跳转到指定位置 高德地图_JS引入高德地图定位

    在此记录一下X项目使用高德地图的思路高德地图(X项目前端框架是Jquery) 2准备工作(封装方法,以便直接调用) -2.2封装超时方法($.timeOut-参考) -2.3封装异步调用地图的方法 / ...

  4. 高德地图多边形覆盖物添加、获取、删除

    最近在做有关地图的项目 汇总一下 方便以后使用 不喜勿喷 上图是覆盖物绘制完成之后的编辑状态 引入高德地图js <script src="https://webapi.amap.com ...

  5. JS如何在高德地图多边形覆盖物填充平行折线的算法

    需求:在多边形覆盖物中填充折线 实现 第一步: 用JS封装一个对象或者采用ES6的Class写法,并将地图经纬度转成坐标点 class ScanFill {allPoints = [] // 存多边形 ...

  6. android 高德地图 删除多边形,高德地图多边形覆盖物添加、获取、删除

    最近在做有关地图的项目 汇总一下 方便以后使用 上图是覆盖物绘制完成之后的编辑状态 引入高德地图js P.s. plugin后跟的是地图插件 1.覆盖物绘制 map.plugin(["AMa ...

  7. js添加多marker 高德地图_【高德地图API】从零开始学高德JS API(三)覆盖物——标注|折线|多边形|信息窗口|聚合marker|麻点图|图片覆盖物...

    摘要:覆盖物,是一张地图的灵魂.有覆盖物的地图,才是完整的地图.在一张地图上,除了底层的底图(瓦片图,矢量图),控件(有功能可操作的工具),最重要最不可缺少的就是覆盖物了.覆盖物有多种,包括,标注.折 ...

  8. js 跳转到指定位置 高德地图_第三方高德地图Javascript API

    1.    申请JSAPI的开发者Key :   http://lbs.amap.com/dev/key 2.    引入高德地图JSAPI文件: AMap.Scale    // 地图的比例因子 / ...

  9. android+高德地图教程,Android高德地图开发(三)地图简单操作

    一.概述 上一节中我们了解到地图的定位,图层切换,离线地图等基础操作,接下来学习地图的基本操作. 二.本章内容 --- 地图交互设置 --- 地图绘制 1.地图交互设置 在使用地图的时候,不可避免的会 ...

最新文章

  1. 机器学习PAL数据预处理
  2. 如何优雅地展示机器学习项目!
  3. computer science sticker
  4. ABAP function module 的使用
  5. mysql修改字段 新增字段
  6. STL15-map/multimap容器
  7. 最热开源静态网站生成器 TOP 20
  8. [Java]Socket和ServerSocket学习笔记
  9. SpringMVC源码解析 - HandlerAdapter - @SessionAttributes注解处理
  10. kali升级软件_KALI更新软件源地址
  11. python 3.X中打包二进制数据存储字符串出错原因分析
  12. pod install pod update
  13. 360安全桌面没有计算机了,360安全卫士桌面上的图标不见了怎么办
  14. 张栋_机器学习的照片 - 微相册
  15. Android 监听短信数据库过滤获取短信内容上传至服务器
  16. BA-中央空调冰蓄冷(视频)
  17. 【校招VIP】互联网校招项目实习对项目的要求不重要?大错特错!你忽略掉的项目考察重点都在这里!
  18. truetype字体怎么转换成普通字体_社交资料不再普通 Instagram Fonts在线生成可复制字体...
  19. 太原计算机学校专科代码,(全国高等院校学校代码查询).doc
  20. Mitmproxy/mitmdump中文文档以及配置教程

热门文章

  1. 【控制】如何入门现代控制理论
  2. 类和对象—友元—全局函数做友元
  3. 技术干货-PCB彩印教程(水转印)
  4. 【PC工具】更新:在线智能抠图工具,在线视频、图片、音频等转换工具,绿色免安装抠图神奇抠图工具...
  5. 异步消息的传递-回调机制
  6. 拯救react的hooks:react的问题和hooks的作用
  7. 多delegate使用
  8. Micropython 红外防坠落小车实验教程
  9. 语音增强原理之噪声估计
  10. 【涛声依旧】华为的“大服务”