vue-cli项目h5页面或者PC端页面引入高德地图组件,多点标注,自定义弹窗的详细描述

1.index.html里引入标签:

<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.3&key=yourKey"></script>
<script src="https://webapi.amap.com/ui/1.0/main.js?v=1.0.11"></script>

2.新建一个js文件(mapConf.js)

export default function MapLoader () { // <-- 原作者这里使用的是module.exports

return new Promise((resolve, reject) => {

if (window.AMap) {
  resolve(window.AMap)
} else {
    var script = document.createElement('script')
    script.type = 'text/javascript'
    script.async = true
    script.src = 'http://webapi.amap.com/maps?v=1.3&callback=initAMap&key=yourKey'
    script.onerror = reject
    document.head.appendChild(script)
}

window.initAMap = () => {
  resolve(window.AMap)
}
})
}

3.将新建的js文件引入地图页面

import MapLoader from '../../../common/mapConf' 即:实例化Amap对象

初始化显示map 需要定义center(中心点),zoom(显示地图级别 可以理解为缩放比例)。

MapLoader().then(AMap => {
  that.map = new AMap.Map('container', { //“container”是html定义的地图组件的id
  center: [116.42894, 39.894624],
  zoom: 15,
  resizeEnable: true
})
AMap.plugin([
  'AMap.ToolBar',
], function(){

  // 在图面添加工具条控件,工具条控件集成了缩放、平移、定位等功能按钮在内的组合控件
  that.map.addControl(new AMap.ToolBar({

// 简易缩放模式,默认为 false
liteStyle: true

}));

});

 //添加多个点标注跟自定义窗体信息方法
this.listenerFuncMap()

}, e => {

})

listenerFuncMap代码

listenerFuncMap(){

let self =this;

AMapUI.loadUI(['misc/MarkerList', 'overlay/SimpleMarker', 'overlay/SimpleInfoWindow'], function(MarkerList, SimpleMarker, SimpleInfoWindow) {

var markerList = new MarkerList({

//关联的map对象

map: self.map,

//选中状态(通过点击列表或者marker)时在Marker和列表节点上添加的class,可以借此编写css控制选中时的展示效果

selectedClassNames: 'my-active',

//返回数据项的Id

getDataId: function(dataItem, index) {

//index表示该数据项在数组中的索引位置,从0开始,如果确实没有id,可以返回index代替

return dataItem.id;

},

//返回数据项的位置信息,需要是AMap.LngLat实例,或者是经纬度数组,比如[116.789806, 39.904989]

getPosition: function(dataItem) {

return dataItem.position;

},

//返回数据项对应的Marker

getMarker: function(dataItem, context, recycledMarker) {

var label = {

offset: new AMap.Pixel(16, 18), //修改label相对于marker的位置

};

//存在可回收利用的marker

if (recycledMarker) {

//直接更新内容返回

recycledMarker.setLabel(label);

return recycledMarker;

}

//返回一个新的Marker

if(dataItem.nameDesc=="技师:"){

return new AMap.Marker({

label: label,

icon:new AMap.Icon({

image:"http://image.uservices.cn/tmp/uploads/fws/20181214/5c136a64111b8.png",

size:new AMap.Size(50,50),

imageSize:new AMap.Size(50,50)

}),

});

}else{

return new AMap.Marker({

label: label,

icon:new AMap.Icon({

image:dataItem.headerImg?dataItem.headerImg:"http://image.uservices.cn/tmp/uploads/fws/20181214/5c13693c4b239.png",

size:new AMap.Size(50,50),

imageSize:new AMap.Size(50,50)

}),

});

}

},

//返回数据项对应的infoWindow

getInfoWindow: function(dataItem, context, recycledInfoWindow) {

if (recycledInfoWindow) {

recycledInfoWindow.setInfoTitle(dataItem.nameDesc+(dataItem.name));

recycledInfoWindow.setInfoBody("<p style='margin: 0;padding: 0;'>"+dataItem.addressDesc+dataItem.address+"</p><p style='margin: 0;padding: 0;'>"+dataItem.lastTimeDesc+dataItem.lastTime+"</p>");

return recycledInfoWindow;

}

return new SimpleInfoWindow({

infoTitle: dataItem.name,

infoBody: dataItem.address,

offset: new AMap.Pixel(0, -30)

});

},

});

//监听选中改变

markerList.on('selectedChanged', function(event, info) {

//console.log(event, info);

});

//构建一个数据项数组,数据项本身没有格式要求,但需要支持下述的getDataId和getPosition

var data = [{

nameDesc:"技师:",

name: "张三",

position: [118.42894, 39.894624],

address:"啦啦啦",

addressDesc:"地址:",

lastTime:"8102-10-17",

lastTimeDesc:"获取时间:",

},{

nameDesc:"联系人:",

name: "张燕妮",

position: [116.22894, 39.894624],

address:"哈哈哈",

addressDesc:"地址:",

lastTime:"110",

lastTimeDesc:"电话:",

headerImg:""

}];

//展示该数据

markerList.render(data);

});

self.map.setFitView(); //是标注的点全都自适应初始化显示在地图上

},

如图:

clipboard.png

4.em.....奉上所有代码


<div class="wrapper">

<div id="container"></div>

</div>

</template>

<script>

import MapLoader from '../../../common/mapConf'

import api from '../api/api';

export default {

data() {

return {

center: [116.42894, 39.894624],

zoom: 15,

markers:[],

map:null,

detailData:"",//详细信息

}

},

methods:{

initMap(){

this.getEngineerAndCustomerPosFunc()

},

listenerFuncMap(){

let self =this;

AMapUI.loadUI(['misc/MarkerList', 'overlay/SimpleMarker', 'overlay/SimpleInfoWindow'], function(MarkerList, SimpleMarker, SimpleInfoWindow) {

var markerList = new MarkerList({

//关联的map对象

map: self.map,

//选中状态(通过点击列表或者marker)时在Marker和列表节点上添加的class,可以借此编写css控制选中时的展示效果

selectedClassNames: 'my-active',

//返回数据项的Id

getDataId: function(dataItem, index) {

//index表示该数据项在数组中的索引位置,从0开始,如果确实没有id,可以返回index代替

return dataItem.id;

},

//返回数据项的位置信息,需要是AMap.LngLat实例,或者是经纬度数组,比如[116.789806, 39.904989]

getPosition: function(dataItem) {

return dataItem.position;

},

//返回数据项对应的Marker

getMarker: function(dataItem, context, recycledMarker) {

var label = {

offset: new AMap.Pixel(16, 18), //修改label相对于marker的位置

};

//存在可回收利用的marker

if (recycledMarker) {

//直接更新内容返回

recycledMarker.setLabel(label);

return recycledMarker;

}

//返回一个新的Marker

if(dataItem.nameDesc=="技师:"){

return new AMap.Marker({

label: label,

icon:new AMap.Icon({

image:"http://image.uservices.cn/tmp/uploads/fws/20181214/5c136a64111b8.png",

size:new AMap.Size(50,50),

imageSize:new AMap.Size(50,50)

}),

});

}else{

return new AMap.Marker({

label: label,

icon:new AMap.Icon({

image:dataItem.headerImg?dataItem.headerImg:"http://image.uservices.cn/tmp/uploads/fws/20181214/5c13693c4b239.png",

size:new AMap.Size(50,50),

imageSize:new AMap.Size(50,50)

}),

});

}

},

//返回数据项对应的infoWindow

getInfoWindow: function(dataItem, context, recycledInfoWindow) {

if (recycledInfoWindow) {

recycledInfoWindow.setInfoTitle(dataItem.nameDesc+(dataItem.name));

recycledInfoWindow.setInfoBody("<p style='margin: 0;padding: 0;'>"+dataItem.addressDesc+dataItem.address+"</p><p style='margin: 0;padding: 0;'>"+dataItem.lastTimeDesc+dataItem.lastTime+"</p>");

return recycledInfoWindow;

}

return new SimpleInfoWindow({

infoTitle: dataItem.name,

infoBody: dataItem.address,

offset: new AMap.Pixel(0, -30)

});

},

});

//监听选中改变

markerList.on('selectedChanged', function(event, info) {

//console.log(event, info);

});

//构建一个数据项数组,数据项本身没有格式要求,但需要支持下述的getDataId和getPosition

if(self.detailData){

var data = [{

nameDesc:"技师:",

name: self.detailData.technician.name,

position: [self.detailData.technician.lon, self.detailData.technician.lat],

address:self.detailData.technician.address,

addressDesc:"地址:",

lastTime:self.detailData.technician.lastTime,

lastTimeDesc:"获取时间:",

},{

nameDesc:"联系人:",

name: self.detailData.account.name,

position: [self.detailData.account.lon, self.detailData.account.lat],

address:self.detailData.account.address,

addressDesc:"地址:",

lastTime:self.detailData.account.mobile,

lastTimeDesc:"电话:",

headerImg:self.detailData.account.avatar_hc

}];

}

//展示该数据

markerList.render(data);

});

self.map.setFitView();

},

//初始化获取位置

getEngineerAndCustomerPosFunc(){

api.getEngineerAndCustomerPosAxios(params).then((res)=>{

if(res.code==200){

this.detailData = res.data;

let that = this;

MapLoader().then(AMap => {

that.map = new AMap.Map('container', {

center: [116.42894, 39.894624],

zoom: 15,

resizeEnable: true

})

AMap.plugin([

'AMap.ToolBar',

], function(){

// 在图面添加工具条控件,工具条控件集成了缩放、平移、定位等功能按钮在内的组合控件

that.map.addControl(new AMap.ToolBar({

// 简易缩放模式,默认为 false

liteStyle: true

}));

});

this.listenerFuncMap()

}, e => {

})

}else{

this.$toast.center("信息获取失败")

}

})

}

},

created(){

this.initMap();

document.title = '技师位置';

},

}

</script>

<style scoped>

.wrapper{

position:absolute;

width:100%;

height:100%;

}

#container{

width: 100%;

height: 100%;

}

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

推荐阅读更多精彩内容