我想用MarkerCluster和mapbox.js实现GEOJson。
没有Markercluster,一切正常:
$.ajax({
url: 'dashboard/geoJSON',
dataType: 'json',
type: 'POST',
success: function(geojson) {
locations = L.mapbox.featureLayer().addTo(map)
locations.on('layeradd', function (e) {
var marker = e.layer;
markers.push(marker);
});
locations.setGeoJSON(geojson);
...
但是当生病时尝试实施MarkerCluster时,它只显示1个标记
...
success: function(geojson) {
locations = L.mapbox.featureLayer().addTo(map)
var clusterGroup = new L.MarkerClusterGroup();
locations.on('layeradd', function (e) {
var marker = e.layer;
markers.push(marker);
clusterGroup.addLayer(markers);
});
locations.setGeoJSON(geojson);
map.addLayer(clusterGroup);
并向我显示以下错误:
TypeError: t.onAdd is not a function
任何人都可以帮助我,我如何成功地将markercluster与GEOJson从远程服务器结合起来? 提前致谢
//编辑:找到一个不同的示例,它已经可以使用:
var markers = L.markerClusterGroup();
var geoJsonLayer = L.geoJson(geojson, {
onEachFeature: function (feature, layer) {
}
});
markers.addLayer(geoJsonLayer);
map.addLayer(markers);
map.fitBounds(markers.getBounds());
但现在它失去了我的"默认"样式与" marker-color" - " marker-size"。
我现在如何设计我的标记?
Mapbox有点奇怪,看起来总有至少10种方法可以解决这些问题;)
答案 0 :(得分:1)
如果您的.push()
变量是一个数组(当您使用clusterGroup.addLayer(markers)
时),则无法使用.addLayers(markers)
。您可以使用addLayers
(在"layeradd"
上使用“s”)。
我想你不想在每个clusterGroup.addLayer(marker)
事件中添加整个数组,所以也许你的意思是marker
(onEachFeature
上没有“s”,即你的个人标记/ feature)。
顺便说一下,您可以使用L.mapbox.featureLayer()
的{{1}}选项,而不是使用事件监听器。
最后,不将您的功能组添加到地图中。那是目前正在添加您唯一标记的那个。您希望让群集组自动处理从地图添加/删除标记。