【leaflet】1. 初见

news2024/12/24 21:29:13

▒ 目录 ▒

    • 🛫 导读
      • 需求
      • 开发环境
    • 1️⃣ 概念
      • 概念解释
      • 特点
    • 2️⃣ 学习路线图
    • 3️⃣ html示例
    • 🛬 文章小结
    • 📖 参考资料

🛫 导读

需求

要做游戏地图了,看到大量产品都使用的leaflet,所以开始学习这个。

开发环境

版本号描述
文章日期2023-11-09
操作系统Win10 - 22H219045.3570
leaflet1.9.4

1️⃣ 概念

leaflet 是一个开源的 JavaScript 库,用于创建交互式的地图应用程序。
它提供了一系列的工具和类,用于实现地图的基本功能,如添加瓦片图层、绘制标记和路径等。

概念解释

下面是leaflet 中的一些概念解释:

  1. 地图(Map):leaflet 中的地图是指一个 2D 空间的表示,可以包含多个图层
    每一个图层代表一种类型的地理信息,如地形、街道、行政区划等。
    地图可以显示在网页上,用户可以通过缩放、平移和旋转等操作来查看地图内容。
  2. 图层(Layer):leaflet 中的图层是指一个地理信息的显示层
    每一个图层都有一个对应的Layer类,该类负责处理图层的添加、删除、缩放等操作。
    leaflet 支持多种类型的图层,如
    • 矢量图层(VectorLayer)
    • 栅格图层(GridLayer)
    • 热力图:支持在地图上显示热力图效果,用于表示某个地区的人气、访问量等数据。
    • 聚类图:支持在地图上显示聚类图效果,用于表示某个地区的人口密度、分布情况等数据。
    • 地形图层(TerrainLayer)等。
  3. 标记(Marker):leaflet 中的标记是指在地图上显示的一个标记点。
    每一个标记都是一个Marker类的实例,该类负责处理标记的添加、删除、缩放等操作。
    标记可以表示一个特定的地理位置,通常用于显示地图上的兴趣点等信息
  4. 路径(Polyline):leaflet 中的路径是指在地图上绘制的一条连续的线条
    每一个路径都是一个Polyline类的实例,该类负责处理路径的添加、删除、缩放等操作。
    路径通常用于表示地图上的道路、河流、边界等信息。
  5. 事件(Event):leaflet 中的事件是指在地图上发生的一些交互操作
    例如,当用户点击地图、缩放地图、移动地图等操作时,都会触发相应的事件。
    leaflet 提供了丰富的事件处理机制,开发人员可以通过监听这些事件来响应用户的交互操作。

特点

总体来说,leaflet 是一款非常优秀的 WebGIS 库,适用于需要在移动端或 Web 平台上展示地理信息的应用。

  1. 易用性:leaflet 使用简单,不需要任何特殊的依赖,支持轻量级的 API,容易上手。
  2. 移动端兼容性:leaflet 在移动端设备上也能很好地兼容,并且支持响应式设计,自适应不同的屏幕大小。
  3. 强大的功能:leaflet 支持多图层、标记、路径、热点等多种地理信息的展示,同时还支持多边形、圆形等几何图形的绘制。
  4. 支持多种地图数据源:leaflet 支持加载多种常见的地图数据源,如 OpenStreetMap、Google Maps、ESRI basemaps 等,可以根据需求自由选择。
  5. 可扩展性:leaflet 提供了丰富的插件生态,允许开发者自定义功能,例如添加仪表盘、进度条等。
  6. 可交互性:拖拽、放大缩小、跳到指定位置、键盘控制、事件、标记拖动。
  7. 视觉特效:缩放动效、

2️⃣ 学习路线图

  1. 官方网站开始,该网站为图书馆提供了全面的指南和参考文档。
  2. 熟悉 Web 开发的基础知识,包括 HTML、CSS 和 JavaScript,因为它们对于使用 Leaflet 创建交互式地图至关重要。
  3. 通过从官方网站下载库或使用 npm 或 yarn 等包管理器来安装 Leaflet。
  4. 探索 Leaflet API 并学习如何使用其各种功能,例如创建地图、添加标记和弹出窗口、显示图块和图层以及处理用户交互。
  5. 通过构建简单的项目来练习,例如您家乡的地图或您最喜欢的地方的地图,随着您对 Leaflet 的熟悉程度越来越高,逐渐增加项目的复杂性。
  6. 通过参与在线论坛加入传单社区,获取更多资讯。

3️⃣ html示例

面对这么强大的leaflet,我们这就来实战一下,先看看简单的效果:
在这里插入图片描述

  1. 加载 leaflet 库:在你的 HTML 文件中,使用 script 和 link 标签加载 leaflet 库。

    <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
    <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
    
  2. 创建地图容器:在你的 HTML 文件中创建一个地图容器,并设置其 id 为"map"。

    <div id="map"></div>
    
  3. 创建 leaflet 地图实例:使用 leaflet 库创建一个地图实例,并将其绑定到地图容器。

         var map = new L.Map('map', {
           center: new L.LatLng(39.86,116.45),
           zoom: 4
         });
    
  4. 加载底图:使用 leaflet 的tileLayer类加载底图。你可以使用 leaflet 提供的在线底图服务,如 mapbox,OpenStreetMap 等,或者加载本地的瓦片地图。

     L.tileLayer('http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png', {
        attribution: '夜猫逐梦 @CartoDB Positron>',
        maxZoom: 18
     }).addTo(map);
    
  5. 添加路线:使用 leaflet 的Polyline类在地图上添加路线。你需要提供路线的起点和终点坐标,以及路线的样式。

    var polyline = L.polyline([[51.505, -0.12], [51.515, -0.125]], {
       color: 'red',
       weight: 3
    }).addTo(map);
    
  6. 增加标记及popup。

    var bj = L.marker([39.92,116.46]).bindPopup('这里是北京');
    var sh = L.marker([31.213,121.445]).bindPopup('这里是上海');
    var gz = L.marker([23.16,113.23]).bindPopup('这里是广州');
    var cities = L.layerGroup([bj, sh, gz]).addTo(map);
    

完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
  <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
  <title>Document</title>
  <style>
      html, body, #map { height: 100%; }
  </style>
</head>
<body>
  <div id="map"></div>
  <script>
    var map = new L.Map('map', {
            center: new L.LatLng(39.86,116.45),
            zoom: 4
        });
    L.tileLayer('http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png', {
      attribution: '夜猫逐梦 @CartoDB Positron',
      maxZoom: 18
    }).addTo(map);
    var polyline = L.polyline([[39.92,116.46], [31.213,121.445]], {
        color: 'red',
        weight: 3
    }).addTo(map);

    var bj = L.marker([39.92,116.46]).bindPopup('这里是北京');
    var sh = L.marker([31.213,121.445]).bindPopup('这里是上海');
    var gz = L.marker([23.16,113.23]).bindPopup('这里是广州');
    var cities = L.layerGroup([bj, sh, gz]).addTo(map);
  </script>
</body>
</html>

🛬 文章小结

总体来说,leaflet 是一款非常优秀的 WebGIS 库,适用于需要在移动端或 Web 平台上展示地理信息的应用。
本节对其做简单的介绍和使用演示。

其中使用leaflet需要注意以下几点:

  • 必须引入leaflet.css,否则贴片会出现乱序的情况。
  • 网上很多地图地址都无法访问,这里使用http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png,虽然慢了点,但是能用。
  • leaflet版本使用的是1.9.4,每个版本的接口可能不一样,出错了就看下控制台。

以后会不断写一些示例功能,或者翻译官网有用的文章。

📖 参考资料

  • leaflet官网:https://leafletjs.com/index.html
  • 官网例子: https://leafletjs.com/examples
  • api文档:https://leafletjs.com/reference.html
  • Leaflet源码解析–TileLayer(某不错的网站): https://www.giserdqy.com/secdev/leaflet/19903/

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

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

相关文章

IP可视对讲实时录制系统

介绍 软件架构 技术支持 CallRecored介绍 IP可视对讲实时录制系统设计了数据库表&#xff0c;并完成了数据库建模&#xff0c;采用了视频编解码技术&#xff0c;高效网络传输&#xff0c;磁盘高效读写技术&#xff0c;以及提供开放接口。 系统客户端采用扁平化UI&#xff0c;…

说说对高阶组件的理解?应用场景?

一、是什么 高阶函数&#xff08;Higher-order function&#xff09;&#xff0c;至少满足下列一个条件的函数 接受一个或多个函数作为输入输出一个函数 在React中&#xff0c;高阶组件即接受一个或多个组件作为参数并且返回一个组件&#xff0c;本质也就是一个函数&#xf…

【c趣编程】输入一个整数,判断其有几位

目录 1题目要求&#xff1a; 2解题思路&#xff1a; 3代码如下所示&#xff1a; 4运行代码如下&#xff1a; 5总结&#xff1a; 1题目要求&#xff1a; 只用一个scanf输出一串数&#xff0c;不可以一个一个的输入并计数&#xff0c;那样太浪费时间了。 C语言是一门面向过…

RabbitMQ 系列教程

一、RabbitMQ 部署及配置详解(集群部署) 二、RabbitMQ 部署及配置详解 (单机) 三、RabbitMQ 详解及实例&#xff08;含错误信息处理&#xff09; 四、RabbitMq死信队列及其处理方案 五、RabbitMQ Java开发教程—官方原版 六、RabbitMQ Java开发教程&#xff08;二&#x…

2022年03月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 关于函数,以下选项中描述错误的是? A:函数能完成特定的功能,对函数的使用不需要了解函数内部实现原理,只要了解函数的输入输出方式即可。 B:使用函数的主要目的是减低编程难度和…

利用mybatis-plus的分页插件在xml文件中联表查询实现分页(MySQL数据库)

文章目录 准备工作Mybatis-Plus分页插件配置进行分页测试domain层Controller层Service层ServiceImplMapper层分页接口测试带其他条件的分页查询 自定义的 mapper#method&#xff08;xml文件中&#xff09; 使用分页domain层Controller层Service层ServiceImplMapper层UserMapper…

机器视觉目标检测 - opencv 深度学习 计算机竞赛

文章目录 0 前言2 目标检测概念3 目标分类、定位、检测示例4 传统目标检测5 两类目标检测算法5.1 相关研究5.1.1 选择性搜索5.1.2 OverFeat 5.2 基于区域提名的方法5.2.1 R-CNN5.2.2 SPP-net5.2.3 Fast R-CNN 5.3 端到端的方法YOLOSSD 6 人体检测结果7 最后 0 前言 &#x1f5…

【Python大数据笔记_day05_Hive基础操作】

一.SQL,Hive和MapReduce的关系 用户在hive上编写sql语句,hive把sql语句转化为MapReduce程序去执行 二.Hive架构映射流程 用户接口: 包括CLI、JDBC/ODBC、WebGUI&#xff0c;CLI(command line interface&#xff09;为shell命令行&#xff1b;Hive中的Thrift服务器允许外部客户端…

UPLOAD-LABS1

less1 (js验证) 我们上传PHP的发现不可以&#xff0c;只能是jpg&#xff0c;png&#xff0c;gif&#xff08;白名单限制了&#xff09; 我们可以直接去修改限制 在查看器中看到使用了onsubmit这个函数&#xff0c;触发了鼠标的单击事件&#xff0c;在表单提交后马上调用了re…

Ajax请求中的跨域问题及其解决方案

跨域问题 跨域是指从一个域名的网页去请求另一个域名的资源, 比如当前在百度页面(https://baidu.com)去请求京东服务器(https://www.jd.com)的资源 传统请求不会跨域 在a站点可以通过超链接或者form表单提交或者window.location.href的方式跨域访问b站点的资源(静态或者动态)…

35岁危机来临前,程序员如何未雨绸缪?

程序员逼近35岁”高龄“&#xff0c;救命。。。 &#xff08;目瞪口呆)什么&#xff1f; 程序员而立之年&#xff0c;为未来担忧&#xff1f;&#xff08;双手抱头不敢置信&#xff09; 不可能&#xff01;他们明明那么努力、那么辛苦了&#xff01;&#xff01;&#xff01;&a…

用趋动云GPU部署自己的Stable Diffusion

注&#xff1a;本文内容来自于对DataWhale的开源学习项目——免费GPU线上跑AI项目实践的学习&#xff0c;参见&#xff1a;Docs&#xff0c;引用了多处DataWhale给出的教程。 1.创建项目 1&#xff09;进入趋动云用户工作台&#xff0c;在当前空间处选择注册时系统自动生成的…

debian/ubuntu/windows配置wiregurad内网服务器(包含掉线自启动)

文章目录 前言一、服务器配置安装wireguard软件生成私钥公钥配置服务器参数配置服务器sysctl参数启动、停止服务端 二、用户端配置安装wireguard软件生成私钥公钥配置客户端参数启动、停止客户端配置服务开机启动 三、服务器添加、删除客户四、配置掉线自启动配置掉线自启动脚本…

基于轻量级卷积神经网络CNN开发构建打架斗殴识别分析系统

在很多公共场合中&#xff0c;因为一些不可控因素导致最终爆发打架斗殴或者大规则冲突事件的案例层出不穷&#xff0c;基于视频监控等技术手段智能自动化地识别出已有或者潜在的危险行为对于维护公共场合的安全稳定有着重要的意义。本文的核心目的就是想要基于CNN模型来尝试开发…

MySQL中的多列子查询

-- 多列子查询 -- 如何查询与WOARD 的部门和岗位完全相同的所有雇员(并且不含smith本人) -- (字段1&#xff0c;字段2...) (select 字段1&#xff0c;字段2 from ...) -- 分析&#xff1a; 1. 得到smith的部门和岗位 SELECT deptno,job FROM empWHERE ename WARD; -- 2.使…

字符编码转换时发生内存越界引发的摄像头切换失败问题的排查

目录 1、问题说明 2、初步分析 3、字符串字符编码说明 4、进一步分析 5、为啥在日常测试时没有遇到切换摄像头失败的问题呢&#xff1f; 6、华为MateBook笔记本使用高通的CPU 7、最后 VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更…

电脑msvcp110.dll丢失怎么办,msvcp110.dll缺失的详细修复步骤

在现代科技发展的时代&#xff0c;电脑已经成为我们生活和工作中不可或缺的工具。然而&#xff0c;由于各种原因&#xff0c;电脑可能会出现一些问题&#xff0c;其中之一就是msvcp110.dll文件丢失。这个问题可能会导致一些应用程序无法正常运行&#xff0c;给我们的生活和工作…

[直播自学]-[汇川easy320]搞起来(3)看文档安装软件 查找设备

2023.11.09 20&#xff1a;04 按照文档 解压压缩包得到&#xff1a; 打开 里面有一条值得注意&#xff1a; 想把软件安装到C盘&#xff0c;但是C盘没什么空间了&#xff0c;把C盘清理清理。 20&#xff1a;35 安装很快完成&#xff0c;然后阅读 由于PLC是新的&#xff0c…

【MATLAB源码-第70期】基于matlab的萤火虫算法(FA)的栅格路径规划,输出最短路径和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 萤火虫算法&#xff08;Firefly Algorithm&#xff0c;FA&#xff09;是由剑桥大学的Xin-She Yang在2008年提出的一种元启发式优化算法。该算法的灵感来源于萤火虫闪烁的行为特征&#xff0c;主要用于解决连续的优化问题。萤…