Mapbox.js GEOJson 与 Markercluster
Mapbox.js GEOJson with Markercluster
我想用 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());
但现在它失去了我的 "default" 属性的样式 "marker-color" - "marker-size".
我现在如何设计我的标记?
Mapbox 有点奇怪,看起来总有至少 10 种方法可以解决此类问题 ;)
如果您的 markers
变量是数组(因为您在其上使用 .push()
),则不能使用 clusterGroup.addLayer(markers)
。您可以使用 .addLayers(markers)
(在 addLayers
上使用 "s")。
我想您无论如何都不想在每个 "layeradd"
事件中添加整个数组,所以也许您的意思是 clusterGroup.addLayer(marker)
(没有 marker
上的 "s",即您的个人标记/特征)。
顺便说一句,您可以使用 L.mapbox.featureLayer()
的 onEachFeature
选项,而不是使用事件侦听器。
最后,不要将您的要素组也添加到地图中。那是目前正在添加您唯一的标记的那个。您想让您的群集组自动处理从地图添加/删除的标记。
我想用 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());
但现在它失去了我的 "default" 属性的样式 "marker-color" - "marker-size".
我现在如何设计我的标记?
Mapbox 有点奇怪,看起来总有至少 10 种方法可以解决此类问题 ;)
如果您的 markers
变量是数组(因为您在其上使用 .push()
),则不能使用 clusterGroup.addLayer(markers)
。您可以使用 .addLayers(markers)
(在 addLayers
上使用 "s")。
我想您无论如何都不想在每个 "layeradd"
事件中添加整个数组,所以也许您的意思是 clusterGroup.addLayer(marker)
(没有 marker
上的 "s",即您的个人标记/特征)。
顺便说一句,您可以使用 L.mapbox.featureLayer()
的 onEachFeature
选项,而不是使用事件侦听器。
最后,不要将您的要素组也添加到地图中。那是目前正在添加您唯一的标记的那个。您想让您的群集组自动处理从地图添加/删除的标记。