我将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);
答案 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上应用所需的样式。