0 前言

Leaflet 是一个开源并且对移动端友好的交互式地图 JavaScript 库。 它大小仅仅只有 42 KB of JS, 并且拥有绝大部分开发者所需要的所有地图特性
Leaflet 简单、高效并且易用。 它可以高效的运行在桌面和移动平台, 拥有着大量的 扩展插件、 优秀的文档(相对于openlayer,Leaflet有一个非常友好的中文网站 )、简单易用的 API 和完善的案例, 以及可读性较好的 源码
一个优秀的文档对初学者的帮助是巨大的,接下来的内容都是基于这个文档来的(强烈推荐大家看官方文档 https://leafletjs.cn/

【Leaflet入门篇】文章可以帮助大家能够更好的阅读教程文档
“快速入门”主要讲Leaflet的引入和使用(添加简单的地图元素和点击事件),对应教程【Leaflet快速入门指南

1 引入

引入分为脚本引入(script)和模块引入(import)等
脚本引入

<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.3/dist/leaflet.css"/>
<script src="https://unpkg.com/leaflet@1.9.3/dist/leaflet.js"></script>

注:先引leaflet.css,在引leaflet.js
模块引入

// 直接安装
npm install --save leaflet@1.7.1 (版本号自己顶,此刻最新版本v1.9.4) // package.json 添加安装
"dependencies": {
"leaflet": "^1.7.1"
}
npm install // 引入
import L from 'leaflet'
import 'leaflet/dist/leaflet.css'

2 使用

本文将使用分为以下三步:

2.1 创建具有特定id的div元素

<div id="map" style="height: 500px; width: 500px"></div>

注:需要设定div元素的高度height,不然地图无法显示

2.2 实例map

var map = L.map('map').setView([29.04656, 112.86254], 8);

L.map('map') 是静态实例方法,参数'map'是指id问map的div原始,setView([29.04656, 112.86254], 13)是设置地图中心点和缩放级别
此时只创建了地图实例,地图上只有缩放控件,需要在地图上添加元素(本文会演示添加简单的地图服务、标记、圆和多边形等元素)

右下角有一个Leaflet图标,那是Attribution版权控件,可以通过地图的attributionControl属性控制是否显示。

// 添加{attributionControl: false}去掉版权控件
var map = L.map('map', {attributionControl: false}).setView([29.04656, 112.86254], 13);

2.3 添加地图元素

1)添加地图服务:教程中添加的是openstreetmap的瓦片图层,没有kexue上网访问不友好

L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
}).addTo(map);

选择一个可以轻松访问的瓦片服务,使用天地瓦片服务(需要token,好像也不够轻松)

var url = http://t0.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=xxx (替换tk)
L.tileLayer(url, {
maxZoom: 18
}).addTo(map)
// 修改地图中心点
map.setView([27.629216, 111.711649])


Leaflet能添加tile瓦片服务还能添加其他类型的地图服务(wms)等,后面的文档中会详细介绍。

2)标记、圆和多边形
在地图开发中常用的标记在Leaflet中添加也十分方便

var marker = L.marker([51.5, -0.09]).addTo(map);

除了标记还有圆、多边形等

var circle = L.circle([29.16175, 112.40661],
{
color: 'red',
fillColor: '#f03',
fillOpacity: 0.5,
radius: 500 // 半径
}).addTo(map); var polygon = L.polygon([
[29.22409, 113.21960],
[28.80135, 112.87902],
[28.74358, 113.543701]
]).addTo(map);


添加弹窗显示地图元素的信息是在地图开发中经常碰到的
使用popups可以很好做到

marker.bindPopup("<b>Hello world!</b><br>I am a popup.").openPopup();
circle.bindPopup("I am a circle.");
polygon.bindPopup("I am a polygon.");

bindPopup()绑定需要显示的信息 (点击元素后显示的内容)
openPopup()自动打开(不需要手动点击,直接显示)

2.4 事件

通过监听事件可以进行交互,Leaflet 中每个对象都有属于自己的事件,例如单击地图显示经纬度

var popup = L.popup();

function onMapClick(e) {
popup
.setLatLng(e.latlng)
.setContent("You clicked the map at " + e.latlng.toString())
.openOn(map);
} map.on('click', onMapClick);


以上就是【Leaflet入门篇 】基础教程的全部内容
完整代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.3/dist/leaflet.css"/>
<!-- Make sure you put this AFTER Leaflet's CSS -->
<script src="https://unpkg.com/leaflet@1.9.3/dist/leaflet.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="map" style="height: 500px; width: 500px"></div>
<script>
var map = L.map('map', {attributionControl: false}).setView([29.04656, 112.86254], 8);
// L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
// maxZoom: 19,
// attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
// }).addTo(map);
var url = "http://t0.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=xxx" // xxx (替换tk)
L.tileLayer(url, {
maxZoom: 18
}).addTo(map) var marker = L.marker([29.06097, 111.93969]).addTo(map); var circle = L.circle([29.16175, 112.40661],
{
color: 'red',
fillColor: '#f03',
fillOpacity: 0.5,
radius: 10000 // 半径 单位m
}).addTo(map); var polygon = L.polygon([
[29.22409, 113.21960],
[28.80135, 112.87902],
[28.74358, 113.543701]
]).addTo(map); marker.bindPopup("<b>Hello world!</b><br>I am a popup.").openPopup();
circle.bindPopup("I am a circle.");
polygon.bindPopup("I am a polygon."); var popup = L.popup(); function onMapClick(e) {
popup
.setLatLng(e.latlng)
.setContent("You clicked the map at " + e.latlng.toString())
.openOn(map);
} map.on('click', onMapClick);
</script>
</body>
</html>

点赞收藏加关注,收获满满不迷路
欢迎评论交流

【Leaflet入门篇】 Leaflet快速入门的更多相关文章

  1. RabbitMQ学习总结 第二篇:快速入门HelloWorld

    目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...

  2. SpringBoot基础篇-SpringBoot快速入门

    SpringBoot基础 学习目标: 能够理解Spring的优缺点 能够理解SpringBoot的特点 能够理解SpringBoot的核心功能 能够搭建SpringBoot的环境 能够完成applic ...

  3. 持久层之 MyBatis: 第一篇:快速入门

    MyBatis入门到精通 JDBC回顾 1.1.认识MyBatis 1.1.使用IDEA创建maven工程 1.2.引入mysql依赖包 1.3.准备数据 1.4 使用JDBC手写MyBatis框架 ...

  4. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  5. Hadoop学习篇1 快速入门

    Hadoop是Apache Lucene创始人Doug Cutting创建的,Hadoop起源于Apache Nutch,一个开源的网络搜索引擎.最先引起注意是2003年google的一篇论文,该论文 ...

  6. 【opencv入门篇】快速在VS上配置opencv

    环境配置:win7-32 + opencv2.4.6 + vs2013 注意:无论电脑是32位还是64位,配置opencv库目录时选择x84文件夹!因为编译都是使用32位编译:如果选用X64,则程序运 ...

  7. 第二篇 CSS快速入门

    学CSS 和 JS的路线: 1. 首先,学会怎么找到标签.只有找到标签,才能操作标签——CSS通过选择器去找标签 2. 其次,学会怎么操作标签对象. CSS概述 CSS是Cascading Style ...

  8. OpenDJ入门 | 5分钟快速入门Forgerock DS

    本教程为了让大家快速体验,故不做深入讲解,详细内容请留意后续进阶教程 介绍 OpenDJ是一个目录服务器,它实现了各种轻量级目录访问协议和相关标准,包括完全符合LDAPv3,但也支持目录服务标记语言( ...

  9. 前端组件化Polymer入门教程(3)——快速入门

    本系列主要翻译官方的教程,因为国内目前这方面的资料太少了,但也不一定和官网的一样,反正就是自己想到哪就写到哪. 如果我没有说明,默认情况下index.html始终包含这段代码,后面将不会再贴上来. & ...

  10. [Asp.net 开发系列之SignalR篇]专题一:Asp.net SignalR快速入门

    一.前言 之前半年时间感觉自己有点浮躁,导致停顿了半年多的时间没有更新博客,今天重新开始记录博文,希望自己可以找回初心,继续沉淀.由于最近做的项目中用到SignalR技术,所以打算总结下Asp.net ...

随机推荐

  1. 再解 [NOI2017] 整数

    提供一个来自 CF 大佬 adament 的有趣思路. 首先我们知道的是一个只增加的 \(b\) 进制整数计数器,如果 \(b\) 是常数那么复杂度是均摊 \(O(1)\) 的.证明只需要考虑将 \( ...

  2. 2022-10-26:以下go语言代码输出什么?A:1 3 2;B:1 2 3;C:3 1 2;D:3 2 1。 package main import “fmt“ type temp struc

    2022-10-26:以下go语言代码输出什么?A:1 3 2:B:1 2 3:C:3 1 2:D:3 2 1. package main import "fmt" type te ...

  3. 都说 C++ 没有 GC,RAII: 那么我算个啥?(赠书福利)

    *以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/7A9-tGZxf4w_7eZl3OUQ4A 学过 Java.C# ...

  4. 【GiraKoo】Git工具使用指南

    Git工具使用指南 Git是一个分布式版本控制工具,可以用于管理代码.本文介绍了如何使用git工具. 1. SVN和Git的区别 1.1 SVN SVN是集中式版本控制工具,所有的代码都存储在一个中央 ...

  5. 深入浅出 OkHttp 源码解析及应用实践

    作者:vivo 互联网服务器团队- Tie Qinrui OkHttp 在 Java 和 Android 世界中被广泛使用,深入学习源代码有助于掌握软件特性和提高编程水平. 本文首先从源代码入手简要分 ...

  6. vue3实现H5网页录音并上传(mp3、wav)兼容Android、iOS和PC端

    使用 Recorder插件 可以在HTML5网页中进行录音,录音完成后得到blob文件对象,然后将blob上传到服务器:项目使用的vue3.0版本(这个插件同时支持vue2.0.也支持uniapp,很 ...

  7. DosBox环境配置

    DosBox环境配置 DOSBox 是一个基于 x86 架构的 PC 的模拟器,它允许用户在现代操作系统上运行 DOS 程序.DOSBox 是自由软件,可以在 Windows.Linux ,macOS ...

  8. 使用Mybatis生成树形菜单-适用于各种树形场景

    开发中我们难免会遇到各种树形结构展示的场景.比如用户登录系统后菜单的展示,某些大型购物网站商品的分类展示等等,反正开发中会遇到各种树形展示的功能,这些功能大概处理的思路都是一样的,所以本文就总结一下树 ...

  9. Spark SQL 及其DataFrame的基本操作

    1.Spark SQL出现的 原因是什么? Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个叫作Data Frame的编程抽象结构数据模型(即带有Schema信息的RDD),S ...

  10. Solon 成为信通院可信开源社区、可信开源项目

    自2021年9月17日成立以来,可信开源社区共同体共有五批新成员加入.在4月21日"OSCAR开源生态建设论坛"上,可信开源社区共同体又迎来2位正式成员和6位预备成员,Solon ...