Leaflet基础入门教程(一)

leaflet是一个前端的轻量的gis框架,为什么说它轻量呢。因为相比于传统的“庞大的”GIS框架比如openlayers和mapbox,leaflet不仅代码体积小,而且API构成也极为简单。是GIS行业小白入门级别学习的最好的框架,没有之一。

那么话不多说我们首先来学习一下如何使用leaflet搭建一个webgis地图。搭建一个GIS版本的hello world!

第一步我们访问官网查看教程:
https://mp.csdn.net/mp_blog/creation/editor

我们有这样几种方式引入leaflet,第一种是cdn的形式,也就是在线的资源库,如果你是学生和小白为了测试和学习可以采用这种方式。

第二种就是我们代码库下载下来,本地静态引入,这种适合于像我这种平时需要给大家写案例的人来使用。

如果是真正的投入到项目中使用,商业化使用我们可以通过npm的方式安装。

如果是学习测试的用途大家可以在官网上选择download直接下载leaflet的js文件包,下载下来后就包含必要的两个文件:

leaflet.css和lefalet.js。我们把这两个文件和images文件夹(因为其内部包含静态资源)一起拖入我们的项目中,就可以使用了。

 现在我们来搭建一个hello world!

<!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" />
    <title>base</title>
    <link rel="stylesheet" href="./leaflet.css" />
    <script src="./leaflet.js"></script>
  </head>
  <style>
    #map {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100vh;
    }
  </style>
  <body>
    <div id="map"></div>
  </body>
  <script>
    const map = L.map("map").setView([120.675443, 29.878645], 10);
  </script>
</html>

大家可以看到非常的简单,真正的关键的代码就一句:

 const map = L.map("map").setView([120.675443, 29.878645], 10);

当然lefalet默认是没有底图的,我们不妨可以加载天地图试试:

leaflet加载天地图有两个地方需要特别注意,第一个是坐标系问题,需要先给leaflet指定坐标系,你可以指定4326 的地理坐标系,也可以是3857 的墨卡托投影坐标系。指定的坐标系不同,加载天地图的服务参数也不同。

举个例子现在需要加载经纬度为单位的地图,那就要指定crs为EPSG4326,同样申请的天地图的服务为img_c如果是crs为EPSG3857那就需要加载img_w.

第二个需要注意的地方是leaflet 的坐标习惯可能和其他框架不一样,它是先纬度后经度的,这一点需要特别注意:

示例代码:

<!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" />
    <title>base</title>
    <link rel="stylesheet" href="./leaflet.css" />
    <script src="./leaflet.js"></script>
  </head>
  <style>
    #map {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100vh;
    }
  </style>
  <body>
    <div id="map"></div>
  </body>
  <script>
    const map = L.map("map", { crs: L.CRS.EPSG4326 }).setView(
      //注意这里和其他框架不同,先纬度后经度
      [29.878645, 120.675443],
      5
    );
    const TDT_TOKEN = "你的天地图token,可去官网申请";
    L.tileLayer(
      "https://t0.tianditu.gov.cn/DataServer?T=img_c&x={x}&y={y}&l={z}&tk=" +
        TDT_TOKEN,
      { maxZoom: 18, tileSize: 256, zoomOffset: 1 }
    ).addTo(map);
    L.tileLayer(
      "https://t0.tianditu.gov.cn/DataServer?T=cia_c&x={x}&y={y}&l={z}&tk=" +
        TDT_TOKEN,
      { maxZoom: 18, tileSize: 256, zoomOffset: 1 }
    ).addTo(map);
  </script>
</html>

 

现在我们就以4326经纬度坐标系的方式加载了天地图。

leaflet默认是支持两种坐标系的。我们也可以以3857来加载。

<!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" />
    <title>base</title>
    <link rel="stylesheet" href="./leaflet.css" />
    <script src="./leaflet.js"></script>
  </head>
  <style>
    #map {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100vh;
    }
  </style>
  <body>
    <div id="map"></div>
  </body>
  <script>
    const map = L.map("map", {
      crs: L.CRS.EPSG3857,
      center: [29.267232865200903, 13433519.13574219],
      zoom: 4,
    });

    const TDT_TOKEN = "你的天地图token";
    L.tileLayer(
      "https://t0.tianditu.gov.cn/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=" +
        TDT_TOKEN,
      { maxZoom: 18, tileSize: 256 }
    ).addTo(map);
    L.tileLayer(
      "https://t0.tianditu.gov.cn/DataServer?T=cia_w&x={x}&y={y}&l={z}&tk=" +
        TDT_TOKEN,
      { maxZoom: 18, tileSize: 256 }
    ).addTo(map);
  </script>
</html>

 

由于墨卡托投影我们不方便进行坐标的计算,因此还是推荐大家以经纬度坐标系的方式构建应用。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WebGIS小智

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值