项目背景:要做一个数据大屏,需要用到地图以及点标记,UI大致是这样:

我是结合vue使用的,vue调用高德地图有一个组件是vue-amap,基于vue2.0和高德地图的
我是后端开发,vue是才上手,没有使用npm安装,整个实现上可能走了一些弯路,下面整理一下实现步骤
1.引入amap的js,将key修改为你的高德key

<script type="text/javascript" src='https://webapi.amap.com/maps?v=1.4.15&key=XXXXXXXXXXXXXXX&plugin=AMap.ToolBar'></script>

2.初始化地图

// 初始化高德地图的 key 和插件
var MapsEvent = window.VueAMap.initAMapApiLoader({key: '{$mapkey}',plugin: ['AMap.Autocomplete',    //输入提示插件'PlaceSearch', 'Scale', 'OverView', 'ToolBar', 'MapType', 'PolyEditor', 'AMap.CircleEditor','MarkerClusterer'],v: '1.4.4'    // 默认高德 sdk 版本为 1.4.4
});

3.页面引入

1.使用3D的话就设置viewMode为3D
2.设置center中心点,一般数据大屏都会默认固定一个中心点,所以不用费心去实时获取当前定位点,直接选个坐标点了写死在页面就行了,或者是把中间点的坐标做成后台动态配置
3.zoom缩放比例根据实际业务
4.el-amap-marker 是点标记
5.el-amap-info-window是信息窗体,不是说每个点标记都要有一个独立的信息窗体,是共用的同一个信息窗体,所以点击每个点标记的时候将信息窗体的内容变化就好了

<el-amapref="map":vid="'mapDiv2'"viewMode="3D"map-style="dark":center="center":zoom="zoom":events="events"class="amap-demo"rotateEnable="true"><el-amap-marker v-for="(marker,index) in markers" :position="marker.position" :title="marker.title" :icon="marker.icon" :key="index" :events="marker.events"></el-amap-marker><el-amap-info-window:position="currentWindow.position":content="currentWindow.content":visible="currentWindow.visible":events="currentWindow.events"></el-amap-info-window></el-amap>

4.配置数据

var app = new Vue({el: '#app',data: {center: [112.987526,28.220296],zoom: 22,position: [112.987526,28.220296],icon:'/assets/webimg/location_blue.png',currentWindow: {position: [112.987526,28.220296],content: '内容内容',events: {},visible: false},events: {init(o){o.setMapStyle("amap://styles/bf0b2bdda16d28c16977f0ca38d412fc"); //自定义的高德地图的样式o.setFeatures(['bg','building','road']); //设置地图里面显示的内容},//地图移动的时候关闭信息窗体mapmove(){app.currentWindow.visible = false  //这里得用”app.~“去调用vue里面的方法,我的vue的对象就是定义的”var app = new Vue({})“},//地图缩放的时候关闭信息窗体zoomchange(){app.currentWindow.visible = false},},markers: [],}mounted(){this.servicepoint() //调用方法}methods:{//关闭信息窗体closeWindow(){this.currentWindow.visible = false},//服务网点servicepoint(){var that = this;axios({method: 'post',url: '/api/organization/servicepoint',}).then(function(res){if(res.data.code == 1){var data = res.data.data;var markers = [];$.each(data,function(k,item){if(item.longitude && item.latitude){//三种点标记,设置三种不同的图标if(item.type == 1){var icon = '/assets/webimg/location_yellow.png';}else if(item.type == 2){var icon = '/assets/webimg/location_blue.png';}else{var icon = '/assets/webimg/location_white.png';}//定义每个点标记var marker = {id:item.id,   //自定义,做业务判断position:[item.longitude,item.latitude],  //必填icon: icon, //必填title:item.name,    //必填events:{    //events里面定义点标记的事件,比如点击事件click:()=>{// alert('click marker');if(item.type == 1){//给窗体内容赋值  content内容自定义,这个内容是纯字符串,可以使用原生写法,字符串拼接,但是这里面的所有事件都只能原生,不能使用vue的v-on:事件定义that.currentWindow = {visible:true,    //窗体显示position:[item.longitude,item.latitude],content:'<div class="infowindow">' +'<div class="title">'+item.name+'</div>' +'<div class="people">社区负责人:'+item.contact+' '+item.mobile+'</div>'+'<div class="closeicon" οnclick="closeWindow()"><i class="fa fa-close"></i></div>'+'</div>',};}else if(item.type == 2){that.currentWindow = {visible:true,position:[item.longitude,item.latitude],content:'<div class="infowindow">' +'<div class="title">'+item.name+'</div>' +'<div class="activitytime">活动时间:'+item.service_start+'-'+item.service_end+'</div>'+'<div class="people">报名人数:'+item.people+'人</div>'+'<div class="closeicon" οnclick="closeWindow()"><i class="fa fa-close"></i></div>'+'</div>',};}else{that.currentWindow = {visible:true,position:[item.longitude,item.latitude],content:'<div class="infowindow">' +'<div class="title">'+item.name+'</div>' +'<div class="activitytime">求助人:'+item.contact+' '+item.mobile+'</div>'+'<div class="people">' +'<div>需要人数:'+item.people+'人</div>'+'<div class="deal" style="cursor: pointer" οnclick="dealnowouter('+item.id+',2)">立即安排</div>'+'</div>'+'<div class="closeicon" οnclick="closeWindow()"><i class="fa fa-close"></i></div>'+'</div>',};}console.log('clicked marker')}},offset: new AMap.Pixel(-13, -30),    //偏移量clickable:true,    //点标记是否可以点击visible: true,   //点标记是否显示}if(item.type == 3){marker.contact = item.contact;marker.mobile = item.mobile;marker.address = item.address;}//将定义的点赋值到markers中markers.push(marker);}})that.markers = markers;that.ismap = true;}}).catch(function (error) {// handle errorconsole.error(error);}).then(function () {// always executed});},}
})

5.信息窗体中的点击事件

//使用原生写法
<script>//关闭信息窗体function closeWindow(){app.closeWindow();}
</script>

6.需要注意的地方

1.信息窗体自带的关闭按钮,一旦点击,后面再想让信息窗体出现,怎么都不会出现了,所以我换了一种方法实现,自己写了一个关闭按钮,然后自己写点击事件,也就是上文中的closeWindow,然后用jquery的点击去调用vue的点击,也就是app.method去调用vue的方法
2.去掉高德地图点标记、信息窗体的默认样式

.amap-container img {width: 25px;height: 34px;
}
//窗体关闭按钮样式
.amap-info-close{display: none;
}
//去掉窗体的sharp那个小三角形
.bottom-center .amap-info-sharp{display: none;
}
//定义最外框的窗体样式
.amap-info-content{width: 400px;background: rgba(22,46,92,0.7);border: 2px #2d67c3 solid;padding: 20px;
}
//然后就是针对content里面内容的样式定义了
.infowindow{width: 100%;height: 100%;position: relative;
}
.infowindow .title{font-size: 20px;color: #ffffff;line-height: 26px;font-weight: bold;
}
.infowindow .activitytime{font-size: 16px;color: rgb(181, 208, 255);margin: 10px 0 6px 0;
}
.infowindow .people{font-size: 16px;color: rgb(181, 208, 255);display: flex;align-items: center;justify-content: space-between;
}
.infowindow .people .deal{color: #EEEEF1;font-size: 14px;background: rgba(206, 90, 96, 0.55);padding: 3px 6px;border-radius: 2px;
}
.infowindow .closeicon{cursor: pointer;
}
.infowindow .closeicon i{position: absolute;top: 0;right: 0;color: #ffffff;width: 20px;height: 20px;
}

高德地图点标记及信息窗体的使用相关推荐

  1. 使用高德地图展示点位和信息窗体展示数据及播放视频

    使用高德地图做了一个在地图展示点位,并通过点击,显示直播的功能,这个任务是为了之后大屏做准备. 这是一个能展示多个点标记,并在点击的时候弹出信息窗体,并在信息窗体中播放视频,且展示相关信息以及操作事件 ...

  2. js如何同时打开多个信息窗口 高德地图_高德地图-展示多个信息窗口

    1.问题背景 高德地图,设置小图标,并点击图标显示信息 2.实现源码 高德地图展示多个信息窗口 //初始化地图对象,加载地图 var map = new AMap.Map("containe ...

  3. 高德地图鼠标经过点标记显示信息窗体

    创建点标记: 实例化信息窗体 放入鼠标移入/移出事件 源码: // 获取站点 getData() {api.stationMap(this.params).then((res) => {cons ...

  4. vue使用高德地图点标记及复杂操作

    不知道怎么引用的 可以在看下 https://blog.csdn.net/xy19950125/article/details/83213220 上面呢 只是简单的一个点标记 并没有涉及到复杂的操作 ...

  5. uniapp+高德地图api 获取定位信息及详细地址

    引入高德地图js api 高德地图api官方文档 根据官方文档建议,我使用的是JSAPI Loader 并且是通过npm安装的 npm i @amap/amap-jsapi-loader --save ...

  6. android使用高德地图SDK获取定位信息

    注册账号.创建应用.获取API KEY等这些就不说了,按照官网来就行,我们来讲讲项目的配置及示例代码. 高德地图获取定位信息配置要比百度地图简单多了,这是我比较喜欢的一点,而且之前用百度地图嵌入一个应 ...

  7. android 高德地图显示标题,android学习之高德地图添加标记

    Marker用于标注地图上的一个特定位置 aMap的.addMarker(markerOptions) 方法即可 markerOptions有如下的属性 position(Required) 在地图上 ...

  8. android高德地图用地址获取经纬度,高德地图API-获取位置信息的经纬度

    一.首先需要注册成为开发者,注册成功后就可以使用此开放平台. 步骤如下: 1.百度搜索 高德开放平台,进入网站.或者 输入网址:https://lbs.amap.com/ 搜索高德开放平台 高德开发平 ...

  9. android 高德地图标记,android学习之高德地图添加标记

    Marker用于标注地图上的一个特定位置 aMap的.addMarker(markerOptions) 方法即可 markerOptions有如下的属性 position(Required) 在地图上 ...

最新文章

  1. 数据解读:资本追逐的14个人工智能细分领域
  2. 怎样复制粘贴windows命令行中的内容
  3. 获取一亿数据获取前100个最大值
  4. 应用安全-Web安全-越权漏洞整理
  5. git刷新分支列表_如何使用Git小技巧让你开发协作过程更加顺利?
  6. 远程服务器学习总结篇1:ssh
  7. 【Redis】Redis中使用Lua脚本
  8. 一波三折,终于找到src漏洞挖掘的方法了【建议收藏】
  9. 如何高效看懂别人代码
  10. 如何查看各类期刊的影响因子
  11. java 拼音识别_java 解析汉字拼音
  12. Oauth2.0 资源服务器搭建
  13. cassss服务未启动_aws启动ssserver
  14. teraterm 执行sql命令_Tera Term怎么安装?Tera Term安装使用详细图文教程
  15. 研究生硕士论文开题报告中的进度和安排该怎么写?
  16. 计算机专业课科目,考研计算机专业课科目有哪些
  17. 在线弹钢琴HTML源码,在线弹钢琴 1.0
  18. AndroidStudio自带的模拟器如何联网
  19. 耐摔 8寸 android,屏幕耐摔的手机有哪些?6款屏幕耐摔的手机推荐
  20. 关于电梯运行逻辑原理的思路分析

热门文章

  1. 怎样看大盘指数即时分时走势图
  2. execl的常用函数
  3. 一些可以使你感兴趣的c语言简单练习
  4. mtk 6762 modem编译
  5. jquery中获取复选框的值
  6. 云展网教程 | 如何把云展的杂志下载下来上传到自己的网站(服务空间)?
  7. IAR编译时报错Error[e46]: Undefined external _delay_cycles referred in main
  8. 和ESP8266 Arduino谈场恋爱 03 玩几个例程
  9. 运用小数据逆袭,一家地区超市让沃尔玛甘拜下风
  10. CLR/CIL/CTS/CLI/BCL/FCL