前端:地图篇(一)

1、前言

在很多的出行程序中,都会使用到地图这一个功能,在实际的开发中我们也不会去开发一个自己的地图模型。如果自己开发一个地图模型,那么需要投入的成本、人力都是非常巨大的。所以我们很多网站和APP中使用的都是第三方的接口和JS,在案例中我们使用百度地图作为第三方。

2、工具准备

1、我们既然要使用第三方的功能,所以我们需要在百度中有一个账号。
点击这里,可以跳转到百度注册页面

注册页面

2、其次呢,我们需要在百度地图开放平台申请开通开发者功能。
点击这里,可以跳转到百度地图开放平台

百度地图开放平台
3、进入控制台后,进入应用管理 -> 我的应用 -> 创建应用申请一个AK, 这个AK很重要,是访问百度相关API的密钥(用户标识)。

在这里插入图片描述

4、申请AK。

在这里插入图片描述

5、填写好相应的信息提交,分类要选择好,服务端对应的是后台程序,浏览器端对应的是前端程序,其他的分类也可以从字面意思了解得出来。

申请好AK后,我们就可以开始使用百度地图API了。

3、百度地图基本操作

使用百度地图的时候,我们要明白一点,百度已经为我们生成了地图模板,我们只需要添加相应的组件和相应的事件功能就可以了。

3.1、展示地图

因为百度已经为我们设计好了地图模板,所以我们可以使用HTML,也可以使用Vue等框架。这里我们使用基础的HTML。

3.1.1、创建HTML文件

创建一个简单的HTML文件,写一个ID为container的DIV。

<!DOCTYPE html>  
<html>  
<head>  <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <title>Baidu Map </title>  <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>  
</html>

3.1.2、引入百度地图JS

在引入百度地图的JS时,我们就需要使用到我们申请的AK。

<script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&type=webgl&ak=您的密钥"></script>

3.1.3、编写JS脚本

在我们引入百度地图的JS后,我们就需要自定义JS,将地图模板放入定义的container容器中。

<script>let map = new BMapGL.Map("container");          // 创建地图实例 let point = new BMapGL.Point(116.404, 39.915);  // 创建焦点坐标 map.centerAndZoom(point, 15);                 // 初始化地图,设置中心点坐标和地图级别map.enableScrollWheelZoom(true);     //开启鼠标滚轮缩放、鼠标拖动
</script>

此时,我们运行HTML文件就可以看见效果了。
在这里插入图片描述

3.2、更改地图类型

类型常量描述
BMAP_NORMAL_MAP标准地图(默认)
BMAP_EARTH_MAP地球模式
BMAP_SATELLITE_MAP普通卫星地图

更改类型:

map.setMapType(BMAP_EARTH_MAP);      // 设置地图类型为地球模式

效果
在这里插入图片描述

3.3、添加覆盖物

除了百度提供的地图模型以外的覆盖在模型上部的内容,都是覆盖物。

3.3.1、绘制点、线、面

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

基本覆盖物对象:

类名描述
Marker表示地图上的点,可自定义标注的图标
Polyline表示地图上的折线
Polygon表示地图上的多边形
Circle表示地图上的圆
  1. Marker是一个用来往地图上添加点标记的类。使用它将任何你希望用户看到的兴趣点标注在地图上。
  2. API提供了默认图标样式,您也可以通过Icon类来指定自定义图标。Marker的构造函数的参数为Point和MarkerOptions(可选)。
  3. 注意:当您使用自定义图标时,标注的地理坐标点将位于标注所用图标的中心位置,您可通过Icon的offset属性修改标定位置。

3.3.1.1、创建折线

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

function polyline(map){var polyline = new BMapGL.Polyline([new BMapGL.Point(112.910838,28.276226),  // 第一个点new BMapGL.Point(113.024096,28.260446), // 第二个点new BMapGL.Point(113.028121,28.155017) // 第三个点], {strokeColor:"blue", strokeWeight:10, strokeOpacity:0.5});/**strokeColor: 线条颜色strokeWeight: 线条宽度strokeOpacity:线条透明度**/map.addOverlay(polyline); // 添加遮罩物
}

效果:
在这里插入图片描述

3.3.1.2、创建多边形

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

function polygon(map){var polygon = new BMapGL.Polygon([new BMapGL.Point(112.910838,28.276226),new BMapGL.Point(113.024096,28.260446),new BMapGL.Point(113.028121,28.155017),new BMapGL.Point(112.971779,28.148392),new BMapGL.Point(112.909688,28.159093),new BMapGL.Point(112.910838,28.276226),], {strokeColor:"blue", strokeWeight:5, strokeOpacity:0.5});map.addOverlay(polygon);
}

效果:
在这里插入图片描述

3.3.2、创建标注

3.3.2.1、创建一个简单的标注

我们所使用的遮罩物都是基于一个点的,所以我们需要遮罩物所展示的基本点。

let point = new BMapGL.Point(112.937528,28.244156);  // 创建焦点坐标
let marker = new BMapGL.Marker(point);        // 创建标注
map.addOverlay(marker);                     // 将标注添加到地图中

完成JS:

<script>let map = new BMapGL.Map("container");          // 创建地图实例let point = new BMapGL.Point(112.937528,28.244156);  // 创建焦点坐标map.centerAndZoom(point, 15);                 // 初始化地图,设置中心点坐标和地图级别map.enableScrollWheelZoom(true);     //开启鼠标滚轮缩放let marker = new BMapGL.Marker(point);        // 创建标注map.addOverlay(marker);                     // 将标注添加到地图中
</script>

效果:
在这里插入图片描述

3.3.2.2、自定义标注图片

我们可以使用指定的图片来作为标注。

function pointIcon(map){let myIcon = new BMapGL.Icon("1.jpg", new BMapGL.Size(100, 100), {// 指定定位位置。// 当标注显示在地图上时,其所指向的地理位置距离图标左上// 角各偏移10像素和25像素。您可以看到在本例中该位置即是// 图标中央下端的尖角位置。anchor: new BMapGL.Size(10, 25),// 设置图片偏移。// 当您需要从一幅较大的图片中截取某部分作为标注图标时,您// 需要指定大图的偏移位置,此做法与css sprites技术类似。imageOffset: new BMapGL.Size(0, 0 - 25)   // 设置图片偏移});// 创建标注对象并添加到地图let marker = new BMapGL.Marker(point, {icon: myIcon});map.addOverlay(marker);
}

效果:
在这里插入图片描述

3.4、事件

百度地图API中的大部分对象都含有addEventListener方法,您可以通过该方法来监听对象事件。

3.4.1、遮罩物事件

marker.addEventListener("click", function(){   alert("您点击了标注");   
});

当点击marker这个遮罩物之后就会触发click事件。

3.4.2、地图事件

map.addEventListener('click', function(e) {alert('click!')
});
// 当点击了地图的某个地方后就会触发click事件。

通过回调函数的参数,可以获取当前点击点的经纬度信息。

map.addEventListener('click', handleClick);function handleClick(e){alert('点击的经纬度:' + e.latlng.lng + ', ' + e.latlng.lat);var mercator = map.lnglatToMercator(e.latlng.lng, e.latlng.lat);alert('点的墨卡托坐标:' + mercator[0] + ', ' + mercator[1]);
}map.removeEventListener('click', handleClick); // 移除事件

3.4.3、右击事件

Javascript API GL提供了MenuItem构造函数来定义菜单项实例,其接收三个参数,分别是菜单项显示的文本(string)、点击后的回调函数(Function)以及一个可选的MenultOptions(对象字面量)参数。

function rightClick(map){let txtMenuItem = [{text:'放大', // 定义菜单项的显示文本callback: function () {    // 定义菜单项点击触发的回调函数map.zoomIn();}},{text:'缩小',callback: function () {map.zoomOut();}}];for(var i = 0; i < txtMenuItem.length; i++){menu.addItem(new BMapGL.MenuItem( // 定义菜单项实例txtMenuItem[i].text,    // 传入菜单项的显示文本txtMenuItem[i].callback,   // 传入菜单项的回调函数{width: 300,    // 指定菜单项的宽度id: 'menu' + i   // 指定菜单项dom的id}));}map.addContextMenu(menu);   // 给地图添加右键菜单
}

4、小结

  1. 获取指定位置的经纬坐标:点击这里可以跳转到百度获取经纬坐标网页。
  2. 查看百度地图API参考类:点击这里可以跳转到百度地图API参考文档
  3. 查看百度地图开发指南:点击这里可以跳转到百度地图开发指南

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

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

相关文章

MPLS(下)

LDP --- 标签分发协议 --- 主要应用在MPLS的控制层面 MPLS控制层面需要完成的工作主要就是分配标签和传递标签。分配标签的前提是本地路由表中得先存在标签&#xff0c;传递标签的前提也是得先具备路由基础。所以&#xff0c;LDP想要正常工作&#xff0c;则需要IGP作为基础。 …

Ubuntu 虚拟机和主机无法互相复制文字和文件

1.在虚拟机列表中&#xff0c;右键查看是否有安装VMware Tools&#xff0c;如果没有安装点击安装&#xff0c;如果已经安装了&#xff0c;上面显示重现安装VMware Tools&#xff0c;并且为灰色&#xff0c;如图&#xff1a; 2.如果没有安装点击安装&#xff0c;如果已经安装&am…

深度学习论文分享(六)Simple Baselines for Image Restoration

深度学习论文分享&#xff08;六&#xff09;Simple Baselines for Image Restoration 前言Abstract1 Introduction2 Related Works2.1 Image Restoration2.2 Gated Linear Units 3 Build A Simple Baseline3.1 Architecture3.2 A Plain Block3.3 Normalization3.4 Activation3…

wordpress发表文章时报错: rest_cannot_create,抱歉,您不能为此用户创建文章(已解决)

使用wordpress 的rest api发布文章&#xff0c;首先使用wp-json/jwt-auth/v1/token接口获取token&#xff0c;然后再使用/wp-json/wp/v2/posts 接口发表文章&#xff0c;但是使用axios请求时&#xff0c;却报错&#xff1a; 但是&#xff0c;我在postman上却是可以的&#xff0…

Java 监听Mysql binlog

使用 mysql-binlog-connector-java 1. mysql-binlog-connector-java 官网 2. Java代码中&#xff0c;如何监控Mysql的binlog&#xff1f; 前置条件 1. mysql服务器表结构 CREATE TABLE student (id int NOT NULL AUTO_INCREMENT,name varchar(255) CHARACTER SET utf8mb4 C…

IDEA的实用快捷键大全

目录 1.常规快捷键 1.1通用类 1.2注释类 1.3操作类 1.4展开与关闭 2.智能补全类快捷键 3.程序结构类快捷键 4.统一操作快捷键 1.常规快捷键 1.1通用类 像 Ctrl C 复制&#xff0c; Ctrl V 粘贴&#xff0c; Ctrl S保存文件&#xff0c; Ctrl X剪切&#xff0c;这种…

idea 2023 新版ui中git的相关操作

前两个月换了新电脑&#xff0c;下了最新版的idea发现可以切换一套新的ui了 切换新ui肯定不太习惯&#xff0c;很多操作都得重新摸索一下 在这里记录几个git相关的操作 忽略我下面截图中当前项目是js的后端项目…… 切换ui 首先说一下怎么切换新旧版ui&#xff0c;我这里就…

LeetCode每日一题Day5——21. 合并两个有序链表

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;算法修炼之练气篇&#xff08;C\C版&#xff09; &#x1f353;专栏&#xff1a;算法修炼之筑基篇&#xff08;C\C版&#xff09; &#x1f433;专栏&#xff1a;算法修炼之练气篇&#xff08;Python版&#xff09; …

3ds Max如何进行合成的反射光泽通道渲染

推荐&#xff1a; NSDT场景编辑器 助你快速搭建可二次开发的3D应用场景 1. 准备场景 步骤 1 打开 3ds Max。smart_phone.max打开已 随教程提供。 打开 3ds Max 步骤 2 按 M 打开材质编辑器。选择空材料 槽。单击漫射通道。它将打开材质/贴图浏览器窗口。选择位图&#xff0…

ffmpeg安装

简介 FFmpeg是一个开源的音视频处理库&#xff0c;它提供了一系列的工具和API&#xff0c;可以用于处理音视频文件。你可以使用FFmpeg的命令行工具来执行各种音视频处理操作&#xff0c;比如转码、剪辑、合并等。FFmpeg的命令格式通常是&#xff1a;ffmpeg [全局选项] {[输入文…

Hum Brain Mapp:用于功能连接体指纹识别和认知状态解码的高精度机器学习技术

摘要 人脑是一个复杂的网络&#xff0c;由功能和解剖上相互连接的脑区组成。越来越多的研究表明&#xff0c;对脑网络的实证估计可能有助于发现疾病和认知状态的生物标志物。然而&#xff0c;实现这一目标的先决条件是脑网络还必须是个体的可靠标记。在这里&#xff0c;本研究…

性能优化-react路由懒加载和组件懒加载

背景 随着项目越来越大&#xff0c;打包后的包体积也越来越大&#xff0c;严重影响了首屏加载速度&#xff0c;需要对路由和组件做懒加载处理 主要用到了react中的lazy和Suspense。 废话不多说&#xff0c;直接上干货 路由懒加载 核心代码 import React, { lazy, Suspens…

GPS/北斗RTK差分定位系统的原理以及应用领域

导语&#xff1a;现代定位技术在国内外的发展与应用越来越广泛&#xff0c;其中GPS和北斗是两大被广泛使用的全球卫星定位系统。本文将介绍GPS/北斗RTK差分定位系统的原理以及其在各个领域的应用。 一、GPS/北斗RTK差分定位系统的原理 GPS/北斗RTK差分定位系统&#xff0c;即全…

【TypeScript】安装的坑!

TypeScript安装 安装TypeScript安装时候可能报错这样开头的数据&#xff08;无法枚举容器中的对象&#xff09;——原因&#xff1a;没权限先解决没权限的问题如果发现无法修改-高级-修改继续安装想使用tsc-发现&#xff0c;tsc不能用解决方法&#xff1a;配置环境变量最后的最…

便捷省心的手机直播影视工具,畅享轻松电视娱乐时光

便捷省心的手机直播影视工具&#xff0c;畅享轻松电视娱乐时光 在快节奏的现代生活中&#xff0c;我们常常渴望能够以简单、省心的方式消遣自己&#xff0c;享受高品质的电视娱乐。幸运的是&#xff0c;随着技术的进步&#xff0c;便捷省心的手机直播影视工具应运而生。这些工…

Adaptive autosar 都有哪些模块?各有什么功能?

Adaptive autosar是一种用于高性能计算ECU的软件平台,它支持自适应应用程序的开发和运行。它由两部分组成:基础(Foundation)和服务(Service)。基础包括了操作系统接口、执行管理、网络管理、识别访问管理、加密、更新和配置管理等功能。服务包括了通信管理、RESTful、时间…

【目标检测论文解读复现NO.33】改进YOLOv5的新能源电池集流盘缺陷检测方法

前言 此前出了目标改进算法专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读最新目标检测算法论文&#xff0c…

Kubernetes v1.20 二进制部署

架构 k8s集群master01&#xff1a;192.168.80.101 kube-apiserver kube-controller-manager kube-scheduler etcd k8s集群master02&#xff1a;192.168.80.102 k8s集群node01&#xff1a;192.168.80.103 kubelet kube-proxy docker k8s集群node02&#xff1a;192.168.80…

后端整理(MySql)

1 事务 1.1 事务ACID原则 原子性&#xff08;Atomicity&#xff09; 事务的原子性指的是事务的操作&#xff0c;要么全部成功&#xff0c;要么全部失败回滚 一致性&#xff08;Consistency&#xff09; 事务的一致性是指事务必须使数据库从一个一致状态转变成另一个一致性…

使用kubeadm快速部署一个k8s集群

Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署&#xff08;一&#xff09;主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署&#xff08;二&#xff09;ETCD集群部署 Kubernetes高可用集群二进制部署&#xff08;三&#xff09;部署…