我想使用带有mapbox.js的MarkerCluster实现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种方法可以解决这类问题;)
最佳答案
如果您的markers
变量是一个数组(在其上使用.push()
时),则不能使用clusterGroup.addLayer(markers)
。您可能使用过.addLayers(markers)
(在addLayers
上带有“ s”)。
我想您无论如何都不想在每个"layeradd"
事件上添加整个数组,所以也许您的意思是clusterGroup.addLayer(marker)
(在marker
上没有“ s”,即您的单个标记/功能)。
顺便说一句,您可以使用onEachFeature
的L.mapbox.featureLayer()
选项,而不使用事件侦听器。
最后,也不要将要素组也添加到地图中。那是当前添加您唯一标记的标记。您想让您的集群组自动处理从地图添加/删除标记。