Javascript 传单标记聚类:如何创建带有编号标记的标记聚类?

Javascript 传单标记聚类:如何创建带有编号标记的标记聚类?,javascript,leaflet,markerclusterer,leaflet.markercluster,Javascript,Leaflet,Markerclusterer,Leaflet.markercluster,我正在尝试创建一个带有ID的标记的markercluster,因为稍后我想从地图中删除一个标记。然而,我甚至很难让这些标记出现在地图上。我从geoJSON格式的变量individualPoints加载它们。我可以使用以下代码段直接将这些标记添加到地图中: // create object to save markers var markersID = {}; // exchanges latitude & longitude function switchLatLong(oldLoca

我正在尝试创建一个带有ID的标记的markercluster,因为稍后我想从地图中删除一个标记。然而,我甚至很难让这些标记出现在地图上。我从geoJSON格式的变量individualPoints加载它们。我可以使用以下代码段直接将这些标记添加到地图中:

// create object to save markers
var markersID = {};

// exchanges latitude & longitude
function switchLatLong(oldLocation) {
  return new L.LatLng(oldLocation[1], oldLocation[0]);
}

var geoJsonLayer = L.geoJson(individualPoints, {
  onEachFeature: function(feature, layer) {
    /* can add directly to the map--this works */
    markersID[feature.properties.id] = 
        L.marker(switchLatLong(feature.geometry.coordinates))
            .addTo(map);
  }
});
但是我希望它们在一个集群中,所以我想我需要用ID标记每个标记,如中所示,然后将该组添加到集群中,如下所示:

var geoJsonLayer = L.geoJson(individualPoints, {
  onEachFeature: function(feature, layer) {
    /* tag the marker with the id */
    markersID[feature.properties.id] = 
        L.marker(switchLatLong(feature.geometry.coordinates));
  }
});

// create a marker cluster group, and add the markers to this.
var markers = L.markerClusterGroup({});
/* here's where I'm trying to toggle to use the markers with ID numbers */
//markers.addLayer(geoJsonLayer); // this works
markers.addLayers(markersID);   // this doesn't
添加geoJsonLayer很好,但添加markersID不行。所以我一定是添加了错误的markersID。 这是一个JSFIDLE。

问题:有没有更好的方法来创建具有ID的标记,我可以稍后参考?如何将markersID添加到markerClusterGroup

有没有更好的方法来创建具有ID的标记,我可以稍后参考

有几种方法可以起作用:-

如何将markersID添加到markerClusterGroup

因为您的markersID是一个普通对象,所以您不能。addLayer接受标记或层组,如L.geoJson,addLayer接受标记数组

不要将稍后引用标记的需要与将它们添加到标记群集组的需要混为一谈

在onEachFeature中,复制标记并在markersID中创建新标记,而不是保留对L.geoJson构建的同一层的引用。如果只保留对图层的引用,则可以直接引用这些标记,并且可以直接将L.geoJson图层组添加到标记群集组:

var markersID={}; var geoJsonLayer=L.geoJsonindividualPoints{ onEachFeature:functionfeature,图层{ //用那个号码做个记号 //实际上不需要复制标记。 //markersID[feature.properties.id]=L.markerswitchLatLongfeature.geometry.coordinates; markersID[feature.properties.id]=图层; } }; markers.addLayergeoJsonLayer;//这很有效 map.addLayermarkers; //这将起作用,您只需要获得适当的'id'。 markers.removeLayermarkersID[id];
演示:

哇——非常感谢!这正是我需要的。我非常感谢您澄清了标记组和图层之间的区别:-感谢您的反馈,我也非常感谢!:-在传单词汇表中,除了控件之外,可以添加到地图中的所有内容都是一个层:标记、层组、平铺层等。至于标记ID,在JavaScript中,{}使其成为一个关联数组或字典。[]会使它成为一个,实际上是一种特定类型的对象。嗯,好的,这是有道理的。非常感谢。作为对我自己和其他人的提醒,我能够通过将markersID定义为数组来获得我的原始解决方案,尽管仍然重复标记,并且需要更新各个点的id值以生成第0个条目。小提琴:。你的解决方案绝对更干净-