marker拖拽获取坐标
 

如果添加大量聚合点的时候,请参考如下几篇文章

https://www.zhihu.com/question/24023333

https://blog.csdn.net/ztop_f/article/details/55256003

  

百度地图API 在使用点聚合时,如果放大、缩小或移动地图时,添加的文字标签会消失

https://www.jianshu.com/p/263cc04516ed

 

覆盖物

添加marker

let point = new BMap.Point(115.430127, 40.960126);
let myIcon = new BMap.Icon("../static/images/mark.png", new BMap.Size(86, 90), {
anchor: new BMap.Size(10, 25),
});
// 创建标注对象并添加到地图
let marker = new BMap.Marker(point, { icon: myIcon });
map.addOverlay(marker);

添加多边形覆盖物Polygon

let pg = new BMap.Polygon([new BMap.Point(116.248323,39.893016),new BMap.Point(116.440344,39.893016),new BMap.Point(116.440344,39.811036),new BMap.Point(116.248323,39.811036)]);
map.addOverlay(pg);

添加文本标注label

let plb = new BMap.Point(116.408149,39.958087);
let lb = new BMap.Label('我是覆盖物Label',{point:plb});
map.addOverlay(lb);

marker点击事件

marker.addEventListener("click", function(){
console.log('点击了marker')
});
拖拽marker,获取移动的坐标
marker.enableDragging(); 
//marker.disableDragging(); // 不可拖拽

marker.addEventListener("dragend", function (e) {
var x = e.point.lng; //经度
var y = e.point.lat; //纬度
console.log("拖到的地点的经纬度:" + x + "," + y);
});

标注点(marker)添加点击事件,label其他覆盖物同理

marker.addEventListener("click", function(){
this.openInfoWindow(infoWindow); //提示信息
});

显示信息窗口,infoWindow

1. 在map上绑定:map.openInfoWindow(infowin,point);

let opts =   {
  width : 380, // 信息窗口宽度
height: 100, // 信息窗口高度
title : "电池柜信息" , // 信息窗口标题
};
let point = new BMap.Point(lng, lat);
let info = new BMap.InfoWindow('测试内容', opts); // 创建信息窗口对象
that.map.openInfoWindow(info, point);
// 关闭弹窗
// map.closeInfoWindow();

2. 在marker上添加infoWindow即做法是marker.openInfoWindow(infowin);

  注意:此方法有问题,每次点击marker时,地图会自动将窗口平移到地图中心,这时窗口就消失了。建议用第一种方法

let opts = {
  width : 380, // 信息窗口宽度
  height: 100, // 信息窗口高度
  title : "电池柜信息" , // 信息窗口标题
};
let info = new BMap.InfoWindow('测试内容', opts); // 创建信息窗口对象
marker.openInfoWindow(info)
 

  

拖动地图得时候,marker标注消失
初始化地图的时候加入如下两行代码(虽然我也不知道什么意思,小声哔哔,暂时能解决问题就好)
this.map.centerAndZoom(new BMap.Point(116.404, 39.915), 4);
this.map.enableScrollWheelZoom();

删除标注或者覆盖物

1.删除单一marker

marker.remove();
2.删除指定标注或者覆盖物
//获取地图上所有的覆盖物
var allOverlay = map.getOverlays();
for(var i = 0;i<allOverlay.length;i++) {
if(allOverlay[i].toString()=="[object Marker]"){
if (allOverlay[i].getPosition().lng == longitude(待删除标注的经度) && allOverlay[i].getPosition().lat == latitude(待删除标注纬度)) {
        map.removeOverlay(allOverlay[i]);
  }
}
}

3. 删除所有标注或者覆盖物

map.clearOverlays();

打开地图

地址打开百度地图

// 测试链接
// <a href="http://api.map.baidu.com/marker?location=39.197709,117.185226&title=电池位置&content=天津市北辰区朝阳路&output=html&src=webapp.baidu.openAPIdemo"></a>
// http://api.map.baidu.com/geocoder?address=北京市海淀区上地信息路9号奎科科技大厦&output=html&src=webapp.baidu.openAPIdemo // 代码如下
let bdUrl = 'http://api.map.baidu.com/marker?location=' + lat + ',' + lng + '&title=' + address + '&content=测试&output=html&src=webapp.baidu.openAPIdemo'
let aNode = document.createElement('a')
aNode.setAttribute('href', url)
aNode.setAttribute('target', '_blank')
aNode.click()

地址打开高德地图

// 测试链接
<a href="https://uri.amap.com/marker?position=lng,lat&name=所在的位置名称"></a>

这有一个注意事项是:百度地图填写坐标是lat,lng,高德地图填写坐标是lng,lat

记录几个问题

问题:怎么监听地图点击?

map.addEventListener("click", function(){
  alert("您点击了地图。");
});

问题:怎么获取用户拖动地图后地图中心的经纬度信息?

var map=newBMap.Map("container");
map.centerAndZoom(newBMap.Point(116.404,39.915),11);
map.addEventListener("dragend", function(){
var center =map.getCenter();
  alert("地图中心点变更为:"+ center.lng +", "+ center.lat);
});

问题:怎么获取地图缩放后的级别?

var map=newBMap.Map("container");
map.centerAndZoom(newBMap.Point(116.404,39.915),11);
map.addEventListener("zoomend", function(){
  alert("地图缩放至:"+this.getZoom()+"级");
})

问题:当地图发生点击事件时,怎么知道点击的是覆盖物还是地图?

 map.addEventListener("click",function(e){
if(e.overlay){
alert('你点击的是覆盖物:'+e.overlay.toString());
}else{
alert('你点击的是地图');
}
});

百度地图基本事件: marker、polygon等覆盖物添加以及删除的更多相关文章

  1. 百度地图API如何给自定义覆盖物添加事件

    摘要: 给marker.lable.circle等Overlay添加事件很简单,直接addEventListener即可.那么,自定义覆盖物的事件应该如何添加呢?我们一起来看一看~ --------- ...

  2. 百度地图结合ECharts实现复杂覆盖物(Overlay)

    先来看效果图 一 前置知识 官方Overlay-覆盖物的抽象基类 方法 返回值 描述 initialize(map: Map) HTMLElement 抽象方法,用于初始化覆盖物,当调用map.add ...

  3. 百度地图 判断marker是否在多边形内

    昨天画了圆形,判marker是否存在圆形内.今天来画多边形,判断marker在多边形内. 需要引入一个js      <script type="text/javascript&quo ...

  4. 百度地图自定义Marker

    最近写了百度地图的Demo,所以总结下遇到的问题: 1.首先在百度地图中创建应用时用到 发布版SHA1是在Preferences下的Android下的Build中;2.在使用百度地图时,先要创建一个A ...

  5. 百度地图JavascriptApi Marker平滑移动及车头指向行径方向

    相信只要是使用百度地图做实时定位服务的朋友都会遇到这个问题,在对坐标位置进行覆盖物展示的时候,会出现由于获取坐标数据时间或者两个坐标点相距过远,导致在视觉上看Marker移动就像"僵尸跳&q ...

  6. 百度地图API的事件处理:覆盖物的如何阻止冒泡

    百度地图,为了让事件使用的更方便,进行一层封装 详情可以看官方的文档 http://developer.baidu.com/map/jsdevelop-5.htm 主要的修改点: 1. 使用事件代理. ...

  7. 百度地图API示例:使用vue添加删除覆盖物

    1.index.html <script type="text/javascript" src="http://api.map.baidu.com/api?v=2. ...

  8. 百度地图API示例之小实践 添加代理商标注

    地图坐标无非是经度纬度. 每个代理商都有他的经度纬度参数,就能够在地图上标注出来了. 效果如下: 功能包括 标记代理商 显示导航 显示距离 测量距离 点击选中等 其中测距用到的是自定义控件 地图根据城 ...

  9. (转)Arcgis for javascript实现百度地图ABCD marker的效果

    概述: 在我的博客中,有一篇相关的文章,这段时间,有很多人问我求源码,只是时间过去已长,源代码已找不到,乘着这个9.3放假,又重新实现了下,并相关代码做了优化,在此贴出来,方便大家使用. 相关文章地址 ...

  10. 百度地图JavaScript API覆盖物旋转时出现偏移

    在项目中,调用百度地图JavaScript API,做覆盖物的旋转再添加到地图上,结果出现偏移了. 调试过程中的效果图: 发现图片的旋转并不是按车子的中心来的,而是之外的一个点.最后发现犯了一个很细节 ...

随机推荐

  1. 【赵渝强老师】Weblogic域和域的组成

    一.什么是Weblogic WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于Java EE架构的中间件,WebLogic是用于开发.集成.部署和 ...

  2. iOS动画之CABasicAnimation的使用方法(移动,旋转,缩放)

    设定动画CABasicAnimation的属性和说明 属性 说明  duration 动画的时间 repeatCount 重复的次数.不停重复设置为 HUGE_VALF repeatDuration ...

  3. C++第五节课 函数默认值 函数重载

    #include <iostream> using namespace std; // C++的函数默认值和函数重载 // 函数参数的入栈规则从右往左开始入栈 // 函数重载机制(第一种静 ...

  4. [Vue warn]: Error in v-on handler (Promise/async): "TypeError: Object(...) is not a function"

    引用外部发文件时候,只是部分引用,所以原本是解构方式引用的,我忘记加{ }了

  5. 59 张高清大图,带你实战入门 KubeSphere DevOps

    作者:运维有术星主 KubeSphere 基于 Jenkins 的 DevOps 系统是专为 Kubernetes 中的 CI/CD 工作流设计的,它提供了一站式的解决方案,帮助开发和运维团队用非常简 ...

  6. JavaScript网页设计案例

    1.引言 在前端开发中,JavaScript 无疑是一个非常重要的语言.它不仅可以用于表单验证.动态内容更新,还能实现复杂的交互效果和动画.通过 JavaScript,网页变得更加生动和富有互动性.本 ...

  7. myBatis插入操作获取不到返回的自增id问题

    myBatis插入操作后想返回自增 id 有多种方式 其中一种使用率较高的就是: 在<insert></insert> 标签中添加 useGeneratedKeys 和 key ...

  8. ES6语法特性

    ES6语法特性 简介 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了. 它的目标,是使得 JavaScript 语言 ...

  9. ABC372 (D,E)

    ABC372 (D,E) D 一道比较简单的二分查找题目. 观察到每个数能成为 \(j\) 的条件是独立的,因此想到统计每个数能成为它前面哪些数的 \(j\). 对于每个\(ed​\), 二分 \(1 ...

  10. 常见return错误

    常见return错误 3221225477 (0xC0000005): 访问越界,一般是读或写了野指针指向的内存. 3221225725 (0xC00000FD): 堆栈溢出,一般是无穷递归造成的. ...