vue 调用高德地图 绘制坐标测量点,测距工具,绘制线条

具体事件,具体需求请对照官方api
https://lbs.amap.com/api/javascript-api/reference/plugin
首先上效果图

image.png

项目需求:要求在高德地图上用测量工具绘制出锚点,然后吧锚点参数提交给后台,再次渲染地图为绘制的结果为线。
1.首先在public路径下的index.html文件下调用高德地图js,至于申请key请自行查看。(推荐下面npm引用)

<script language="javascript" src="//webapi.amap.com/maps?v=2.0&key=您申请的key值&plugin=AMap.ControlBar,AMap.ToolBar,AMap.RangingTool,AMap.Autocomplete,AMap.PlaceSearch,AMap.MouseTool"></script>

ps:npm 创建方法
npm install vue-amap --save
main.js中

// 引入vue-amap
import AMap from 'vue-amap';
Vue.use(AMap);
// 初始化vue-amap
AMap.initAMapApiLoader({
    // 申请的高德key
    key: '申请的高德key',
    // 插件集合
    plugin:  ['AMap.ControlBar', 'AMap.RangingTool', 'AMap.Autocomplete', 'AMap.PlaceSearch', 'AMap.ToolBar', 'AMap.MouseTool', 'AMap.PolyEditor'],
    v: '2.0',
  });

2.创建地图,以及仪表工具盘 this.resultslist 是后台传给我的数据 为了获取到地图的首个定位点。

let map = new AMap.Map("container", {
viewMode: "3D", // 3D地图
zoom: 16,//缩放
rotation:-15,//旋转度数
pitch:50, //倾斜角度
rotateEnable:true, //地图是否可旋转
pitchEnable:true, //是否允许设置俯仰角度
viewMode:'3D',//开启3D视图,默认为关闭
buildingAnimation:true,//楼块出现是否带动画
showBuildingBlock: true, // 设置地图显示3D楼块效果,移动端也可使用。推荐使用。
resizeEnable: true, // 固定大小的窗口的大小
zooms:[3,20], //地图显示的缩放级别范围在PC上,默认为[3,18],取值范围[3-18];在移动设备上,默认为[3,19],取值范围[3-19]
center: [this.resultslist[0].positionX,this.resultslist[0].positionY],//地图定位
});
this.maps=map
//仪表盘
var controlBar = new AMap.ControlBar({
position:{
  right:'10px',
  top:'14px'
 }
});
var toolBar = new AMap.ToolBar({
 position:{
   right:'40px',
   top:'125px'
 }
});
controlBar.addTo(map);
toolBar.addTo(map);

3.绘制测量工具坐标点 this.Custom为我勾选自定义坐标的时候开始绘制测量线(由于需求只需要绘制一条,如果需要绘制多条测量线自行补充)

 var ruler2;
 ruler2 = new AMap.RangingTool(map,{
 startLabelText:"START",
 midLabelText:"MID",
 endLabelText:"END"
 });
ruler2.turnOn(); //开启绘制
let that=this
AMap.Event.addListener(ruler2,"end",function(e){  
  console.log(e.points) //绘制测量工具点结束的数据
ruler2.turnOff()  //关闭绘制
});
// ps:如果遇到AMap.Event报错,先打印AMap,观察下面的参数
AMap.Event.addListener(ruler2,"removenode",function(e){
  console.log(e.points) //删除一段节点返回的数据
});    

4.绘制折线点 path 为折线的数组坐标具体格式为[['',''],['','']]绘制多条折线。

for (var i =0; i<this.getLineListest.length;i++) {
 if(this.getLineListest.length>0){
  let aaabc=this.getLineListest[i].id+"cc"
  aaabc = new AMap.Polyline({
  path:this.getLineListest[i].lineArrList,
  isOutline: true,
  outlineColor: '#ffeeff',
  borderWeight: 3,
  strokeColor: "#3366FF",
  strokeOpacity: 1,
  strokeWeight: 3, //线条粗细
// 折线样式还支持 'dashed'
  strokeStyle: "solid",
  strokeDasharray: [0, 5],
  lineJoin: 'round',
  lineCap: 'round',
  zIndex: 50,
  })
  map.add([aaabc]);
  this.aaabcsest=aaabc
 }
}

5.编辑画好的折线点。

<template>
<div>
<div @click="open()">开始编辑</div>
<div id="btn" @click="closend($event)">编辑结束</div>
</div>
<template>

 open(){
  // this.aaabcsest为绘制折线点数据
  //this.maps 为创建地图数据上面都有声明到
    let polyEditor = new AMap.PolyEditor(this.maps,this.aaabcsest)
    this.polyEditorlist=polyEditor
    polyEditor.open()
    polyEditor.on('addnode', function(event) {
     console.log(event)
    })
    polyEditor.on('adjust', function(event) {
     console.log(event)
    })
    polyEditor.on('removenode', function(event) {
      console.log(event)
    })
  },
  closend(){
   let arr = Object.keys(this.polyEditorlist)
   let that=this
   let btn = document.getElementById("btn");
   btn.click()  //这里执行模拟点击事件,点击一次方法相当于执行两次
   let polyEditor = this.polyEditorlist
   polyEditor.close()
   polyEditor.on('end', function(event) {
   console.log(event) //最终得到执行完毕的数据参数
   })
 },

6.绘制坐标点以及弹窗以及点击事件,由于弹框必须第一个显示所以我倒叙循环为了保证弹窗为第一个 aa为每次循环的数据依次添加坐标点。

for (var i =this.resultslist.length-1, marker; i>=0;i--) {
  if(this.resultslist[i].positionX!=='' && this.resultslist[i].positionY!==''){
  let aa=[this.resultslist[i].positionX,this.resultslist[i].positionY];
//坐标点
 marker = new AMap.Marker({
  map: map,
  offset: new AMap.Pixel(-10, -32) ,// 相对于基点的偏移位置
  icon: "https://webapi.amap.com/theme/v1.3/markers/n/mark_b.png",
  position: aa,
 });
  var infoWindow = new AMap.InfoWindow({
    offset:new AMap.Pixel(0, -35), //偏移量
  });
//坐标点弹框
  marker.content = 'html';
  marker.on('click', markerClick);
  marker.emit('click', {target: marker});
}
}
function markerClick(e) {
 infoWindow.setContent(e.target.content);
 infoWindow.open(map, e.target.getPosition());
}

vue npm 刷新页面地图可能会报错,如图所示:


image.png

只需要在new AMap.Map前面调用lazyAMapApiLoaderInstance就可以了,注意是从第一行到地图的最后结束。

import { lazyAMapApiLoaderInstance } from 'vue-amap';
 lazyAMapApiLoaderInstance.load().then(() => {
 let map = new AMap.Map("container", {
 })
})
image.png

写的很简单,如有不足请多多包含,有帮助到的话最好不过了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容