Mapbox:过滤Leaflet Omnivore KML图层中的标记

时间:2017-05-27 22:33:29

标签: leaflet kml mapbox

我将Google Directions路线导出为KML,并通过Omnivore读取并将其添加到地图中,将它们显示在Mapbox地图上,

Google KML将每条路线存储为两个地点(起点和终点)和一个 LineString (路线)。在Mapbox中我想只显示路径,即以某种方式过滤掉标记。我正在自己的数据库中显示标记,Google标记会混乱。

这是我的代码。我改变LineStrings的样式只是为了表明我可以,但不知道为了不显示点而做出的魔术召唤。 感谢。

runLayer = omnivore.kml('data/xxxx.kml')
  .on('ready', function() {
    var llBnds = runLayer.getBounds();
    map.fitBounds(llBnds);

    this.eachLayer(function (layer) {

      if (layer.feature.geometry.type == 'LineString') {
        layer.setStyle({
          color: '#4E3508', 
          weight: 4
        });
      }

      if (layer.feature.geometry.type == 'Point') {
        //
        // Do something useful here to not display these items!!
        //
      }                 
    });
  })
  .addTo(map);

1 个答案:

答案 0 :(得分:0)

欢迎来到SO!

许多可能的解决方案:

  • 最直接来自您提供的代码,当您获得runLayer功能时,只需使用'Point'图层组中的removeLayer方法。

  • 清洁解决方案是在将这些特征转换为Leaflet图层之前过滤掉这些特征,通过custom GeoJSON Layer Group传递为omnivore.kml的第3个参数,并指定filter选项:

var customLayer = L.geoJSON(null, {
  filter: function(geoJsonFeature) {
    // my custom filter function: do not display Point type features.
    return geoJsonFeature.geometry.type !== 'Point';
  }
}).addTo(map);

var runLayer = omnivore.kml('data/xxxx.kml', null, customLayer);

您还可以使用customLayer上的style和/或onEachFeature选项直接在LineString上应用所需的样式。