【leaflet】学习笔记1-4

news2024/12/23 13:28:20

▒ 目录 ▒

    • 🛫 导读
      • 开发环境
    • 1️⃣ 改造greengis的leaflet
      • insCode
      • inline-module
      • 服务器live-server
    • 2️⃣ d1. 初见:Map、TileLayer
      • 说明/流程
      • 关键代码
    • 3️⃣ d2. 多地图切换:Control.Layers
      • 说明/流程
      • 关键代码
    • 4️⃣ d3. 标记:Marker、Icon
      • 说明/流程
      • 关键代码
    • 5️⃣ d4. GeoJson数据导入:GeoJSON
      • 说明/流程
      • 关键代码
    • 🛬 文章小结
    • 📖 参考资料

🛫 导读

本系列教程参考自greengis,做个学习笔记。
代码部署在insCode,可以直接查看,文章作品主页: https://inscode.csdn.net/@kinghzking/MyOpen
最终效果图:
在这里插入图片描述

开发环境

版本号描述
文章日期2023-11-16
操作系统Win10 - 22H219045.3570
leaflet1.9.4
git地址https://gitcode.net/kinghzking/MyOpen.git

1️⃣ 改造greengis的leaflet

找了很久,发现这么个教程,很适合入门学习,记录一下,以下是相关资料:

  • greengis分享的代码地址: https://stackblitz.com/edit/leaflet-d1?file=index.js
  • greengis B站主页: https://space.bilibili.com/520898392

insCode

greengis使用的是stackblitz.com网站做的演示,网站隐藏了很多细节。
insCode.csdn.net更贴近真实的开发环境,这里选择该平台作为在线编辑工具。

inline-module

greengis使用的webpack打包,操作会麻烦一些,
小编使用inline-module重写了greengis的代码,该库可以直接使用import,保证了代码的兼容性(虽然性能有影响)。
关于inline-module的使用,还是比较简单的,这里只说明几点:

  • leaflet使用的是esm版本的,否则无法通过import引入
  • inline-module使用本地的,服务器版本会比较慢

服务器live-server

为了让insCode能正常运行,这里使用的是live-server启动软件,命令行只需要指定一个目录即可(./leaflet),该目录下有个导航页,将所有页面串联起来了。
在这里插入图片描述

2️⃣ d1. 初见:Map、TileLayer

说明/流程

leaflet的使用算是很简单的了,按照下面模板,就可以快速引入一个地图。

  1. 引入使用到的leaflet类
  2. 创建一个map对象
  3. 创建一个地图图层TileLayer
  4. 图层加入到地图map中
  5. 设置地图中心点坐标(北京),缩放级别10

关键代码


// 0. 引入使用到的leaflet类
import { Map, TileLayer, LayerGroup, Control, Marker, Icon, GeoJSON } from '../lib/leaflet/leaflet-src.esm.js';

// 1. 创建一个map对象
//    参数为html元素的id: <div id="map"></div>
const map = new Map('map');

// 2. 创建一个地图图层TileLayer
//    参数为一个url模板,一般包含xyz
//    有时候模板中包含subdomains,表示地图有多个子url(对应模板参数{s})
const layer = new TileLayer(
  'http://wprd0{s}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7',
  {
    subdomains: '1234'
  }
);

// 3. 图层加入到地图map中
layer.addTo(map);

// 4. 设置地图中心点坐标(北京),缩放级别10
map.setView([39.909186, 116.397411], 10);


3️⃣ d2. 多地图切换:Control.Layers

说明/流程

leaflet原生支持的控件层Control.Layers,该控件支持多个地图切换。
使用方法为:

  1. 创建多个图层 amapLayer 和 tdtLayer
    • 其中tdtLayer为LayerGroup,包含两个图层tdtVectorLayer、tdtLabelLayer
  2. 显示一个图层:tdtLayer.addTo(map);
  3. 创建一个控制层:Control.Layers
  4. 将控制层加入到地图map中

关键代码

// 0. 引入使用到的leaflet类
import { Map, TileLayer, LayerGroup, Control, Marker, Icon, GeoJSON } from '../lib/leaflet/leaflet-src.esm.js';

// 1. 创建一个map对象
//    参数为html元素的id: <div id="map"></div>
const map = new Map('map');

// 2. 创建一个地图图层TileLayer
//    参数为一个url模板,一般包含xyz
//    有时候模板中包含subdomains,表示地图有多个子url(对应模板参数{s})
const amapLayer = new TileLayer(
  'http://wprd0{s}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7',
  {
    subdomains: '1234'
  }
);

// 2.1 再创建一个地图图层tdtVectorLayer
const tdtVectorLayer = new TileLayer(
  'http://t0.tianditu.gov.cn/vec_w/wmts?layer=vec&style=default&tilematrixset=w&Service=WMTS&Request=GetTile&Version=1.0.0&Format=tiles&TileMatrix={z}&TileCol={x}&TileRow={y}&tk=11b55a09c9e0df4a1e91741b455b7f28',
  {}
);

const tdtLabelLayer = new TileLayer(
  'http://t0.tianditu.gov.cn/cva_w/wmts?layer=cva&style=default&tilematrixset=w&Service=WMTS&Request=GetTile&Version=1.0.0&Format=tiles&TileMatrix={z}&TileCol={x}&TileRow={y}&tk=11b55a09c9e0df4a1e91741b455b7f28',
  {}
);

const tdtLayer = new LayerGroup([tdtVectorLayer, tdtLabelLayer]);

// 3. 图层加入到地图map中(显示一个图层)
tdtLayer.addTo(map);

// 4. 设置地图中心点坐标(北京),缩放级别10
map.setView([39.909186, 116.397411], 10);

// 5. 添加一个控制层
const layerControl = new Control.Layers(
  {
    高德: amapLayer,
    天地图: tdtLayer
  },
  {},
  { collapsed: false }
);
// 6.  将控制层加入到地图map中
layerControl.addTo(map);

4️⃣ d3. 标记:Marker、Icon

说明/流程

leaflet的使用算是很简单的了,按照下面模板,就可以快速引入一个地图。

  1. 创建一个icon,本示例以data:image/svg+xml,形式存在
  2. 创建一个Marker对象
  3. 将点添加(显示)到map中
    在这里插入图片描述

关键代码

// d3.1 创建一个icon,本示例以`data:image/svg+xml,`形式存在
const svg = '<svg t="1621166776642" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1407" width="200" height="200"><path d="M512 85.333333c-164.949333 0-298.666667 133.738667-298.666667 298.666667 0 164.949333 298.666667 554.666667 298.666667 554.666667s298.666667-389.717333 298.666667-554.666667c0-164.928-133.717333-298.666667-298.666667-298.666667z m0 448a149.333333 149.333333 0 1 1 0-298.666666 149.333333 149.333333 0 0 1 0 298.666666z" fill="#FF3D00" p-id="1408"></path></svg>';
let iconUrl = 'data:image/svg+xml,' + encodeURIComponent(svg)

// d3.2 创建一个Marker对象
//    坐标
//    icon对象(url、大小、锚点坐标)
const marker = new Marker([39.909186, 116.397411], {
  icon: new Icon({
    iconUrl: iconUrl,
    iconSize: [32,32],
    iconAnchor: [16,32]
  })
});

// d3.3 将点添加(显示)到map中
marker.addTo(map);

5️⃣ d4. GeoJson数据导入:GeoJSON

GeoJSON 是一种用于存储地理空间数据的格式。
它定义了一种用于描述地理对象(例如点、线和多边形)的 JSON 格式。
GeoJSON 用于地理信息系统 (GIS) 应用程序,支持在 Web 应用程序和移动应用程序中加载、存储和可视化地理数据。

说明/流程

Leaflet 支持加载 GeoJSON 数据,并将其渲染为地图上的图层。
要在 Leaflet 中加载 GeoJSON 数据,可以使用 Leaflet 的 geoJSON 瓦片层。您可以将 GeoJSON 数据作为 JSON 文件或字符串传递给该层,它将自动解析并渲染为地图上的图层

  1. 引入一个 GeoJSON 数据
  2. 根据data创建 GeoJSON 对象,该对象对应leaflet中的一个图层
  3. 将GeoJSON 对象添加到地图中
    在这里插入图片描述

关键代码

// d4.1 引入一个 GeoJSON 数据
const data = {
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "NAME": "西北五环"
      },
      "geometry": {
        "type": "Point",
        "coordinates": [
          116.22196197509766,
          39.99527080014614
        ]
      }
    },
    {
      "type": "Feature",
      "properties": {
        "NAME": "东五环"
      },
      "geometry": {
        "type": "Point",
        "coordinates": [
          116.53816223144531,
          39.9034155951341
        ]
      }
    },
    {
      "type": "Feature",
      "properties": {
        "NAME": "南五环"
      },
      "geometry": {
        "type": "Point",
        "coordinates": [
          116.40151977539062,
          39.7631584037253
        ]
      }
    }
  ]
};

// d4.2 根据data创建 GeoJSON 对象,该对象对应leaflet中的一个图层
const glayer = new GeoJSON(data, {
  pointToLayer: (geoJsonPoint, latlng) => {
    return new Marker(latlng, {
      icon: new Icon({
        iconUrl: iconUrl,
        iconSize: [32, 32],
        iconAnchor: [16, 32]
      })
    });
  }
});

// d4.3 将GeoJSON 对象添加到地图中
glayer.addTo(map);

🛬 文章小结

  • 加强基础知识:GIS是一个比较专业化的技术,需要有一定的基础知识,可以参考greengis的视频教程。
  • 注意leaflet版本:leaflet不同版本接口会有不小的调整,使用时,注意版本,并查看官网文档。
  • 百炼成神:练就完了,多加练习,不断思考。很多知识点都有固定写法,抄就完了。

📖 参考资料

  • greengis分享的代码地址: https://stackblitz.com/edit/leaflet-d1?file=index.js
  • greengis B站主页: https://space.bilibili.com/520898392
  • 文章作品主页: https://inscode.csdn.net/@kinghzking/MyOpen
  • 文章源码git地址:https://gitcode.net/kinghzking/MyOpen.git
  • 【leaflet】1. 初见 https://blog.csdn.net/kinghzking/article/details/134310461

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

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

相关文章

【Proteus仿真】【51单片机】锂电池管理系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用LCD1602显示模块、DS18B20温度传感器、PCF8691 ADC模块、按键、LED蜂鸣器模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示温度…

Git-概念与架构

GIT-概念与架构 一、背景和起源二、版本控制系统1.版本控制分类1.1 集中式版本控制1.2 分布式版本控制 2.Git和SVN对比2.1 SVN2.2 GIT 三、GIT框架1.工作区&#xff08;working directory&#xff09;2.暂存区&#xff08;staging area&#xff09;3.本地仓库&#xff08;local…

算法笔记-第五章-大整数运算

算法笔记-第五章-大整数运算 大整数运算大整数比较大整数加法大整数减法大整数乘法大整数乘法2大整数除法 大整数运算 一&#xff1a;使用数组存储整数的时候&#xff0c;整数的高位存储在数组的高位&#xff0c;整数的低位存储 在数组的低位 二&#xff1a;把整数按照字符串读…

除了chatGPT网站外,国内有些可以使用的AI网站 文心一言 讯飞星火 豆包 通义千问 人工智能网站 AI网站

2023年随着人工智能技术的不断发展&#xff0c;AI网站如ChatGPT等越来越受到人们的关注。这些网站具有多种作用&#xff0c;可以帮助人们更方便地获取信息、解决问题&#xff0c;甚至进行创作。 首先&#xff0c;AI网站可以提供智能问答服务。与传统的搜索引擎相比&#xff0c…

DAC实验(DAC 输出三角波实验)(DAC 输出正弦波实验)

DAC 输出三角波实验 本实验我们来学习使用如何让 DAC 输出三角波&#xff0c;DAC 初始化部分还是用 DAC 输出实验 的&#xff0c;所以做本实验的前提是先学习 DAC 输出实验。 使用 DAC 输出三角波&#xff0c;通过 KEY0/KEY1 两个按键&#xff0c;控制 DAC1 的通道 1 输出两种…

Educational Codeforces Round 20 A-E

文章目录 A. Maximal Binary MatrixB. Distances to ZeroC. Maximal GCDD. Magazine AdE. Roma and Poker A. Maximal Binary Matrix 思路&#xff1a;一道很有意思的构造&#xff0c;我们可以发现&#xff0c;按照下述&#xff0c;从外到内进行一层一层的构造一定是最优的。 …

计算机网络———ipv6简解

文章目录 1.前言&#xff1a;2. ipv6简单分析&#xff1a;2.1.地址长度对比2.2. ipv6包头分析2.3. ipv6地址的压缩表示&#xff1a;2.3. NDP&#xff1a;2.4. ipv6地址动态分配&#xff1a; 1.前言&#xff1a; 因特网地址分配组织)宣布将其最2011年2月3日&#xff0c;IANA (In…

LeetCode(25)验证回文串【双指针】【简单】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 验证回文串 1.题目 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&…

Django 配置 Email Admin 详细指南

概要 Django 是一个高级的 Python Web 框架&#xff0c;它鼓励快速开发和清洁、实用的设计。当你正在开发一个 Django 项目时&#xff0c;监控网站的运行情况是非常必要的。Django 提供了一个功能强大的 admin 界面&#xff0c;但同时也可以通过配置 email admin 来获取网站的…

how to find gcc openbug

https://gcc.gnu.org/bugzilla/query.cgi?formatadvanced

决策树,sql考题,30个经典sql题目

大数据&#xff1a; 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle&#xff0c;尤其sql要学&#x…

C++初阶 | [三] 类和对象(中)

摘要&#xff1a;类的6个默认成员函数&#xff0c;日期类 如果一个类中什么成员都没有&#xff0c;简称为空类。然而&#xff0c;空类并不是什么成员都没有&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成6个默认成员函数。默认成员函数&#xff1a;用户没有显式…

【云原生-Kurbernetes篇】K8s的存储卷/数据卷+PV与PVC

这是一个目录标题 一、Kurbernetes中的存储卷1.1 为什么需要存储卷&#xff1f;1.2 存储卷概述1.2.1 简介1.2.2 volume字段 1.3 常用的存储卷类型1.3.1 emptyDir&#xff08;临时存储卷&#xff09;1.3.2 hostPath&#xff08;节点存储卷&#xff09;1.3.3 nfs1.3.4 cephfs 二、…

为React Ant-Design Table增加字段设置 | 京东云技术团队

最近做的几个项目经常遇到这样的需求&#xff0c;要在表格上增加一个自定义表格字段设置的功能。就是用户可以自己控制那些列需要展示。 在几个项目里都实现了一遍&#xff0c;每个项目的需求又都有点儿不一样&#xff0c;迭代了很多版&#xff0c;所以抽时间把这个功能封装了…

用script去做前端html表格分页/排序

前言: 掘弃掉与后端交互做分页和互导,有利有弊吧; 在小数据的时候,如果不停来回朝服务端发送请求,会造成堵塞.于是,放弃了之前的前后端ajax方式去请求分页表格,使用script去弄一个,降低服务器的压力; 整体思路图: 代码构造: {% extends "order_header_same.html" …

​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第9章 软件可靠性基础知识&#xff08;P320~344&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图

什么是美国服务器,有哪些优势,适用于什么场景?

​  在互联网发展的过程中&#xff0c;服务器扮演着至关重要的角色。而美国作为全球信息技术的中心&#xff0c;其服务器在全球范围内受到广泛关注。  美国服务器是指在美国本土机房搭建并运行的服务器。其拥有带宽大、优质硬件、售后运维好、位置优越、数据安全性高以及免备…

C/C++输出整数部分 2021年12月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C输出整数部分 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C输出整数部分 2021年12月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 输入一个双精度浮点数f&#xff0c; 输出其整…

MapApp 地图应用

1. 简述 1.1 重点 1&#xff09;更好地理解 MVVM 架构 2&#xff09;更轻松地使用 SwiftUI 框架、对齐、动画和转换 1.2 资源下载地址: Swiftful-Thinking:https://www.swiftful-thinking.com/downloads 1.3 项目结构图: 1.4 图片、颜色资源文件图: 1.5 启动图片配置图: 2. Mo…

腾讯云服务器多少钱一年?腾讯云服务器88元一年,附优惠购买入口

腾讯云服务器可以以低至88元一年的价格购买&#xff01;这个价格可以说是非常实惠。现在&#xff0c;让我们一起来了解腾讯云服务器的价格以及如何购买优惠的服务器。 如何购买88元一年的腾讯云服务器&#xff1f; 购买腾讯云服务器非常简单&#xff0c;只需按照以下步骤&…