Leaflet 基础入门教程示例

目录
  • 什么是Webgis?
  • 什么是Leaflet?
  • 在Vue中安装Leaflet,与其他依赖
  • 在App.vue中使用
  • 初始化地图
  • chinaProvider地图瓦片
  • addControls使用工具集
  • attribution创建自定义版权
  • Marker创建点
  • 创建线
  • Polygon创建三角形
  • Popup弹窗&Tooltip提示
  • Geojson区域描边
  • 总结

什么是Webgis?

webGis又称之为网络地理信息系统,GIS的全名是Geographic Information System,它是在计算机硬件,软件系统支持下,对整个或部分地球表层空间中的有关地理分布数据进行采集,储存,管理,运算,分析,显示和描述的技术系统。

地图是GIS的表现形式,但是GIS深层是空间信息的处理,简单说就是将GIS这门学科所能提供的功能,以B/S技术展现给用户,使用户只需要在浏览器上便能使用这些GIS功能的一个应用方向。

什么是Leaflet?

Leafet 作为 webGis 主流框架之一,Leaflet 是一个开源并且对移动端友好的交互式地图 JavaScript 库。 它大小仅仅只有39 KB, 并且拥有绝大部分开发者所需要的所有地图特性。

在Vue中安装Leaflet,与其他依赖

// leaflet 核心库
npm install leaflet
// 地图瓦片
npm install leaflet.chinatmsproviders
// 动态线
npm install leaflet-ant-path
// 侧边栏工具库
npm install @geoman-io/leaflet-geoman-free

在App.vue中使用

import L from "leaflet";
import "leaflet.chinatmsproviders"; // 插件可加载各种地图(如:智图地图,谷歌地图,高德地图等包含卫星地图)
import "leaflet-ant-path"; //动态线条插件
import "leaflet/dist/leaflet.css";
import imgs from "@/assets/svg/logo.svg";
import "@geoman-io/leaflet-geoman-free";
import "@geoman-io/leaflet-geoman-free/dist/leaflet-geoman.css";

初始化地图

    methods:{
         initMap(){
             let _this = this;
            this.map = L.map("map", {
            attributionControl: true,  // 是否版权
            closePopupOnClick: false,  // 点击画布是否直接隐藏弹窗
            maxZoom: 13,               // 最大缩放
            minZoom: 3,                // 最小缩放
            noWrap: false,             // 该层是否包裹在逆子午线周围
            worldCopyJump: true,       // 拷贝当前配置
            renderer: L.svg(),         // 矢量渲染
            });
         }
    }

chinaProvider地图瓦片

// 设置需要引入的地图瓦片
// 其他材质包括(天地图,百度,...) git地址:https://github.com/htoooth/Leaflet.ChineseTmsProviders
L.tileLayer?.chinaProvider('Geoq.Normal.PurplishBlue').addTo(this.map);
// 设置中心点与缩放层级
this.map.setView([41.02999636902566, 108.984375], 3);

addControls使用工具集

 this.map.pm.addControls({
        position: "topleft",
        drawCircle: false,
  });

attribution创建自定义版权

const attrs = L.control.attribution({ prefix: "Leafet地图" });
      attrs.addTo(this.map);

Marker创建点

  • 首先在data中定义两个layers组
  data(){
        return{
                // layerGroup 图层组主要用于添加标点与线段对象
                LineGroupLayer: L.layerGroup([]),
                MakerGroupLayer: L.layerGroup([]),
        }
    }
  • 定义点
// 定义图标
const icons = L.icon({
    iconUrl: imgs,
    iconSize: [20, 20],
    iconAnchor: [5, 5],
    shadowSize: [0, 0],
    });
// 创建点实例 将经纬度传入,并在该点位显示图标
let makerStart = L.marker([50.5, 30.5],{ icon: icons });
// 添加图
this.MakerGroupLayer.addLayer(makerStart);
this.map.addLayer(this.MakerGroupLayer); // 添加点

创建线

let paths = [
        [35.485106, 123.078832],
        [26.787026, 126.104039],
        [22.847052, 126.281993],
        [18.999909, 126.578654],
      ]; //随便打的点
let lineLayer = L.polyline.antPath(paths, {
    // 线
    paused: false, //暂停  初始化状态
    reverse: false, //方向反转
    delay: 1000, //延迟,数值越大效果越缓慢
    dashArray: [10, 20], //间隔样式
    weight: 2, //线宽
    opacity: 0.7, //透明度
    color: "red",
    pulseColor: "#fff", //块颜色
    });
this.LineGroupLayer.addLayer(lineLayer);
this.map.addLayer(this.LineGroupLayer); // 添加线

Polygon创建三角形

  let multipolygon = new L.Polygon(
        [
          [
            [17.385044, 78.486671],
            [16.506174, 80.648015],
            [17.686816, 83.218482],
          ],
        ],
        {
          color: "rgba(0,0,255,.7)",
          weight: 1,
        }
      );
      multipolygon.addTo(this.map);

Popup弹窗&Tooltip提示

  • Popup
// 自定义popup,并显示图片
var popup = L.popup()
        .setLatLng([e.latlng.lat, e.latlng.lng])
        .setContent(`<p>Hello world!<br />This is a nice popup.</p><img src="${imgs}"/>`)
        .openOn(_this.map);
  • Tooltip
// 定义图标
const icons = L.icon({
    iconUrl: imgs,
    iconSize: [20, 20],
    iconAnchor: [5, 5],
    shadowSize: [0, 0],
    });
let popupDom =
    "<div class='pop-data'><ul><li class='time'><span>这是一个点:</span>" +
    "</li><li><span>内容...</span>" +
    "</li><li><span>内容...</span>" +
    "</li></ul></div>"; //   绑定popup
let makerEnd = L.marker([17.686816, 83.218482], {
    icon: icons,
    }).bindTooltip(popupDom);
this.MakerGroupLayer.addLayer(makerEnd);

Geojson区域描边

首先需要我们在(DataV)[datav.aliyun.com/portal/scho…

//  引入Geojson的json文件,这里直接将文件展开了,在项目中不应该这么做
 let Geojson = {
        type: "FeatureCollectio",
        properties: { zhName: "河北省", name: "Hebei" },
        geometry: {
          type: "MultiPolygon",
          coordinates: [
            [
              [116.365069,40.943216],
              [116.37641,40.939681],
              [116.398515,40.905999]
              ....
            ],
          ],
        },
      };
      L.geoJSON(Geojson, style: {
          weight: 2, //边框粗细
          opacity: 0.4, //透明度
          fillColor: 'transparent', //区域填充颜色
          fillOpacity: 0.3, //区域填充颜色的透明
        }).addTo(this.map);

总结

根据上面的例子总结到Leaflet框架设计简单,而且官方提供很多插件、具有高扩展性、性能良好和可用性强等特点。它可以在所有主流的桌面和移动平台上高效运行,能够利用主流浏览器中利用HTML5和CSS3的优势的同时也兼容老版本浏览器,更加适合移动端,但是只支持2D地图,不支持3d地图。

以上就是Leaflet 基础入门教程示例的详细内容,更多关于Leaflet 基础的资料请关注我们其它相关文章!

(0)

相关推荐

  • leaflet加载geojson叠加显示功能代码

    这篇文章主要介绍了leaflet加载geojson叠加显示功能代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 geojson需要先制作shp,然后导入下面网站生成geojson. https://mapshaper.org/ geojson,最好放后台,前台通过异步请求去加载json,然后显示. getGeojsonByName({name:geojson_name}).then(data=>{ if (this.bondarylayer)

  • 基于Leaflet的VideoOverlay视频图层叠加实战教程

    目录 前言 一.Leaflet.DistortableVideo 1.简介 2.源代码 3.相关限制 二.如何使用 Leaflet.DistortableVideo 1.新建Html5页面 2.地图定义 3.视频资源叠加 4.加载过程 三.总结 前言 在基于二维的场景中,也许会遇到以下的需求.在某交通路口或者重要的监控点,需要将实时或者录制的视频信息叠加在地图上.更有甚者,随着设备通讯方式的增强,无人机等设备可以采集实时数据,实时回传到控制终端,帮助进行远程侦查,控制等.但是在常规的展示信息中,

  • leaflet的开发入门教程

    Leaflet简述 Leaflet 是一个为建设交互性好适用于移动设备地图,而开发的现代的.开源的 JavaScript 库.代码仅有 33 KB,但它具有开发在线地图的大部分功能.Leaflet设计坚持简便.高性能和可用性好的哲学思想,在所有主要桌面和移动平台能高效运作,在现代浏览器上会利用HTML5和CSS3的优势,同时也支持旧的浏览器访问.支持插件扩展,有一个友好.易于使用的API文档和一个简单的.可读的源代码.Leaflet强大的开源库插件涉及到地图应用的各个方面包括地图服务,数据提供,

  • 基于leaflet.js实现修改地图主题样式的流程分析

    今天遇到了一点点的小情况,我自己根据leaflet.js做了一个离线地图,公司要用来做态势,但是地图的底图用的是高德的原图,样式是下面这样的: 但是态势的主题是如下的这种淡蓝色: 这就造成了本次的需求,需要可以修改样式的主题,由于本人是个后端小佬,前端菜鸡,所以实现起来发生了一些困难,这里简单介绍下实现的路程. 首先看下效果: 然后介绍下艰辛的过程: 首先,需要用到一个基于leaflet.js的插件: https://github.com/hnrchrdl/leaflet-tilelayer-c

  • Leaflet 基础入门教程示例

    目录 什么是Webgis? 什么是Leaflet? 在Vue中安装Leaflet,与其他依赖 在App.vue中使用 初始化地图 chinaProvider地图瓦片 addControls使用工具集 attribution创建自定义版权 Marker创建点 创建线 Polygon创建三角形 Popup弹窗&Tooltip提示 Geojson区域描边 总结 什么是Webgis? webGis又称之为网络地理信息系统,GIS的全名是Geographic Information System,它是在计

  • Bootstrap零基础入门教程(三)

    什么是 Bootstrap? Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 历史 Bootstrap 是由 Twitter 的 Mark Otto 和 Jacob Thornton 开发的.Bootstrap 是 2011 年八月在 GitHub 上发布的开源产品. 写到这里,这篇从零开始学Bootstrap(3)我想写以下几个内容: 1. 基于我对Bootstrap的理解,做一个小小的总结.

  • Bootstrap零基础入门教程(二)

    什么是 Bootstrap? Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 历史 Bootstrap 是由 Twitter 的 Mark Otto 和 Jacob Thornton 开发的.Bootstrap 是 2011 年八月在 GitHub 上发布的开源产品. 本文重点给大家介绍Bootstrap零基础入门教程(二),具体详情如下所示: 过程中会频繁查阅资料的网站: http://www.

  • Android 基础入门教程——开发环境搭建

    现在主流的Android开发环境有: Eclipse + ADT + SDK Android Studio + SDK IntelliJ IDEA + SDK 现在国内大部分开发人员还是使用的Eclipse,而谷歌宣布不再更新ADT后,并且官网也去掉了集成Android开发环境的Eclipse下载链接,各种现象都表示开发者最后都终将过渡到Android Studio,当然这段过渡时间会很长,但如果你是刚学Android的话建议直接冲Android Studio着手:而且很多优秀的开源项目都是基于

  • 一看就懂的ReactJs基础入门教程-精华版

    一.ReactJS简介 React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西很好用,就在2013年5月开源了.由于 React 的设计思想极其独特,属于革命性创新,性能出众,代码逻辑却非常简单.所以,越来越多的人开始关注和使用,认为它可能是将来 Web 开发的主流工具. ReactJS官网地址:http://facebook.github.io/re

  • MySQL基础入门教程之事务

    目录 引言 1.事务操作 1.1 未控制事务 1.2 控制事务一 1.3 控制事务二 2.事务的四大特性 3.并发事务问题 4.事务隔离级别 总结 引言 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败. 就比如: 张三给李四转账1000块钱,张三银行账户的钱减少1000,而李四银行账户的钱要增加1000. 这一组操作就必须在一个事务的范围内,要么都成功,要么都失败. 正常情况: 转账这个操作, 需

  • C++基础入门教程(二):数据、变量、宏等

    哎,木了个头的,这书太详细了~看得累人 前面部分太过基础了,很多语法方法的东西我也不重复记录了~ 今天才看看C++涉及到数据的一些基础点吧,我把书中稍微比较有营养的部分抽离出来 1.初始化 一般情况下,我们声明和初始化变量是这样的:int iNum = 10; 其实这是延续了C语言的语法,C++还有一种语法,是这样的:int iNum(10); 其实大部分人还是习惯用第一种吧(我也是),但如果哪天我们在别人的代码里看到第二种形式,不要被吓蒙了~ 2.宏定义 宏,用最粗俗,不,是最通俗的说法来解释

  • C++基础入门教程(一):基础知识大杂烩

    我很郁闷,这本书果然讲得很详细,我在看第二章,看完要深呼吸,实在太详(lao)细(dao)了. 不过这很好,后面难一些的内容应该会不错~   那么,这章只是作为预览的章节,我抽出一些稍微比较有营养的内容记录一下吧~   注意:本系列教程不适合无任何编程语言基础的朋友,只是作为C++基础的一种补充. 教程内容基于<C++ Primer Plus>一书,适合初学者,熟手请直接忽略. 1. 如果你不注释,那么,我会把你注释掉~! C++的注释有2种, 第一种,单行注释,那就是:// 如下代码: 复制

  • C++基础入门教程(四):枚举和指针

    我已经把<C++ Primer>一书准备好了,如果这本<C++ Primer Plus>继续这么瞎闹的话,我就换主角~! 没错,这书连if while都还没介绍呢,就开始把指针搬出来了,虽然只是简单介绍.. 这目录编排我也是醒了. 那么,按照书上的进度,今天来初步说说指针. 但,今天周五,你懂的,就随便水一下,因为我怕到周一又忘了. 1.枚举 那么,枚举是什么呢?(小若:等等~!说好的指针呢?) 大部分高级语言里应该都有枚举了,所以也没什么好介绍的. 使用是这样的: 复制代码 代码

  • C++基础入门教程(三):数组、字符串、结构体、共用体

    今天的标题取得..好严肃的感觉.(小若:咳噗) 这章的内容虽然还是很详(lao)细(dao),但已经开始有很多值得记录的内容了~ 那么,今天就来初次介绍数组与字符串-以及结构体..还有共用体..吧. 1.数组 我记得大四实习的时候,请教同事:"什么是属主?"(其实是和数据库相关的东西) 然后同事惊讶地说道:"啊,你连数组都不知道..这,基础还是要好好补补-呐,数组的意思呢,是这样的-" 我听着听着就不对劲,"等等,这是数组-其实我是问这个属主-"

随机推荐