leafeltjs(mapbox)z-index排序不起作用

时间:2016-08-10 12:11:18

标签: leaflet z-index mapbox marker

另一位开发人员创建了原始地图,但我的任务是进行一些更改。其中之一是确保激活的标记在点击时被带到前面(它与其他标记部分重叠)。

开发人员使用了mapbox 2.2.2。

我查看过leafletjs的文档,已经按照其他发布解决方案的一些说明(例如solution onesolution two)。这些都没有任何区别。

检查Chrome控制台中的标记我可以看到options.zIndexOffset的值正在设置(在我的测试用例中为10000)。我甚至将_zIndex设置为人为的高值,并且可以看到标记的数据结构中反映出来的情况。但在视觉上没有任何变化。

这是最初设置地图的方式。所有功能都来自单个geojson Feed:

    L.mapbox.accessToken = '<access token here>';

    var map = L.mapbox.map('map', 'map.id', {
    }).setView([37.8, -96], 3);

    var jsonFeed, jsonFeedURL;

    var featureLayer = L.mapbox.featureLayer()
      .addTo(map)
      .setFilter(function (f) {
        return false;
      });

    $.getJSON(jsonFeedURL, function (json) {
      jsonFeed = json;
      jsonFeedOld = json;
      // Load all the map features from our json file
      featureLayer.setGeoJSON(jsonFeed);

    }).done(function(e) {
      // Once the json feed has loaded via AJAX, check to see if
      // we should show a default view
      mapControl.activateInitialItem();
    });

下面是我尝试设置值来更改z-index的片段。单击featureLayer上的可视标记时,将调用“activateMarker”:

featureLayer.on('click', function (e) {
  mapControl.activateMarker(e);
});

GEOjson Feed有图标显示的网址,活动标记图标切换到替代版本(也更大)。当活动特征是单个点时,我试图设置标记的值(注释掉的行,我试过的各种东西!)

    activateMarker: function (e) {

      var marker = e.layer;
      var feature = e.layer.feature;
      this.resetMarkers();

      if (feature.properties.hasOwnProperty('icon')) {
        feature.properties.icon['oldIcon'] = feature.properties.icon['iconUrl'];
        feature.properties.icon['iconUrl'] = feature.properties.icon['iconActive'];

        feature.properties.icon['oldIconSize'] = feature.properties.icon['iconSize'];
        feature.properties.icon['iconSize'] = feature.properties.icon['iconSizeActive'];
      }
      if (feature.geometry.type == 'Point') {
        marker.setZIndexOffset(10001);
        marker.addTo(featureLayer);
      }
      //featureLayer.setGeoJSON(jsonFeed);
    }

任何建议都将不胜感激!我正处于不知道还有什么可以尝试的地方(那是在说些什么)。

1 个答案:

答案 0 :(得分:0)

可能发生的情况是,您只需在最后一次调用.setGeoJSON()时刷新标记:

  

如果图层已具有功能,则会将其替换为新功能。

您正确调整了与图标相关的GeoJSON数据,以便在重新创建时,featureLayer可以使用新值来显示新图标(具体取决于您配置featureLayer的方式)。

但是,您在标记上直接更改的内容将丢失,因为标记将被删除并替换为新标记,并从GeoJSON数据重新构建。

“最干净”的方式可能是避免在每次点击时重新创建所有功能。

另一种方法可能是更改GeoJSON数据中的其他内容,告诉featureLayer使用不同的pointToLayer选项构建新标记(通过zIndexOffset选项)。