Leaflet【三】图层组 & geoJson & 热力图

图层组 LayerGroup

用于将几个图层分组并作为一个整体处理。如果你把它添加到地图上,任何从该组中添加或删除的图层也会在地图上添加/删除。

L.layerGroup([marker1, marker2]).addTo(map);

使用图层组有什么好处呢?这个在后面有说到,这里的样例代码,我们原本是创建好的marker1、2直接通过addTo就加到了地图上,使用图层组将相当于把这两个图层放到一个集合当中,然后将整个集合一起渲染到地图上。关于图层组的方法可以查看–>

补充

图层组的优势是什么,第一点还是想到了性能问题。在上一篇文章当中渲染图片的地方可以看一下(对比一下图层组的性能)因为图层组还是多了一步统一管理时间上会稍微慢一点。

  console.time('执行时间');
  for (let i = 0; i < 100; i++) {
    for (let j = 0; j < 50; j++) {
      const bounds = [[(j - 1) * 5, (i - 1) * 5], [5 * j, 5 * i]];
      L.imageOverlay(`https://maps.lib.utexas.edu/maps/historical/newark_nj_1922.jpg`, bounds).addTo(map);
    }
  }
  console.timeEnd('执行时间');// 控制台输出 ---> 执行时间: 271.128173828125 ms


  console.time('执行时间');
  const arr = [];
  for (let i = 0; i < 100; i++) {
    for (let j = 0; j < 50; j++) {
      const bounds = [[(j - 1) * 5, (i - 1) * 5], [5 * j, 5 * i]];
      arr.push(L.imageOverlay(`https://maps.lib.utexas.edu/maps/historical/newark_nj_1922.jpg`, bounds));
    }
  }
  const layer = L.featureGroup(arr)
      .addTo(map);
  console.timeEnd('执行时间'); // 控制台输出 ---> 执行时间: 309.530029296875 ms

而图层组主要的思想还是化零为整,统一管理,例如我们的地图上有三种类型不同的点,我们需要去控制按类型做显示隐藏,利用图层组,将不同类型的点加到不同图层当中统一控制,案例如下:

const pointA = [] // 三种类型的数据
const pointB = []
const pointC = []

const layerListA = []
// 注意 纬度在前 经度在后
pointA.forEach(item => {layerListA.push(L.marker([item.lat, item.lon]))})
// ...... BC同理取layerListB layerListC
const layerA = L.featureGroup(layerListA).addTo(map);
const layerB = L.featureGroup(layerListB).addTo(map);
const layerC = L.featureGroup(layerListC).addTo(map);
// 控制隐藏 先将图层从地图当中移出
map.removeLayer(layerA);
// 不要使用 layer.clearLayers();  这个会将图层当中的数据清除掉,
// 重新渲染
map.add(layerA);

要素组 FeatureGroup

是对LayerGroup的扩展,使它更容易对其所有成员图层做同样的事情。

L.featureGroup([marker1, marker2, polyline])
    .bindPopup('Hello world!')
    .on('click', function() { alert('Clicked on a member of the group!'); })
    .addTo(map);

GeoJSON 图层

允许你解析 GeoJSON 数据并将其显示在地图上。扩展自FeatureGroup。其中geoJson数据可以在阿里云地图选择器 下载

import GUANGDONG from '@/assets/mapJson/guangdong.json';
import GUANGXI from '@/assets/mapJson/guangxi.json';
const gdLayer = L.geoJSON(GUANGDONG, {
  // 这个style是继承自Path的,也就是marker点、线面等等都是同一套样式控制
  style: {
    'color': '#f40',
    'weight': 1,
    'opacity': 0.8
  }
}).addTo(map);

// 可以直接通过addData方法加载geoJson数据到该图层当中
gdLayer.addData(GUANGXI)

在这里插入图片描述

热力图 HeatMap

在leaflet官网当中提供了很多的插件->go,也包含了热力图的插件,这块使用的是Leaflet.heat插件,里面还有一些其他的热力图的插件 leaflet 热力图插件

安装依赖

npm i leaflet.heat

demo实现

import 'leaflet.heat';

const addHeat = () => {
  for (let i = 0; i < 1000; i++) {
    res.push([
      Math.random() * 80 - 40, // 纬度
      Math.random() * 160 - 80, // 经度
      Math.random() * 3000 + '' // 值
    ]);
  }
  const layerHeat = L.heatLayer(heatPoint, {radius: 10});
  map.addLayer(layerHeat);
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Modify_QmQ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值