前端:地图篇(一)

news2024/11/15 5:29:09

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.coloradmin.cn/o/833226.html

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

相关文章

本地部署 audiocraft

本地部署 audiocraft 1. 什么是 audiocraft2. Github 地址3. 安装 Miniconda34. 创建虚拟环境5. 部署 audiocraft6. 启动 MusicGen7. 访问 MusicGen 1. 什么是 audiocraft Audiocraft 是一个通过深度学习进行音频处理和生成的库。它具有最先进的 EnCodec 音频压缩器/分词器&am…

Java Selenium WebDriver 网页填报

一、windows环境安装配置 1.安装chrome浏览器 在“关于chrome”界面&#xff0c;查看浏览器版本号 2.下载chromeDriver 在https://registry.npmmirror.com/binary.html?pathchromedriver/下载对应版本的驱动&#xff08;如果浏览器版本过新&#xff0c;建议下载最接近的版…

day20-101. 对称二叉树

101. 对称二叉树 力扣题目链接 给定一个二叉树&#xff0c;检查它是否是镜像对称的。 思路 镜像对称必要的条件就是根节点的左右子树互相对称 左子树的左孩子 右子树的右孩子左子树的右孩子 右子树的左孩子 递归 使用递归前要确定递归的顺序&#xff0c;是前序、后序还…

N个实现水平垂直居中的方法

1 行内元素的水平垂直居中 1.1 单行文本 要实现行内元素的水平居中&#xff0c;只需把行内元素包裹在块级父层元素中&#xff0c;并且在父层元素CSS设置如下&#xff1a; <div class"box"><p>center</p> </div>.box{background-color: aq…

Docker Compose编排部署LNMP服务

目录 安装docker-ce 阿里云镜像加速器 文件 启动 安装docker-ce [rootlocalhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo --2023-08-03 18:34:32-- http://mirrors.aliyun.com/repo/Centos-7.repo 正在解析主机 m…

Set-up ESP-AT Environment on Windows using CMD

Before you start, the following environments need to be installed: Git BashPython environment, suggest Python version: 3.8.7. Please ensure the installation of Python v3.8 version environment, and remember to select the option “add to PATH” during the in…

MyBatis-基础操作-CRDU

前端页面展示提供对于数据的删除操作&#xff0c;后端为其实现 根据id删除数据&#xff08;D&#xff09; 具体的SQL语句 delete from emp where id 17; 接口方法 Delete("delete from emp where id #{id} ")public int DeleteByID(Integer id); 测试方法 Testpub…

数据结构--线性表2-2

目录 一、线性表例题&#xff1a; 二、分配动态内存&#xff1a; 1.动态创建一个空顺序表的算法&#xff1a; 2.动态顺序表的插入算法&#xff1a; 3.动态顺序表的删除 三、线性表的链式表示和实现 例题1&#xff1a;创建链表并插入26个字母 例题2&#xff1a;在链表中取…

伺服电机的三种控制方式与三闭环控制

&#xff08;项目&#xff09;FPGA双电机主从快速稳定控制实现 第一章 伺服电机的三种控制方式与三闭环控制 伺服电机的三种控制方式与三闭环控制 &#xff08;项目&#xff09;FPGA双电机主从快速稳定控制实现前言一、电机控制方式二、电机三个闭环负反馈PID控制系统三、三闭…

LeetCode513. 找树左下角的值

513. 找树左下角的值 文章目录 [513. 找树左下角的值](https://leetcode.cn/problems/find-bottom-left-tree-value/)一、题目二、题解方法一&#xff1a;递归法&#xff08;层序遍历&#xff0c;深度优先搜索&#xff09;**不足之处以及如何改进** 方法二&#xff1a;迭代 一、…

2023年08月在线IDE流行度最新排名

点击查看最新在线IDE流行度最新排名&#xff08;每月更新&#xff09; 2023年08月在线IDE流行度最新排名 TOP 在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的 在线IDE被搜索的次数越多&#xff0c;人们就会认为它越受欢迎。原始数据来自谷歌Trends 如果您相…

三、文件与路径

1、隐藏文件与非隐藏文件 1.1、概念 (1)隐藏文件默认情况下看不到&#xff0c;需要进行相应设置才能看到。非隐藏文件默认情况下就能看到 1.2、Windows中的文件 (1)非隐藏文件设置为隐藏文件。选中文件&#xff0c;鼠标右键→属性&#xff0c;勾选隐藏。 (2)产看隐藏文件。…

资产盘点设备包括哪些

根据资产管理系统的卡账表和计算机设备管理系统的验证&#xff0c;固定资产的账卡完成一致&#xff1b;根据上级领导机构发布的资产盘点标示&#xff0c;固定资产。低价值易耗品进行标签贴绑&#xff0c;完成帐实一致&#xff0c;真实反映本行固定资产实物情况。   RFID固定…

RocketMQ 事务消息

事务消息是 RocketMQ 的高级特性之一 。这篇文章&#xff0c;笔者会从应用场景、功能原理、实战例子三个模块慢慢为你揭开事务消息的神秘面纱。 1 应用场景 举一个电商场景的例子&#xff1a;用户购物车结算时&#xff0c;系统会创建支付订单。 用户支付成功后支付订单的状态…

论测试猿如何优雅的甩锅

测试猿&#xff0c;经常被江湖人戏称为“背锅侠”。 这个称呼是怎么来的呢&#xff1f;我们来追溯一下根源。 当产品上线后&#xff0c;有 bug&#xff1a; “测试为什么没有测试发现这个问题&#xff1f;肯定是测试的责任&#xff01;” 当产品上线后&#xff0c;用户反馈…

Windows server上用nginx部署vue3项目

Windows server上用nginx部署vue3项目 一、报错信息三、总结 一、报错信息 这里&#xff0c;nginx给出以下错误信息&#xff1a; Windows&#xff1a;nginx: [error] CreateFile() “/logs/nginx.pid“ failed (2: The system&#xff09; 经分析&#xff0c;造成上述错误的本…

小研究 - 领域驱动设计DDD在IT企业内部网站开发中的运用(一)

在企业内部网站的建设过程中&#xff0c;网站后端最初采用传统的表模式的开发方式。这种方式极易导致站点的核心业务逻辑和业务规则分布在架构的各个层和对象中&#xff0c;这使得系统业务逻辑的复用性不高。为了解决这个问题&#xff0c;作者在后期的开发过程中引入了领域驱动…

ad+硬件每日学习十个知识点(18)23.7.29 (LDO原理、LDO的补偿引脚)

文章目录 1.LDO名字介绍2.LDO的应用范围3.LDO的原理4.LDO输出端和输入端的差值至少满足多少V&#xff1f;怎么计算的&#xff1f;5.输出的误差和输出电流&#x1f446;&#xff08;右下角图像&#xff09;6.LDO一般会有个引脚是做补偿之用&#xff0c;datasheet会说明一个器件的…

云原生全栈体系(二)

Kubernetes实战入门 第一章 Kubernetes基础概念 一、是什么 我们急需一个大规模容器编排系统kubernetes具有以下特性&#xff1a; 服务发现和负载均衡 Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器&#xff0c;如果进入容器的流量很大&#xff0c;Kubernetes 可以负…

2023华数杯数学建模竞赛选题建议

提示&#xff1a;DS C君认为的难度&#xff1a;C<B<A&#xff0c;开放度&#xff1a;B<A<C 。 A题&#xff1a;隔热材料的结构优化控制研究 A题是数模类赛事很常见的物理类赛题&#xff0c;需要学习不少相关知识。 其中第一问需要建立平纹织物整体热导率与单根纤…