百度地图高级进阶开发:圆形区域周边搜索地图监听事件(覆盖物重叠显示层级\图像标注监听事件、setZIndex和setTop方法)

news2024/10/5 18:25:59

在这里插入图片描述

百度地图API

  1. 使用百度地图API添加多覆盖物渲染时,会出现覆盖物被相互覆盖而导致都无法触发它们自己的监听;
  2. 在百度地图API里,map的z-index为0,但是触发任意覆盖物的监听如click时也必定会触发map的监听;

项目需求

在开发过程中,需要单击地图,以当前坐标为中心点,搜索周边N公里半径内的搜索圆形区域内的图像标注POI,展示出来,同时支持信息弹窗。

    //地图监听事件
    map.addEventListener('click', function (e) {
        //清除覆盖物;
        map.clearOverlays();
        var x = e.point.lng;
        var y = e.point.lat;
        var newPoint = new BMap.Point(x, y);
        //新标注
        addSurroundMarker(newPoint, 1);
        searchMaker(x, y);//圆形周边标注;
        addCircle(newPoint, radiusLength);//范围
    })

结论:map的监听事件最优级别,无法获取marker的监听事件。

项目分析

1.使用z-index属性设置是否可以?

通过在F12调试工具,元素面板下,可以清楚查看包括map在内的各个覆盖物的显示层级。
在这里插入图片描述
但是图像标注比较多的情况下,通过该方式设置,仍旧避免不了被覆盖的情况。

2.图像标注setZIndex(无效)

在使用百度地图API时,可以使用setZIndex方法来设置图像标注的层级。下面是使用setZIndex方法的示例代码:

// 创建百度地图实例
var map = new BMap.Map("mapContainer");

// 添加地图中心点
map.centerAndZoom(new BMap.Point(116.397428, 39.90923), 11);

// 创建一个标注点
var point = new BMap.Point(116.40738, 39.91601);

// 创建自定义标注
var marker = new BMap.Marker({
  position: point,
  title: "标注",
  map: map
});

// 设置标注的 zIndex 值
marker.setZIndex(100);

在上面的示例中,首先创建了一个百度地图实例,然后通过centerAndZoom方法设置地图的中心点和缩放级别。接下来,使用BMap.Point类创建了一个标注点的坐标。然后,使用BMap.Marker类创建了一个自定义标注,并将其显示在地图上。最后,通过setZIndex方法将标注的zIndex值设置为100。

请注意,zIndex值越大,标注的层级越高。
根据需要设置适当的zIndex值来调整标注在地图上的层级关系。

setTop(isTop: Boolean)

将标注置于其他标注之上。默认情况下,纬度较低的标注会覆盖在纬度较高的标注之上,从而形成一种立体效果。通过此方法可使某个标注覆盖在其他所有标注之上。注意:如果在多个标注对象上调用此方法,则这些标注依旧按照纬度产生默认的覆盖效果

    marker.setTop(true);
    // 将标注添加到地图中
    map.addOverlay(marker);

4.使用map监听回调函数overlay属性

能否通过map监听回调函数入参中的overlay属性来判断是否该事件是否有其他覆盖物呢?

要判断map上的覆盖物是否还有其他覆盖物,使用以下步骤:

  1. 在添加地图事件监听器之前,确保已经将所有覆盖物添加到地图上。通过使用Map对象的addOverlay()方法将覆盖物添加到地图上。
  2. 在地图事件监听器的回调函数中,通过检查event.targets数组来判断是否有其他覆盖物。event.targets数组将包含所有与事件相关的覆盖物。
  3. 在回调函数中,如果event.targets数组的长度大于1,则表示有其他覆盖物与事件相关联。您可以进一步处理这些覆盖物,例如显示它们的信息或执行其他操作。

下面是一个示例代码片段,演示如何使用addEventListener来监听地图的点击事件并判断是否有其他覆盖物:

var map = new BMap.Map("mapContainer");

// 添加覆盖物到地图
var overlay1 = new BMap.Overlay(/* 第一个覆盖物的参数 */);
var overlay2 = new BMap.Overlay(/* 第二个覆盖物的参数 */);
map.addOverlay(overlay1);
map.addOverlay(overlay2);

// 添加地图事件监听器
map.addEventListener("click", function(event) {
  // 判断是否有其他覆盖物
     var targets = e.overlay;
        // 判断是否有其他覆盖物
        if (targets != null) {
    console.log("有其他覆盖物被点击");
    // 处理其他覆盖物
    // ...
  } else {
    console.log("没有其他覆盖物被点击");
  }
});

在这里插入图片描述

在上述示例中,我们创建了一个地图实例并将两个覆盖物添加到地图上。然后,我们使用addEventListener为地图添加了一个点击事件监听器。在回调函数中,我们检查event.targets数组的长度是否大于1,以确定是否有其他覆盖物与点击事件相关联。根据判断结果,我们可以在控制台输出相应的信息并处理其他覆盖物(在示例中未显示具体处理方式)。

终极解决方案

在这里插入图片描述

    //地图监听事件
    map.addEventListener('click', function (e) {
        var targets = e.overlay;
        // 判断是否有其他覆盖物
        if (targets != null) {
            console.log("There are OverLays on the current map");
            return false;
        }
        //清除覆盖物;
        map.clearOverlays();
        var x = e.point.lng;
        var y = e.point.lat;
        var newPoint = new BMap.Point(x, y);
        //新标注
        addSurroundMarker(newPoint, 1);
        searchMaker(x, y);//圆形周边标注;
        addCircle(newPoint, radiusLength);//范围
    })

@漏刻有时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1107086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

6.7 案例分析与实现

思维导图: 6.7 案例分析与实现 #### 案例6.2: 六度空间理论 【案例分析】 - **背景介绍**: 六度空间理论提及在任意两人之间最多仅有6个人的连接。尽管这一理论被广泛提及并得到了某种程度的验证,但从科学角度看,它仍然只是一…

模型的选择与调优(网格搜索与交叉验证)

1、为什么需要交叉验证 交叉验证目的:为了让被评估的模型更加准确可信 2、什么是交叉验证(cross validation) 交叉验证:将拿到的训练数据,分为训练和验证集。以下图为例:将数据分成4份,其中一份作为验证集。然后经过…

C/C++面试常见问题——指针和引用的区别

首先想要理解指针和引用的区别,我们要明确什么是指针,什么是引用 一,指针和引用的基本概念及特性 指针是一个特殊变量,其中存储着所指向变量的地址 指针主要有以下特性: 1. 在使用时需要*解引用 2. sizeof(指针)的…

关于我对 jeecg-boot 的项目理解、使用心得和改进建议

一句话总结: JeecgBoot帮助我提升了后端技术水平,入门了前端,让我在公司内部慢慢能够成长为全栈开发。 一、项目理解 JeecgBoot 项目的核心理念是快速开发、低代码、易扩展。它采用了前后端分离的架构,后端使用Spring Boot Myba…

5.覆盖增强技术——PUCCHPUSCH

PUSCH增强方案的标准化工作 1.PUSCH重复传输类型A增强,包括两种增强机制:增加最大重复传输次数,以及基于可用上行时隙的重复传输次数技术方式。 2.基于频域的解决方案,包括时隙间/时隙内跳频的增强 3.支持跨多个时隙的传输块&…

spring配置文件第一行导致读取配置失败

遇到读取配置存在问题,尤其当配置到第一行 通过spring执行测试类,没有问题,但是相同配置启动项目时,老找不到JdbcTemplate 使用配置: spring.shardingsphere.datasource.namesmaster,slavespring.shardingsphere.dat…

服务器往浏览器推消息(SSE)应用

1,SSE 和 WebSocket 对比 SSE(服务器发送事件) SSE是一种基于HTTP的单向通信机制,用于服务器向客户端推送数据。它的工作原理如下: 建立连接:客户端通过发送HTTP请求与服务器建立连接。在请求中&#xff…

【linux API 分析】register_chrdev

linux kernel:4.19 在注册字符设备的时候,可使用register_chrdev()函数,其对应的注销函数是unregister_chrdev(),其定义是在include\linux\fs.h文件 register_chrdev() 首先分析register_chrdev()函数 其定义如下 static inlin…

SMAP(Soil Moisture Active and Passive)数据下载

SMAP(Soil Moisture Active and Passive)数据下载 打开网站先注册登录用户 然后打开SMAP下载的网站 点击HTTPS File System进入下载页面 然后点击HDF文件下载 下载之后在HDF View里面预览

Spring中反转控制与依赖注入

目录 一、反转控制(IOC) 二、依赖注入(DI) 一、反转控制(IOC) 在以前的学习中为成员变量的赋值,一般都是直接在代码中完成,但是这种方式会产生耦合。然而利用Spring对成员变量赋值可…

QT学习day2

一、思维导图 作业: 使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admi…

sublime怎么调中文?

Sublime Text是一个功能强大的文本编辑器,它被广泛使用于编码过程中。在开发过程中,Sublime Text界面的语言设置通常默认为英语,无法直接输入中文。那么如何调整Sublime Text编辑器的设置,以允许在界面中输入和编辑中文呢&#xf…

CSS盒子模型的详细解析

03-盒子模型 作用:布局网页,摆放盒子和内容。 盒子模型-组成 内容区域 – width & height 内边距 – padding(出现在内容与盒子边缘之间) 边框线 – border 外边距 – margin(出现在盒子外面) d…

计算机网络学习笔记(三):数据链路层(待更新)

目录 3.1 基本概念 3.1.1 数据链路和帧 3.1.2 三个基本问题 3.2 类型1:使用点对点信道的数据链路层(路由器) 3.2.1 点对点协议 PPP:特点 3.2.2 点对点协议 PPP:帧格式 3.2.3 点对点协议 PPP:工作状态 …

了解web基础,http协议

域名 例如:www.baidu.com dns域名: 网络上的通信都是基于ip,通信模式:TCP/IP Tcp建立连接和断开连接,都是要双方进行确认的 建立连接:三次握手 断开连接:四次挥手 通信时端到端 端口进行通…

ONLYOFFICE 文档 7.5 现已发布:新增 PDF 编辑器、屏幕朗读器等功能

我们已推出最新版的在线编辑器,整个套件具备多项增强功能。敬请继续阅读,了解所有更新。 全新 PDF 编辑器 PDF 是工作中很常见的文件格式。 我们经常需要打开各种PDF格式的宣传册,签署协议和合同等等。 我们一直记得这一点,一直…

NR SRS power control

这篇看下NR SRS power control的相关内容,主要内容集中在38.213 7.3章节,SRS power control与PUSCH很类似,当然细节上也有所不同,这里简单看下。 UL功率控制,主要是PUSCH/PUCCH/SRS/PRACH的传输功率。 对于所有PUSCH/PUCCH/SRS传输…

掌握.NET基础知识(一)

前言 本文将讲解一些.NET基础。NET基础是指在计算机编程中使用.NET框架所需要的基础知识..NET的认识: .NET是由微软开发的一个跨平台的应用程序开发框架。它包括一个运行时环境和一个面向对象的程序库,可以用于开发各种类型的应用程序,包括桌面应用程序、…

计算机操作系统-第十天

目录 1、操作系统的进程 进程的概念 进程的组成------PCB 进程的组成------程序段、数据段 旧知新学:《程序是如何运行的》 进程的特征 本节思维导图 1、操作系统的进程 进程的概念 当我们打开多个qq程序,我们会发现任务管理器的进程中有…

对代码感兴趣 但不擅长数学怎么办——《机器学习图解》来救你

目前,该领域中将理论与实践相结合、通俗易懂的著作较少。机器学习是人工智能的一部分,很多初学者往往把机器学习和深度学习作为人工智能入门的突破口,非科班出身的人士更是如此。当前,国内纵向复合型人才和横向复合型人才奇缺;具有…