初识Leaflet.js

382 阅读1分钟

最初项目开始的并没有想到使用leaflet,而是选择去使用百度地图、高德地图等地图引擎。但是随着项目进展发现客户那边对地图有很多定制化的需求,这些地图引擎并不能满足,所以选择了比较轻量级的leaflet。

一、特点

  • 轻量级:包体积40多KB,几行代码就可以创建出地图
  • 功能完善:支持WMTS、WMS等服务,可以自定义Marker、Popup等功能
  • 插件丰富:像热力图、点聚合等这些功能虽然leaflet本身没有实现,但是有很多插件可以实现

二、基础功能

初始化地图

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />    <meta name="viewport" content="width=device-width, initial-scale=1.0" />    <title>Document</title>    <link      rel="stylesheet"      href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"      integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY="      crossorigin=""    />    <script      src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"      integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo="      crossorigin=""    ></script>    <style>      html,      body {        margin: 0;        width: 100%;        height: 100%;      }      #map {        width: 100%;        height: 100%;      }    </style>  </head>  <body>    <div id="map"></div>    <script>      const map = L.map("map", {        center: [30.65, 104.06], // 默认中心        zoom: 8, // 默认缩放级别      });    </script>  </body></html>

初始化地图后你会看到一个灰白色的页面上什么都没有,这是因为还没有加载地图服务

引入底图服务(我这里是使用的天地图公开的服务,但是需要自己去申请tk)

const tk = "xxx";      L.tileLayer(        "http://t{s}.tianditu.gov.cn/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=" +          tk,        {          attribution: "",          subdomains: ["1", "2", "3", "4", "5", "6", "7"],  // 负载子域        }      ).addTo(map);

创建完成后就可以一幅影像地图,但是没有地名信息还是和我们平时看到的地图不一样

引入地理信息图层

L.tileLayer(        "http://t{s}.tianditu.gov.cn/DataServer?T=cia_w&x={x}&y={y}&l={z}&tk=" +          tk,        {          attribution: "",          subdomains: ["1", "2", "3", "4", "5", "6", "7"],        }      ).addTo(map);

这个时候看起来就和我们平时看到的地图比较像了

还有很多绘制点、线、面的方法就不一一介绍了,这里贴上官网地址。后面介绍一下leaflet的一些插件和项目中一些场景。