Leaflet介绍及使用示例

一、Leaflet介绍

Leaflet是一个开源的JavaScript库,专门用于构建交互式的地图应用程序。它以其轻量级、高性能和易于使用的API而著称,方便开发者在网页中集成地图功能。Leaflet支持多种地图提供商的瓦片图层,如OpenStreetMap、Mapbox等,并允许用户自定义地图样式和交互功能。此外,Leaflet还提供了丰富的向量图层类型,如点、线、多边形等,以及标记和弹出窗口等功能,使得开发者能够轻松地在地图上展示和操作地理数据。

二、Leaflet使用示例

1. 引入Leaflet库

import 'leaflet/dist/leaflet.css'
import * as L from 'leaflet'
import './eaflet.tilelayer.wmts.min'
import leafletMapUtil from '@/utils/leafletMap.js' --- 封装的地图工具方法

2. 创建地图容器

在HTML文件中添加一个具有特定id的div元素,用于展示地图:

<template>
    <div id="leaflet" class="map-container"></div>
</template>

3. 初始化地图

使用JavaScript代码初始化Leaflet地图对象,并设置地图容器、初始中心坐标和缩放级别:

 this.mapInstance = L.map(id, {
      minZoom: options.minZoom || 1,
      maxZoom: options.maxZoom || 20,
      center: options.center || center,
      zoom: options.zoom || zoom,
      zoomControl: options.zoomControl || false,
      attributionControl: false,
    })

4. 添加瓦片图层

使用Leaflet提供的L.tileLayer()方法创建一个瓦片图层对象,并将其添加到地图上:

/**
   * 添加图层
   * @param layerUrl 地图图层url
   * @param layerOption 图层配置项(zIndex, opacity等)
   * @param layerName 图层名称
   * @param layerType 图层类型 wmts或其他,发布的图层使用wmts
   */
  addLayer(layerUrl, layerName = '', layerOption = {}, layerType = '') {
    let layer = null
    if (layerType === 'WMTS') {
      layer = L.tileLayer.wmts(layerUrl, {
        tileMatrixSet: 'GoogleMapsCompatible_' + layerName,
        format: 'image/png',
        layer: layerName,
        ...layerOption,
      })
    } else {
      layer = L.tileLayer(layerUrl, layerOption)
    }

    layer.addTo(this.mapInstance)

    if (layerName) {
      this.layers[layerName] = layer
    }
    return layer
  },

5. 绘制标记

使用Leaflet的L.marker()方法创建一个标记对象,然后将标记对象添加到地图上:

/**
   * 添加地图marker
   * @param lat
   * @param lng
   * @param icon
   * @param props
   * @param groupName
   * @param iconType
   * @returns {*|boolean}
   */
  addMarker(lat, lng, icon, props = {}, iconType = 'icon') {
    let icon_marker = null
    if (iconType === 'icon') {
      icon_marker = L.divIcon({
        iconSize: props.iconSize || [32, 38],
        className: 'icon_marker',
        html: `<img src="${icon}" style="width: 100%;height: 100%;"/>`,
      })
    } else if (iconType === 'html') {
      let defaultHtml = {
        className: 'icon_marker',
        html: '',
        iconSize: [20, 20],
      }
      if (typeof icon === 'object') {
        defaultHtml = { ...defaultHtml, ...icon }
        icon_marker = L.divIcon(defaultHtml)
      } else if (typeof icon === 'string') {
        defaultHtml.html = icon
        icon_marker = L.divIcon(defaultHtml)
      }
    }
    if (!icon_marker) {
      return
    }
    if (lat && lng) {
      const marker = L.marker([lat, lng], { icon: icon_marker, ...props })
      marker.addTo(this.mapInstance).on("click", (e) => {
        EventBus.$emit('triggerMarkerClick', e)
      });
      return marker
    } else {
      return null
    }
  },

6. 清除图层

使用Leaflet的L.marker()方法创建一个标记对象,然后将标记对象添加到地图上:

  /**
   * 删除图层
   * @param layerName
   */
  removeLayer(layerName) {
    const layer = this.layers[layerName]
    if (layer) this.mapInstance.removeLayer(layer)
  },

7. 清除标记

使用Leaflet的L.marker()方法创建一个标记对象,然后将标记对象添加到地图上:

 /**
   * 删除marker
   * @param marker
   */
  removeMarker(marker) {
    if (marker) {
      marker.remove()
    }
  },

  /**
   * 删除markers markerlist或者markerGroupName
   * @param markers
   */
  removeMarkers(markers) {
    if (typeof markers === 'string') {
      if (this.markers[markers]) {
        this.markers[markers].forEach((marker) => {
          this.removeMarker(marker)
        })
      }
    } else {
      markers.forEach((marker) => {
        this.removeMarker(marker)
      })
    }
  },
三、Leaflet示例展示

通过以上步骤,您就可以创建一个简单的Leaflet地图应用程序,并在地图上展示一个标记。您可以根据需要进一步扩展和定制地图功能,如添加更多的向量图层、实现用户交互等。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【笔记】redis回忆录(未完 重头过一遍)

了解 redis在linux上运行 没有window版本 有也是微软自己搞的 &#xff08;一&#xff09;安装与修改配置 1.在linux虚拟机上 安装gcc依赖 然后再usr/local/src解压在官网下载好的redis安装包 直接拖进去 tar -zxvf 安装包名字 tab键补齐 解压成功 进入软件 并执行编译命令…

使用 Apache Dubbo 释放 DeepSeek R1 的全部潜力

作者&#xff1a;陈子康&#xff0c;Apache Dubbo Contributor 2025年1月20日&#xff0c;国产大模型公司深度求索&#xff08;DeepSeek&#xff09;正式发布了大语言模型 DeepSeek-R1&#xff0c;并同步开源其模型权重。通过大规模强化学习技术&#xff0c;DeepSeek-R1 显著提…

Unity TMPro显示中文字体

TMP默认的字体只能显示英语&#xff0c;那么怎么显示中文呢 1、找到支持中文的字体文件 在c盘搜索Fonts文件夹有很多支持中文的字体文件 我这里选择雅黑 PS.双击打开发现里面有粗体细体普通三个版本&#xff0c;也可以只导入一个版本进去 2、将其拖入到unity Assets里面 3…

【MySQL篇】数据库基础

目录 1&#xff0c;什么是数据库&#xff1f; 2&#xff0c;主流数据库 3&#xff0c;MySQL介绍 1&#xff0c;MySQL架构 2&#xff0c;SQL分类 3&#xff0c;MySQL存储引擎 1&#xff0c;什么是数据库&#xff1f; 数据库&#xff08;Database&#xff0c;简称DB&#xf…

Linux 日志系统·

目录 一、前言 二、实现一个简单的日志 1.可变参数 2.日志等级 3.日志时间 4.打印每一条参数 5.合并两个缓冲区 6.封装日志函数 三、完整代码 一、前言 当我们写一个函数&#xff0c;例如打开文件open&#xff0c;当我们打开失败的时候&#xff0c;会调用perror看到错误…

【PromptCoder】使用 package.json 生成 cursorrules

【PromptCoder】使用 package.json 生成 cursorrules 在当今快节奏的开发世界中&#xff0c;效率和准确性至关重要。开发者们不断寻找能够优化工作流程、帮助他们更快编写高质量代码的工具。Cursor 作为一款 AI 驱动的代码编辑器&#xff0c;正在彻底改变我们的编程方式。但如…

【VUE】vue-i18n: Uncaught SyntaxError: Not available in legacy mode

报错&#xff1a; 解决方法&#xff1a; 找到 createI18n 并加上 legacy: false,

2025年SCI一区智能优化算法:混沌进化优化算法(Chaotic Evolution Optimization, CEO),提供MATLAB代码

一、混沌进化优化算法 https://github.com/ITyuanshou/MATLABCode 1. 算法简介 混沌进化优化算法&#xff08;Chaotic Evolution Optimization, CEO&#xff09;是2025年提出的一种受混沌动力学启发的新型元启发式算法。该算法的主要灵感来源于二维离散忆阻映射的混沌进化过…

网络安全之日志审计 网络安全审计制度

一、代码审计安全 代码编写安全: 程序的两大根本:变量与函数 漏洞形成的条件:可以控制的变量“一切输入都是有害的 ” 变量到达有利用价值的函数&#xff08;危险函数&#xff09;“一切进入函数的变量是有害的” 漏洞的利用效果取决于最终函数的功能&#xff0c;变量进入…

VScode+stfp插件,实现文件远程同步保存【2025实操有效】

目录 1 痛点2 准备工作3 操作步骤3.1 第一步&#xff0c;下载STFP插件3.2 第二步&#xff0c;修改配置文件3.3 第三步&#xff0c;测试是否成功 4 后记 1 痛点 我一直用vscode远程连接服务器&#xff0c;传代码文件等到服务器上面&#xff0c;突然有一次服务器那边尽心维修&am…

Java高频面试之SE-23

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天又来了&#xff01;哈哈哈哈哈嗝&#x1f436; Java 中的 Stream 是 Java 8 引入的一种全新的数据处理方式&#xff0c;它基于函数式编程思想&#xff0c;提供了一种高效、简洁且灵活的方式来…

python-leetcode-乘积最大子数组

152. 乘积最大子数组 - 力扣&#xff08;LeetCode&#xff09; class Solution:def maxProduct(self, nums: List[int]) -> int:if not nums:return 0max_prod nums[0]min_prod nums[0]result nums[0]for i in range(1, len(nums)):if nums[i] < 0:max_prod, min_prod…

NavVis VLX三维扫描:高层建筑数字化的革新力量【沪敖3D】

在三维激光扫描领域&#xff0c;楼梯结构因其复杂的空间形态和连续垂直移动的实际需求&#xff0c;一直是技术难点之一。利用NavVis VLX穿戴式移动扫描系统成功完成一栋34层建筑的高效扫描&#xff0c;其中楼梯部分的数据一遍成形且无任何分层或形变。本文将深入分析该项目的技…

docker安装register私库

一、使用自己的私库 1、安装register私库 docker pull registry运行 docker run -d -v /data/registry:/var/lib/registry -p 5000:5000 --name registry registry:2参数-v /data/registry:/var/lib/registry&#xff0c;挂载目录 2、拉取需要的镜像 docker pull hello-w…

PCI_PCIe子系统学习(一)概念理清

文章目录 1、其它学习文章2、PCI和PCIe总线简单介绍2.1、PCI2.2、PCIe 3、引脚概述3.1、PCI3.1.1、PCI引脚概述3.1.2、PCI引脚定义3.1.2.1、32位 PCI (124针)3.1.2.2、64位 PCI (188针) 3.1.3、PCI引脚功能分类 3.2、PCIe3.2.1、PCIe引脚概述3.2.2、PCIe引脚定义3.2.2.1、PCIe …

解决Deepseek“服务器繁忙,请稍后再试”问题,基于硅基流动和chatbox的解决方案

文章目录 前言操作步骤步骤1&#xff1a;注册账号步骤2&#xff1a;在线体验步骤3&#xff1a;获取API密钥步骤4&#xff1a;安装chatbox步骤5&#xff1a;chatbox设置 价格方面 前言 最近在使用DeepSeek时&#xff0c;开启深度思考功能后&#xff0c;频繁遇到“服务器繁忙&am…

【SpringBoot】——分组校验、自定义注解、登入验证(集成redis)、属性配置方式、多环境开发系统学习知识

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大三学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

TCP/IP 5层协议簇:物理层

目录 1. 物理层&#xff08;physical layer&#xff09; 2. 网线/双绞线 1. 物理层&#xff08;physical layer&#xff09; 工作设备&#xff1a;网线、光纤、空气 传输的东西是比特bit 基本单位如下&#xff1a;数字信号 信号&#xff1a;【模拟信号&#xff08;放大器&a…

【C/C++】理解C++内存与Linux虚拟地址空间的关系---带你通透C++中所有数据

每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” 绪论&#xff1a; 本质编写的原因是我在复习过程中突然发现虚拟地址空间和C内存划分我好想有点分不清时&#xff0c;进行查询各类资料和整理各类文章后得出的文章&#xff…

(论文)检测部分欺骗音频的初步调查

Paper–An Initial Investigation for Detecting Partially Spoofed Audio 摘要 所有现有的欺骗性语音数据库都包含整个欺骗性的攻击数据。 在实践中&#xff0c;使用仅部分欺骗的话语来装载成功的攻击是完全合理的。根据定义&#xff0c;部分欺骗的话语包含欺骗和真实段的混…