【百度地图】百度地图的使用方法 和 在vue中如何使用百度地图(超详细)

news2025/2/25 5:37:42

【百度地图】百度地图的使用方法 和 在vue中如何使用百度地图(超详细)


1- 介绍

百度地图功能强大,本篇文章只是对百度地图JavaScript API 进行一个介绍~

  • 官方网址 百度地图开放平台
  • LBS:LocationBusinessServer 基于定义位置的商业服务

百度地图JavaScript API是一套由JavaScript语言编写的应用程序接口,可帮助您在网站中构建功能丰富、交互性强的地图应用,支持PC端和移动端基于浏览器的地图应用开发,且支持HTML5特性的地图开发。

2- 使用

2-1注册

在使用百度地图之前,要拥有一个自己的百度账号,申请注册成为百度开发者,然后创建一个应用,就可以获取到一个唯一的服务秘钥(AK)

  • 具体流程

在这里插入图片描述

2-2创建应用

在这里插入图片描述

2-3获取AK

在这里插入图片描述

经过以上三步,就创建好属于自己的一个AK

3- helloword (入门指南)

  • 首先,我们看着官方文档操作一下,如何使用?
  • step1 : 在官方网址下,找到开发文档下的JavaScript API

在这里插入图片描述

  • 点击进入,找到Hello World
    在这里插入图片描述
  • 按照下列步骤进行

在这里插入图片描述

  • 代码部分

01 引入js

  <script
            type="text/javascript"
            src="https://api.map.baidu.com/api?v=1.0&&type=webgl&ak=6zAD8CIavtzWnkGg0a7roush5maGMIPn"
        ></script>

02 准备容器

 <style type="text/css">
            html {
                height: 100%;
            }
            body {
                height: 100%;
                margin: 0px;
                padding: 0px;
            }
            #container {
                height: 100%;
            }
        </style>
    </head>
    <body>
      <!-- 准备容器 -->
        <div id="container"></div>
    </body>

03 初始化地图

 // 初始化地图
  var map = new BMapGL.Map("container")

04 创建一个地图中心点

 // 准备一个中心点(经度和纬度)
 var point = new BMapGL.Point(116.404, 39.915);

05 设置中心点和滚轮缩放

//鼠标滚轮播放
map.enableScrollWheelZoom(true);

在这里插入图片描述

  • 运行代码

在这里插入图片描述

3- 添加控件(创建地图)

我们给地图添加控件,控件是负责与地图交互的UI元素,百度地图JS API支持比例尺、缩放、定位、城市选择列表、版权,以及自定义控件。

  • 控件介绍

在这里插入图片描述

在这里插入图片描述

  • 向地图添加控件

使用Map.addControl()方法向地图添加控件。

  • 声明控件并添加到地图中(复制此段代码到案例中)
var scaleCtrl = new BMapGL.ScaleControl();  // 添加比例尺控件
map.addControl(scaleCtrl);
var zoomCtrl = new BMapGL.ZoomControl();  // 添加缩放控件
map.addControl(zoomCtrl);
var cityCtrl = new BMapGL.CityListControl();  // 添加城市列表控件
map.addControl(cityCtrl);

在这里插入图片描述

  • 运行结果

在这里插入图片描述

4- 添加点、面、线(覆盖物)

所有叠加或覆盖到地图的内容,我们统称为地图覆盖物。覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动。

  • 提供的覆盖物

可以使用map.addOverlay方法向地图添加覆盖物,使用map.removeOverlay方法移除覆盖物。

在这里插入图片描述

4.1 添加标注点

Marker是一个用来往地图上添加点标记的类。使用它将任何你希望用户看到的兴趣点标注在地图上。

API提供了默认图标样式,您也可以通过Icon类来指定自定义图标。Marker的构造函数的参数为PointMarkerOptions(可选)。

var point = new BMapGL.Point(116.404, 39.915);   
var marker = new BMapGL.Marker(point);        // 创建标注   
map.addOverlay(marker);                     // 将标注添加到地图中

4-2 添加折线

Polyline表示地图上的折线覆盖物,它包含一组点,并将这些点连接起来形成折线。

var polyline = new BMapGL.Polyline([
		new BMapGL.Point(116.399, 39.910),
		new BMapGL.Point(116.405, 39.920),
		new BMapGL.Point(116.425, 39.900)
	], {strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5});
map.addOverlay(polyline);

4-3 添加多边形(面)

Polygon表示地图上的多边形覆盖物,它包含一组点。多边形将这组点按顺序首尾相连,最终围成一个封闭图形。

var polygon = new BMapGL.Polygon([
        new BMapGL.Point(116.387112,39.920977),
        new BMapGL.Point(116.385243,39.913063),
        new BMapGL.Point(116.394226,39.917988),
        new BMapGL.Point(116.401772,39.921364),
        new BMapGL.Point(116.41248,39.927893)
    ], {strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5});
map.addOverlay(polygon);

4-4 综合使用

  • 01- 点击创建点、线,双击连接在一起(且点消失)
    <script>
        // 初始化地图
        var map = new BMapGL.Map("container");
        // 准备一个中心店(经度和纬度)
        // var point = new BMapGL.Point(116.404, 39.915);
        var point = new BMapGL.Point(113.665, 34.784);
        //设置中心店和缩放级别
        map.centerAndZoom(point, 15);
        //鼠标滚轮播放
        map.enableScrollWheelZoom(true);
        //添加一个点
        var marker = new BMapGL.Marker(point); // 创建标注
        map.addOverlay(marker); // 将标注添加到地图中

        //存储多个点
        var line = [];
        //存储标记
        var markers = [];
        //监听事件
        map.addEventListener("click", (e) => {
            //创建点
            var p = new BMapGL.Point(e.latlng.lng, e.latlng.lat);
            //创建标记
            var m = new BMapGL.Marker(p);
            markers.push(m);
            //添加标记
            map.addOverlay(m);
            // console.log(e);
            //存储点
            line.push(p);
        });
        map.addEventListener("dblclick", (e) => {
            //把第0个点放入到最后面
            line.push(line[0]);
            //创建多边形
            var polyline = new BMapGL.Polyline(line, {
                strokeColor: "blue",
                strokeStyle: "dashed",
                strokeWeight: 2,
                strokeOpacity: 0.5,
                enableEditing: "true",
            });
            //添加线
            map.addOverlay(polyline);
            //清空点的列表
            line = [];
            //
            markers.forEach((item) => {
                map.removeOverlay(item);
            });
            //清空点
            markers = [];
        });
    </script>
  • 02- 运行结果

在这里插入图片描述

4-5 绘制圆圈

      //绘制圆圈
        var circle = new BMapGL.Circle(point, 2000, { strokeColor: "green" });
        map.addOverlay(circle);

在这里插入图片描述

 运行结果如下:

在这里插入图片描述

4-6 添加地图的标注

  • 代码
   // 创建标签
            var label = new BMapGL.Label("网红公园", {
                // 创建文本标注
                position: point, // 设置标注的地理位置
                offset: new BMapGL.Size(0, 0), // 设置标注的偏移量
            });
            // 添加标签
            map.addOverlay(label); // 将标注添加到地图中
            // 设置标签的样式
            label.setStyle({
                fontSize: "32px",
                color: "red",
            });

在这里插入图片描述

  • 运行结果

在这里插入图片描述

5- 信息窗口

所有叠加或覆盖到地图的内容,我们统称为地图覆盖物。覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动。

  • 提供的信息窗口

InfoWindow:信息窗口。也是一种特殊的覆盖物,它可以展示更为丰富的文字和多媒体信息。注意:同一时刻只能有一个信息窗口在地图上打开。

  • 添加信息窗口

信息窗口是地图上方浮动显示的HTML内容,可直接在地图上的任意位置打开,也可以在标注对象上打开(此时信息窗口的坐标与标注的坐标一致)。

var opts = {
    width: 250,     // 信息窗口宽度
    height: 100,    // 信息窗口高度
    title: "Hello"  // 信息窗口标题
}
var infoWindow = new BMapGL.InfoWindow("World", opts);  // 创建信息窗口对象
map.openInfoWindow(infoWindow, map.getCenter());        // 打开信息窗口
  • 扩展代码

        //添加一个点
        var marker = new BMapGL.Marker(point); // 创建标注
        map.addOverlay(marker); // 将标注添加到地图中
        var opts = {
            width: 250, // 信息窗口宽度
            height: 150, // 信息窗口高度
            title: "下楼做核酸了", // 信息窗口标题
        };
        var infoWindow = new BMapGL.InfoWindow(
            `<p>快点的吧,还有再做三天</p><img src="https://img-prod-cms-rt-microsoft-com.akamaized.net/cms/api/am/imageFileData/RE4wB6C?ver=dddf" width="50%"
            >`,
            opts
        ); // 创建信息窗口对象

        // map.openInfoWindow(infoWindow, point); //打开信息窗口
        //监听事件
        map.addEventListener("click", function (e) {
            map.openInfoWindow(infoWindow, point);
        });
  • 样式实现

在这里插入图片描述

6- 搜索

在这里插入图片描述

  • 代码
        <style type="text/css">
            html {
                height: 100%;
            }
            body {
                height: 100%;
                margin: 0px;
                padding: 0px;
            }
            #container {
                height: 90%;
                width: 50%;
            }
        </style>
    </head>
    <body>
        <!-- 准备容器 -->
        <input type="text" onchange="search(this)" />
        <div id="container"></div>
    </body>
<!-- 01导入js -->
<script  type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&&type=webgl&ak=6zAD8CIavtzWnkGg0a7roush5maGMIPn"></script>
        
<script>
        // 初始化地图
        var map = new BMapGL.Map("container");
        // 准备一个中心店(经度和纬度)
        var point = new BMapGL.Point(113.665, 34.784);
        //设置中心店和缩放级别
        map.centerAndZoom(point, 15);
        //鼠标滚轮播放
        map.enableScrollWheelZoom(true);

        //添加一个点
        var marker = new BMapGL.Marker(point); // 创建标注
        map.addOverlay(marker); // 将标注添加到地图中
        // 百度地图API功能

        var local = new BMapGL.LocalSearch(map, {
            renderOptions: { map: map },
        });
        function search(e) {
            //表单值发生变化时候进行搜索
            local.search(e.value);
        }
    </script>

在这里插入图片描述

  • 运行结果

在这里插入图片描述

7- vue中使用百度地图

7.1 引入百度地图

public/index.js 中引入script ,引入百度地图

在这里插入图片描述

7.2 新建容器

新建容器,一定要设置宽高

在这里插入图片描述

7.3 定义data

在组件中定义data

data() {
return {
map: null,
point: null,
marker: null,
keyword: "",
local: null,
    };
  },

在这里插入图片描述

7.4 初始化项目

mounted 初始化项目

mounted() {
this.map = new window.BMapGL.Map(this.$refs.map);
this.point = new window.BMapGL.Point(113.665, 34.784);
this.map.centerAndZoom(this.point, 15);
this.map.enableScrollWheelZoom(true);
//添加一个点
this.marker = new window.BMapGL.Marker(this.point); // 创建标注
this.map.addOverlay(this.marker); // 将标注添加到地图中
this.local = new window.BMapGL.LocalSearch(this.map, {
renderOptions: { map: this.map },
    });
  },

在这里插入图片描述

7.5 监听数据变化

监听数据变化,更新地图

watch: {
keyword: {
handler() {
if (this.keyword === "") {
this.local.clearResults();
this.map.centerAndZoom(this.point, 15);
        } else {
this.local.search(this.keyword);
        }
      },
    },
  },

在这里插入图片描述

7.6 完整代码

  • 在自己的项目里,新建BaiduView.vue ,到router/index.js 配置一下

在这里插入图片描述

  • 完整代码(带搜索功能的地图)
<template>
  <div>
    <h1>百度地图</h1>
    <input type="text" v-model.lazy="keyword" />
    <div id="map" ref="map"></div>
  </div>
</template>
<style scoped lang="scss">
#map {
  height: 90vh;
  width: 100%;
}
</style>
<script>
export default {
  data() {
    return {
      map: null,
      point: null,
      marker: null,
      keyword: "",
      local: null,
    };
  },
  mounted() {
    this.map = new window.BMapGL.Map(this.$refs.map);
    this.point = new window.BMapGL.Point(113.665, 34.784);
    this.map.centerAndZoom(this.point, 15);

    this.map.enableScrollWheelZoom(true);

    //添加一个点
    this.marker = new window.BMapGL.Marker(this.point); // 创建标注
    this.map.addOverlay(this.marker); // 将标注添加到地图中
    this.local = new window.BMapGL.LocalSearch(this.map, {
      renderOptions: { map: this.map },
    });
  },
  watch: {
    keyword: {
      handler() {
        if (this.keyword === "") {
          this.local.clearResults();
          this.map.centerAndZoom(this.point, 15);
        } else {
          this.local.search(this.keyword);
        }
      },
    },
  },
};
</script>

  • 运行结果

在这里插入图片描述

7.7 可以使用vue地图插件

当然,如果不想在vue里使用百度地图的话,还可以使用vue插件,以下这个是推荐

vue-baidu-map 基于Vue.2 的百度地图组件库


往期传送门

【ECharts】echarts数据化图表入门级教程(附10个案例)

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

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

相关文章

JS 连接MQTT的方法(mqtt.js的使用方法)

本文章是介绍 mqtt.js 的使用方法 一、说明 本文章使用的版本是 4.1.x &#xff0c;没用最新版的原因是 4.2.x 以上版本会报错&#xff0c;具体报错可以看我的另一篇文章&#xff0c;点击查看。使用的 4.1.x 版本地址&#xff1a;https://cdn.bootcdn.net/ajax/libs/mqtt/4.1…

若依 vue前端 动态设置路由path不同参数 在页面容器里打开新页面(新路由),面包屑和标签页标题根据参数动态改变,面包屑多级标题,侧边栏对应菜单亮起

前言 因为是在vue源码的基础上进行修改&#xff0c;所以&#xff0c;就没有复制代码在文章上&#xff0c;采取的是截图对比源码和我修改的代码片段。要麻烦你们自己手敲了。 先来看看效果&#xff1a; 场景&#xff1a;在费用配置列表中&#xff0c;点击每一项的配置&#x…

vue如何设置元素的显示隐藏

方法&#xff1a;可以使用v-if&#xff0c;也可以使用v-show指令。 v-if 指令&#xff0c;通过动态的向DOM树内添加或者删除DOM元素的方式来显示或隐藏元素&#xff1b; v-show 指令&#xff0c;通过设置DOM元素的display样式属性来控制显隐。 区别&#xff1a; v-if 会直接删除…

手把手教你在 Vue3 中自定义指令

TienChin 项目前端是 Vue3&#xff0c;前端有这样的一个需求&#xff1a;有一些前端页面上的按钮要根据用户的权限来决定是否展示出来&#xff0c;如果用户具备相应的权限&#xff0c;那么就展示对应的按钮&#xff1b;如果用户不具备对应的权限&#xff0c;那么按钮就隐藏起来…

微信小程序:用户微信登录流程(附:流程图+源码)

目录 前言 一、微信小程序是什么&#xff1f; 二、业务流程 1、使用微信小程序登录的wx.login()方法 2、后端使用登录凭证换取session_key和openid 3、前端处理session_key、openid和token 尾言 前言 随着微信小程序大规模的铺开和宣传&#xff0c;在生活中随处可见微信小程序…

vue2常见面试题

文章目录1、vue 修改数据页面不重新渲染数组/对象的响应式 &#xff0c;vue 里面是怎么处理的&#xff1f;2、生命周期Vue 生命周期都有哪些&#xff1f;父子组件生命周期执行顺序3、watch 和 computed 的区别4、组件通信&#xff08;组件间传值&#xff09;5、$nextTick6、修饰…

【微信小程序】自定义组件(二)

&#x1f381;写在前面&#xff1a; 观众老爷们好呀&#xff0c;这里是前端小刘不怕牛牛频道&#xff0c;小程序系列文章又更新了呀。 上文我们讲解了微信小程序自定义组件的入门知识&#xff0c;那么今天牛牛就来讲讲自定义组件的进阶知识吧&#xff0c;赶紧拿起小本本做笔记…

vue中三种for循环(含案例分析)

这里写目录标题三种for循环1.普通的for循环2.for in 循环3.for of 循环总结三种for循环 vue中的for循环有三种 :1.普通的for循环 ,2.for in 循环 ,3.for of 循环 它们三个各自有各自的特点和作用&#xff0c;下面我会用一个小案例来帮助大家理解它们三个的区别 &#xff08;三…

【宜搭】低代码开发师高级认证实操题1难点指导

难度&#xff1a; 较难 知识点&#xff1a; 远程数据源 表单创建 表格组件使用 js增删改查功能代码编写 在本文中&#xff0c;我将根据题目的每一点要求&#xff0c;对于我在实操过程中遇到的难点进行比较详细的介绍&#xff0c;供大家参考&#xff0c;希望能够对大家有所帮助…

Bootstrap从入门到精通(全)

目录前言1. 下载安装2. 布局容器和栅格网格系统2.1 布局容器2.2 栅格网格系统3. 常用样式4. 表单4.1 控件4.2 布局5. 插件5.1 导航框5.2 下拉菜单前言 在了解这篇文章的时候 需要提前知道这些知识点 可看我之前的文章 html从入门到精通&#xff08;全&#xff09;css属性从入…

CSS6大种选择器(超详细!!!!!!)

文章目录一、常用的css基本选择器(4种)1、标签选择器2、类选择器3.id选择器区别&#xff1a;4、通配符选择器二、复合选择器 (2种)1、交集选择器2、并集选择器三、属性选择器(5种)四、关系选择器(4种)五、伪类选择器1、元素选择伪类选择器2、否定伪类选择器3、特殊应用的伪类六…

基于Java+SpringBoot+vue+elementui图书商城系统设计实现

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取联系&#x1f345;精彩专栏推荐订阅&#x1f447;&#x1f…

完美解决el-cascader回显失败问题

项目场景&#xff1a; 项目场景&#xff1a;接手了一些老项目&#xff0c;需要做一些日志相关的操作&#xff0c;从后台日志跳转到相应页面要带上原来的请求参数&#xff0c;涉及到一个回显问题 问题描述 Element-UI的 <el-cascader /> 这个组件&#xff0c;赋值之后它…

前端与后端传递数据 — — JSON

前端与后端传递数据 — — JSON 1 前端传送JSON数据给后端 1.1 application/x-www-form-urlencoded默认格式 1.1.1 通过HttpServletRequest获取数据 /*** 通过request获取数据* param request* return*/PostMapping("/testDefaultWithNoAnno1")public String test…

自主Web服务器Http_Server

目录自主web服务器背景目标描述技术特点项目定位项目实现过程创建HttpServer基础框架TcpServer.hppHttpServer.hppLog.hppProtocol.hpp解析C端发来的HTTP报文MSG_PEEK标志位Util.hpp构建请求与响应类读取,解析请求构建响应读取请求解析请求构建响应stat系统函数发送响应sendfil…

使用uni-app开发App简易教程

使用uni-app开发App简易教程前言app端开发步骤1、 申请uniapp开发者账号2、登录后开始新建应用3、下载安装 HBuildder X 。4、新建项目5、开启webview&#xff0c;在pages-index里面写一点点代码6、配置mainifest.json7、打包h5工程配置在html中引入uniapp-sdk解决后退问题上架…

【vue2小知识】实现directive自定义指令的封装与全局注册

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;将我们的自定义指令directive统一管理并批量注册 目录 一、directive自定义指令介绍 二…

Cannot read properties of undefined (reading ‘validate‘)“

1、注意两个地方 1、ref前面 加冒号“&#xff1a;”&#xff0c;还是不加冒号。 2、this.$refs[value].validate()>&#xff08;&#xff09;&#xff0c;更改为this.$refs[value].validate()>(), 不排除this.$refs[value].validate()>(),有时候不会报错 2、示范代码…

解决本地浏览器运行项目时的跨域问题Access to XMLHttpRequest at ‘file:///C:/Users/Len/Desktop/%E5%8F%AF%E4%BF%AE%E6%94%

解决本地浏览器运行项目时的跨域问题-Access to XMLHttpRequest at ‘file:///C:/Users/Len/Desktop/%E5%8F%AF%E4%BF%AE%E6%94%B9%E9%85%8D%E7%BD%AE/dist/model/model.gltf.xz’ from origin ‘null’ has been blocked by CORS policy: Cross origin requests are only supp…

npm sill idealTree buildDeps 安装踩坑指南(详细版)

背景&#xff1a; 已通过nvm安装node 18.8 需要运行 npx create-react-app demo01 首次提醒npm版本过低&#xff0c;但是更新npm失败&#xff0c;并且不再报错&#xff08;安装其他包同样不报错&#xff09; 且换源无果&#xff08;更换淘宝源、清除缓存没效果&#xff09;&am…