leaflet 添加 layerGroup,featureGroup,geoJSON图层

本章主要是介绍一下layer的一些扩展:layerGroup,featureGroup,geoJson。从名称就能看出来,layerGroup和featureGroup是存放一系列图层的组合,geoJson是解析geoJson数据并展示在地图上。

前面我们已经讲过layer了,layerGroup继承layer,featureGroup继承layerGroup,geoJson继承featureGroup,基本上使用方法都差不多,这里主要讲一下他们之间的不同,其他共用的属性和方法可以查看:layerGroup文档

目录

一、layerGroup

二、featureGroup

三、geoJSON


leaflet 详情总目录:传送

一、layerGroup

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

或者

L.layerGroup().addTo(map);

layerGroup创建时可以直接添加图层,也可以不添加,根据情况来确定。

关于layerGroup的常用方法:

方法说明
addLayer添加图层到图层组中,参数:layer
removeLayer移除图层,参数:layer或者id(图层唯一id)
hasLayer判断图层是否存在,参数:layer或者id(图层唯一id),返回:Boolean
clearLayers移除所有图层
eachLayer遍历图层
setZIndex为所有图层设置z-index

这里主要讲一下setZIndex:这个方法是对当前图层组中的所有图层设置z-index,也可以对单个图层进行设置z-index,z-index的数值越大,图层级别越高,但是不同图层组之间这个值是没有关联的。

二、featureGroup

featureGroup继承layerGroup,所以创建方法一致,featureGroup相对layerGroup更容易对全部图层进行相同操作。

以下是featureGroup新增的事件和方法:

事件:

事件说明
layeradd添加图层时触发
layerremove移除图层时触发

 方法:

方法说明
setStyle为图层组中支持setStyle方法的图层设置style
bringToFront把图层组移到所有图层上面
bringToBack把图层组移到所有图层下面
getBounds获取图层组的LatLngBounds(所有图层所在的矩形区域边界)

三、geoJSON

geoJson继承featureGroup

let data = {
        features: [
          {
            geometry: {
              coordinates: [
                [
                  [
                    [119.57847441,29.4985541],
                    [119.53847441,29.4985541],
                    [119.53847441,29.4585541],
                    [119.57847441,29.4585541]
                  ],
                ],
              ],
              type: 'MultiPolygon',
            },
            geometry_name: 'geom',
            properties: {
              latitude: 29.4785541,
              longitude: 119.55847441,
            },
            type: 'Feature',
          },
        ],
        totalFeatures: 1,
        type: 'FeatureCollection',
      }
      L.geoJson(data, {
        onEachFeature: function (feature, layer) {
          layer.bindPopup('A popup!')
        },
        style: {
          color: '#0084FF',
          weight: 3,
          opacity: 1,
          fillOpacity: 0,
        },
      }).addTo(this.map)

onEachFeature:图层被创建时,每个图层都会触发该方法,可以在这里对图层做处理。

coordsToLatLng:把图层coordinates数据转为LatLng

方法:

方法说明
addData(data)添加新的图层到geoJson中
resetStyle(layer?)重置图层样式,传layer则针对该图层,不传则针对所有图层
setStyle(style)设置样式

其他的对用方法,事件,参数,大家可以参考文档:layerGroup文档

`L.layerGroup()` 是Leaflet库中用于组合地图图层的一种方法,它可以创建一个图层组,方便管理和操作其中的各个图层。当你调用 `clearLayers()` 方法时,预期的效果应该是移除图层组中的所有图层。然而,有时候`clearLayers()` 可能不会完全清除掉所有的标注 (`stationMarkers`),这可能是以下几个原因: 1. 图层引用:确认你在 `stationMarker` 中是否正确地移除了对图层的引用。如果没有删除,即使从图层组中移除,这些标注仍然存在于地图的其他地方。 2. 长时间缓存:如果标注已经添加到地图上,并且浏览器进行了长缓存,那么`clearLayers()`可能不会立即生效,直到缓存更新。 3. 错误使用:确保你正确地调用了 `stationMarker.removeFrom(group)` 或者 `group.removeLayer(stationMarker)` 来从图层组中移除标注。 4. 子图层问题:检查 `stationMarker` 是否包含了子图层,如果是,可能需要递归清理它们。 5. 动态添加:如果标注是在 `clearLayers` 调用之后动态添加图层组的,它可能不会受到影响。 为了解决这个问题,你可以尝试以下步骤: - 确保你已正确地从图层组中移除标注: ```javascript stationMarker.removeFrom(layerGroup); ``` - 如果图层还在使用别处,确保它们已经被正确地移除: ```javascript if (layerGroup.getLayers().indexOf(stationMarker) !== -1) { stationMarker.removeFrom(map); // 如果在全局map上,不在layerGroup内 } ``` - 清理缓存,可以强制浏览器加载新的版本: ```javascript L.DomUtil.TRANSITIONEND.forEach(function(eventName) { document.documentElement.removeEventListener(eventName, null, true); }); ``` 如果问题依然存在,考虑检查是否有额外的代码影响了标注的生命周期。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

travel_wsy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值