您目前通过两个jQuery的$.getJSON
从mapbox帐户加载数据和直接。
那么如果我的理解是正确的,你想通过使用leaflet-omnivore插件替换这些方法?
直接更换是相当简单的,因为你可以直接使用:
var geojsonLayer = omnivore.geojson("filePath", null, L.mapbox.featureLayer());
geojsonLayer.addTo(map);
现在,当你想你的群集标记(使用Leaflet.markercluster插件在你的情况)变得稍微复杂一些。但它与$.getJSON
类似,因为两者都执行异步AJAX请求,您必须在回调中进行转换。
随着瓣叶杂食动物,可以使用.on("ready", callback)
语法:
var geojsonLayer = omnivore.geojson("filePath", null, L.mapbox.featureLayer())
.on("ready", function() {
var markers = L.markerClusterGroup();
markers.addLayer(geojsonLayer);
markers.addTo(mymap);
});
更新的jsfiddle:https://jsfiddle.net/1uuubmwb/39/
编辑
好,我错过了你的一部分,你“想搜索数据“,就像你指向的mapbox中的教程所做的那样。
就你而言,由于你想要对标记进行聚类,所以你不需要直接使用mapbox要素图层,而是使用标记群集组。
一种解决方法是更换群集组每次你改变你的geojsonLayer
mapbox功能层的过滤条件的内容:
// this will "hide" markers that do not match the filter.
geojsonLayer.setFilter(showCode);
// replace the content of marker cluster group.
markers.clearLayers();
markers.addLayer(geojsonLayer);
然后为你弹出,你必须创建并手动将它绑定作为mapbox功能层需要您GeoJSON的数据使用title
属性(如果是的话,它会自动使用该信息来填充弹出/“提示”的内容):
function attachPopups() {
// Create popups.
geojsonLayer.eachLayer(function (layer) {
var props = layer.feature.properties;
layer.bindPopup(
"<b>Code unité :</b> " + props.CODE_UNITE + "<br />" +
"<b>Adresse web :</b> <a href='" + props.ADRESSE_WEB + "' target='_blank'>" + props.ADRESSE_WEB + "</a>"
);
});
}
不幸的是,它看起来像.setFilter()
删除那个弹出窗口,所以你需要在每个setFilter
之后调用这个attachPopups()
函数。
演示:https://jsfiddle.net/1uuubmwb/40/
感谢您在JSFiddle中分享您的代码,它确实有助于提供支持。请注意,在SO中,第一步是查明您的问题以减少代码并将其分享到问题主体中,制作一个“[Minimal,Complete,and Verifiable example](https://stackoverflow.com/help/mcve) )”。有关[请求帮助](https://stackoverflow.com/help/asking)的更多详细信息。 JSFiddle是额外的奖励。 – ghybs