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

百度地图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:标记名}]),//回显,接受的是一个数组

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue3生命周期函数(简述题)

1.图示 2.说明 3.补充 1.在vue3组合式API中&#xff0c;我们需要将生命周期函数先导入&#xff0c;然后才能使用。 import {onMounted} from vue2.beforeCreate和created被setup()方法所代替

CTO对生活和工作一点感悟

陌生人&#xff0c;你好啊。 感谢CSDN平台让我们有了隔空认识&#xff0c;交流的机会。 我是谁&#xff1f; 我呢&#xff0c;毕业快11年&#xff0c;在网易做了几年云计算&#xff0c;后来追风赶上了大数据的浪潮&#xff0c;再到后来混迹在AI、智能推荐等领域。 因为有一颗…

增加F110 付款方式的随手记录

随便记录一下&#xff0c;基本上有这些信息可以了 为了保持PRD与测试机一致的银行代码&#xff0c;需要先在DEV&#xff0c;QAS 改成4 外部给号 主要都是在FBZP 开户行维护-FI12_HBANK/FI12 S4hana 里面有的没有办法在FI12 维护只能去NWBC NWBC&#xff1a;维护银行账户并关联…

软件测试简历怎么写?可以参考这份简历

个人简历 基本信息 姓名&#xff1a;名字 性别&#xff1a;男 年龄&#xff1a;25 学历&#xff1a;本科 联系电话&#xff1a…

C++: string的模拟实现

C: string的模拟实现 一.前置说明1.模拟实现string容器的目的2.我们要实现的大致框架 二.默认成员函数1.构造函数2.拷贝构造函数1.传统写法2.现代写法 3.析构函数4.赋值运算符重载1.传统写法2.现代写法 三.遍历和访问1.operator[]运算符重载2.iterator迭代器 四.容量相关函数1.…

【Vue3+Vite】解决build后空白页的问题

目录 Hash 模式 HTML5 模式&#xff08;历史模式&#xff09; 配置Nginx 配置Spring Boot Hash 模式 build后空白页的问题可能是使用的是历史模式&#xff0c;因为Vue是一个单页的客户端应用&#xff0c;如果没有适当的服务器配置&#xff0c;访问会得到一个 404 错误…

智慧水务系统在流域水环境规划中起到什么作用?

智慧水务系统在流域水环境规划中扮演着越来越重要的角色。作为一款集信息化、自动化、智能化、智慧化于一体的水务管理系统&#xff0c;智慧水务系统不仅能够提高水环境规划的效率&#xff0c;还能为水资源的保护和利用提供有力支持。 在流域水环境规划中&#xff0c;智慧水务系…

计算机硬件(一)

1.机箱 计算机的许多硬件,如主板,硬盘和电源等,都安放在固定机箱中。机箱是一个相对封闭的空间&#xff0c;箱体一般由钢和铝合金等金属制成(其他材料亦可用&#xff0c;但不多见),同时设有许多通风口,以促进箱内空气流动,防止内部温度过高&#xff0c;机箱的颜色,大小乃至形状…

c++ 中名空间中using 引入的细节

如果在引入名空间中的特定成员函数的时候&#xff0c; 全局不能定义同名的函数&#xff0c;但是其实只要参数不同就行 namespace a{int x 1;int fun(){return 0;} }using namespace a; using a::fun;void fun(int x) {} int x 10; int main() {fun(10); } 上面就是一个正确…

TZOJ 1378 发工资咯

答案&#xff1a; #include<stdio.h> int main() {int n 0, m 0, i 0, sum 0;while (scanf("%d", &n) && n ! 0) //多组数据输入并且不等于0{for (i 0; i < n; i) //有n名老师就循环n次{scanf("%d", &m); //该名老…

rabbitMQ对消息不可达处理-备份交换机/备份队列

生产者发送消息&#xff0c;在消息不可达指定队列时&#xff0c;可以借助扇出类型交换机&#xff08;之前写过消息回退的处理方案&#xff0c;扇出交换机处理的方案优先级高于消息回退&#xff09;处理不可达消息&#xff0c;然后放置一个备份队列&#xff0c;供消费者处理不可…

解压压缩包脚本

解压压缩包脚本 我们一般解压一个压缩包&#xff0c;需要三步&#xff1a; 1、打开压缩包。 2、点击解压文件。 3、选择解压目录解压到指定文件夹。 那么&#xff0c;怎么一步完成这些繁琐的操作呢&#xff1f;编写一个bat脚本即可&#xff0c;如下所示&#xff1a; 1、安装解压…

【人工智能Ⅰ】实验5:AI实验箱应用之贝叶斯

实验5 AI实验箱应用之贝叶斯 一、实验目的 1. 用实验箱的摄像头拍摄方块上数字的图片&#xff0c;在图像处理的基础上&#xff0c;应用贝叶斯方法识别图像中的数字并进行分类。 二、实验内容和步骤 1. 应用实验箱机械手臂上的摄像头拍摄图像&#xff1b; 2. Opencv处理图像…

Wish防关联是什么?Wish要怎样避免违规封店?

四大跨境电商平台之一wish&#xff0c;做跨境电商的很多人可能都听过wish。随着wish不断完善平台制度&#xff0c;对于多账号运营的卖家要求越来越严厉&#xff0c;wish和亚马逊、eBay等其它跨境电商平台一样&#xff0c;不支持一个卖家开设多个账号多家店铺。 但是对于各位卖家…

2023/11/24JAVAweb学习(Vue常用指令,Vue.js文件,Ajax,Axios两种请求,Vue-cli脚手架,Vue项目,Element)

age只会执行成立的,show其实都展示了,通过display不展示 使用Vue,必须引入Vue.js文件 假如运行报错,以管理员身份打开vscode,再运行 ------------------------------------------------------------------- 更改端口号

2023/11/30JAVAweb学习

数组json形式 想切换实现类,只需要只在你需要的类上添加 Component 如果在同一层,可以更改扫描范围,但是不推荐这种方法 注入时存在多个同类型bean解决方式

C语言——多种方式打印出1000之内的所有的“水仙花数”

所谓水仙花数,是指一个3位数,其各位数字立方和等于该数本身。水仙花数是指一个三位数&#xff0c;它的每个位上的数字的立方和等于它本身。例如&#xff0c;153是一个水仙花数&#xff0c;因为1^3 5^3 3^3 153。 方法一 #define _CRT_SECURE_NO_WARNINGS 1#include <std…

制造业如何做生产设备管理、分析生产数据?

本文将为大家讲解&#xff1a;1、设备管理的现状与问题&#xff1b;2、设备管理系统功能&#xff1b;3、制造业企业如何做生产设备管理、分析生产数据&#xff1f;4、制造业设备管理的价值。 想要管理好设备&#xff0c;设备档案管理、巡检、报修、保养、分析预警等问题都是必须…

Python list列表添加元素的3种方法及删除元素的3种方法

Python list列表添加元素的3种方法 Python list 列表增加元素可调用列表的 append() 方法&#xff0c;该方法会把传入的参数追加到列表的最后面。 append() 方法既可接收单个值&#xff0c;也可接收元组、列表等&#xff0c;但该方法只是把元组、列表当成单个元素&#xff0c;这…

解决电脑蓝屏问题:SYSTEM_THREAD_EXCEPTION_NOT_HANDLED,回到系统还原点

解决电脑蓝屏问题&#xff1a;SYSTEM_THREAD_EXCEPTION_NOT_HANDLED&#xff0c;回到系统还原点 1&#xff0c;蓝屏显示问题1.1&#xff0c;蓝屏1&#xff0c;清楚显示1.2&#xff0c;蓝屏2&#xff0c;模糊显示 2&#xff0c;排除故障问题3&#xff0c;解决蓝屏的有效方法 1&a…