百度地图JavaScript API GL获取经纬度,标记,添加文本标注,点击事件,封装

news2024/12/25 9:29:59

百度地图JavaScript API GL常用方法封装

在这里插入图片描述

引入百度js库

<script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&type=webgl&ak=自己的百度应用ak"></script>

封装方法

<template>
  <div class="map">
    <div id="container" class="container"></div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      map:null,
    }
  },
  props: {
    position: {//初始位置
      type: Object,
      default: () => {
        return { lng: 116.40334547586404, lat: 39.92386800168819 };
      }
    },
    firingLngLat:{//启用鼠标监听
      type:Boolean,
      default:false
    }
  },
  mounted(){
    this.init()
  },
  methods:{
    init(){
      this.map = new BMapGL.Map('container'); 
      this.map.enableScrollWheelZoom(); // 启用滚轮放大缩小
      var point = new BMapGL.Point(this.position.lng,this.position.lat); // 改变坐标居中位置
      this.map.centerAndZoom(point, 10);
      if(this.firingLngLat){
         this.getLngLat()
      }
    },
    getMap(items){//接受的数组类型,点击标记点,返回对应的数据     基础数据=>[{longitude:经度,latitude:维度,name:标记名}]
      // console.log(items);
      let data = items
      this.charMap()
      if(data.length){
        items.forEach((item,idnex) => {
          var point = new BMapGL.Point(item.longitude,item.latitude); // 创建点坐标
          this.map.centerAndZoom(point, 15);
          let img = require("@/assets/images/yard.png")
          var myIcon = new BMapGL.Icon(img, new BMapGL.Size(56, 56), {    
            imageOffset: new BMapGL.Size(0, 0 )   // 设置图片偏移   
          });     
          // 创建标注对象并添加到地图  
          var marker = new BMapGL.Marker(point, {icon: myIcon});   
          this.map.addOverlay(marker); 

          //添加文字车牌提示
          var optsName = {
              position: new BMapGL.Point(item.longitude ,item.latitude), // 指定文本标注所在的地理位置
              offset: new BMapGL.Size(-40, -50) // 设置文本偏移量
          };
          // 创建文本标注对象
          var label = new BMapGL.Label(item.name , optsName);
          // 自定义文本标注样式
          label.setStyle({
            color: 'blue',
            borderColor: '#ccc',
            fontSize: '16px',
            height: '30px',
            lineHeight: '30px',
            fontFamily: '微软雅黑'
          });
          this.map.addOverlay(label);
          marker.addEventListener("click", ()=>{
            this.$emit('click',item)
          })
        });
      }
    },
    charMap(){//删除所有的标记点
      //获取地图上所有的覆盖物
      var allOverlay = this.map.getOverlays();
      for(var i = 0;i<allOverlay.length;i++) {
        if(allOverlay[i].toString()){
          // console.log(allOverlay[i]);
            this.map.removeOverlay(allOverlay[i]);
        }
      }
    },
    getLngLat(){//获取鼠标点击后的经纬度,并标记 注:只有firingLngLat 为true,该监听方法才能生效
      this.charMap() 
      this.map.addEventListener('click',  (e)=> {
        // alert('点击位置经纬度:' + e.latlng.lng + ',' + e.latlng.lat);
        // console.log('点击位置经纬度:' + e.latlng.lng + ',' + e.latlng.lat);
        let mapll = {
          lng:e.latlng.lng,
          lat:e.latlng.lat
        }
        this.$emit("change",mapll)
        let data =[{
          name:"标记点位置",
          longitude:e.latlng.lng,
          latitude:e.latlng.lat
        }]
        this.getMap(data)
      })
     
    },
    
  }
}
</script>
<style lang="stylus" scoped>
.map
  width 100%
  height 100%
  border: 1px solid #cccccc99
  .container
    width 100%
    height 100%
</style>

使用方式

//div使用
<my-map  :position="position" @click="myMapClick"   @change="getPostion" :firingLngLat="true"   ref="maps" ></my-map>

//引入上方封装的路径
import myMap from "@/components/map/maps";
components: { myMap},

//参数及方法说明
position:{//默认经纬度
  lng:0,
  lat:0,
},
myMapClick(item){},//点击标注获取标注信息
getPostion(item){},//点击地图获取点击位置,firingLngLat=treu,该方法才执行

this.$refs.maps.getMap([{longitude:经度,latitude:维度,name:标记名}]),//回显,接受的是一个数组

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

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

相关文章

【性能测试】性能测试监控关键指标

系统指标 检测性能测试是否有bug的关键指标 1、系统指标——与用户场景及需求直接相关。 并发用户数&#xff1a;某一物理时刻同时向系统提交请求的用户数。平均响应时间&#xff1a;系统处理事务的响应时间的平均值&#xff0c;对于系统快速响应类页面&#xff0c;一般响应…

Yolov8实现瓶盖正反面检测

一、模型介绍 模型基于 yolov8n数据集采用SKU-110k&#xff0c;这数据集太大了十几个 G&#xff0c;所以只训练了 10 轮左右就拿来微调了 基于原木数据微调&#xff1a;训练 200 轮的效果 10 轮SKU-110k 20 轮原木 200 轮瓶盖正反面 微调模型下载地址https://wwxd.lanzouu.co…

北斗卫星助力乡村治理,走进数字化新时代

北斗卫星助力乡村治理&#xff0c;走进数字化新时代 随着国家对乡村治理越来越重视&#xff0c;为了进一步提升乡村治理水平&#xff0c;我国已经启动了全面建设现代化强国的大计划&#xff0c;其中数字化成为了重要的一环。而北斗卫星作为我国自主研制的卫星导航系统&#xff…

【漏洞复现】通达OA inc/package/down.php接口存在未授权访问漏洞 附POC

漏洞描述 通达OA(Office Anywhere网络智能办公系统)是由通达信科科技自主研发的协同办公自动化软件,是与中国企业管理实践相结合形成的综合管理办公平台。通达OA为各行业不同规模的众多用户提供信息化管理能力,包括流程审批、行政办公、日常事务、数据统计分析、即时通讯、…

西班牙Wallapop是什么?原来欧洲版闲鱼也很好用!

说到国内的闲鱼大家肯定不陌生&#xff0c;那国外的二手闲置平台大家知道吗&#xff1f;在西班牙&#xff0c;最受欢迎的移动购物APP是Wallapop和速卖通。Wallapop是西班牙第一大二手商品网站&#xff0c;网站上丰富的性价比高的商品正好满足了西班牙人的需求。今天龙哥就和大家…

VirtualBox上安装CentOS7

基础环境&#xff1a;宿主机是64位Windows10操作系统&#xff0c;通过无线网访问网络。 macOS可以以类似方式进行安装&#xff0c;不同之处见最后补充。 Step1 安装VirtualBox VirtualBox是一款免费、开源、高性能的虚拟机软件&#xff0c;可以跨平台运行&#xff0c;支持Wi…

VMware Linux(Centos)虚拟机扩容根目录磁盘空间

给VMWare虚拟机根目录扩容&#xff0c;简单有效&#xff01;_迷倒万千少女的Csir的博客-CSDN博客 https://blog.csdn.net/m0_64206944/article/details/131453844?spm1001.2014.3001.5506 上述链接融合参考下面文章 VMware Linux(Centos)虚拟机扩容根目录磁盘空间 centosli…

开启新零售时代,引领消费革命

开启新零售时代&#xff0c;引领消费革命 新零售的魅力在于它将线上线下融合&#xff0c;打破了传统零售的界限。以往&#xff0c;消费者需要亲自前往实体店面购物&#xff0c;但如今他们可以通过电子商务平台随时随地进行购物。这种便捷的消费方式不仅节省了时间和精力&#x…

‘tsc‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

最近在用nodejs typescript 某游戏服务器在做一些研究 nodejs-tcs 问题描述&#xff1a; 1.使用命令npm install -g typescript安装typescript后&#xff0c;输入 tsc命令&#xff0c;一直报错 tsc 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 2.目…

JSch线上出现com.jcraft.jsch.JSchException: channel is not opened.问题分析

JSch线上出现com.jcraft.jsch.JSchException: channel is not opened.问题分析 文章目录 JSch线上出现com.jcraft.jsch.JSchException: channel is not opened.问题分析1. 背景1.系统使用jsch这个框架做文件发送以及远程命令执行的操作,系统一直运行正常,直到某一个环境发现 2.…

系列二、为什么要使用ThreadLocal?

一、为什么要使用ThreadLocal&#xff1f; 1.1、概述 并发场景下&#xff0c;会存在多个线程同时修改一个共享变量的场景&#xff0c;这就有可能会出现线程安全的问题。为了解决线程安全问题&#xff0c;可以用加锁的方式&#xff0c;比如对核心代码使用synchronized或者Lock进…

Docker的基本概念和优势,以及实际应用场景

目录 概要 基本概念 容器 (Container) 什么是容器 容器与虚拟机的区别 镜像 (Image) Dockerfile 仓库 (Repository) 容器编排 (Orchestration) Docker Compose Docker Daemon 和 Docker Client 网络 (Network) 数据卷 (Volume) 主要优势 提高移植性和可移植性 提…

基于Java SSM框架+Vue实现垃圾分类网站系统项目【项目源码+论文说明】

基于java的SSM框架Vue实现垃圾分类网站系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个垃圾分类网站 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述…

【EI会议征稿通知】第七届结构工程与工业建筑国际学术会议(ICSEIA 2024)

第七届结构工程与工业建筑国际学术会议&#xff08;ICSEIA 2024&#xff09; 2024 7th International Conference on Structural Engineering and Industrial Architecture 随着城市化进程的不断深入&#xff0c;建筑领域的需求也在优化、调整。结构工程的发展依旧受到重视&am…

centos7 nginx_keepalived 在主备服务器上安装

脚本地址 https://gitcode.net/zengliguang/nginx_keepalived.git 文件说明keepalivedkeepalived的离线安装包nginx-1.24.0nginx的离线安装包centos7_keepalived_offline_install_backup.shkeepalved安装脚本&#xff0c;备服务器安装 centos7_keepalived_offline_install_mas…

实验8配置工具

一、实验目的 1. 掌握UML中建模工具——部署图&#xff0c;用于显示系统中软件和硬件的物理架构。 2. 掌握应用Visio等业界常用的建模工具的基本使用方法和基本绘图操作&#xff0c;选择一种并熟练使用&#xff0c;会使用该工具针对具体问题建立分析模型。 二、实验内容与步骤…

ESP32-Web-Server编程- 使用SSE 实时更新设备信息

ESP32-Web-Server编程- 使用SSE 实时更新设备信息 概述 如前所述&#xff0c;传统 HTTP 通信协议基于 Request-Apply&#xff08;请求-响应&#xff09;机制&#xff0c;浏览器&#xff08;客户端&#xff09;只能单向地向服务器发起请求&#xff0c;服务器无法主动向浏览器推…

C语言——指针(三)

&#x1f4dd;前言&#xff1a; 上篇文章C语言——指针&#xff08;二&#xff09;中对&#xff1a;指针的运算和指针变量类型对指针使用的影响开展了进一步的探讨&#xff0c;这篇文章我们继续学习一下指针与一维数组之间的关系&#xff1a; 1&#xff0c;对数组名的理解 2&am…

什么是网络可视化?网络可视化工具有用吗

网络可视化定义是自我描述的&#xff0c;因为它在单个屏幕上重新创建网络布局&#xff0c;以图形和图表的形式显示有关网络设备、网络指标和数据流的信息&#xff0c;为 IT 运营团队提供一目了然的理解和决策。 网络是复杂的实体&#xff0c;倾向于持续进化&#xff0c;随着业…

关于pyqt5与moviepy到打包的坑点

1,pyqt5 关于pyqt5 designer.exe 的使用主要就是了解pyqt5右侧菜单栏的功能使用 打包后的文件&#xff0c;需要继承改类&#xff0c;进行图形指令交互 关于pyqt5&#xff0c;要了解信号&#xff0c;和槽点的相互关系。 我在pyqt5中使用moviepy的时候&#xff0c;需要用到异步…