Arrays 将阵列中的标记添加到传单中

Arrays 将阵列中的标记添加到传单中,arrays,leaflet,Arrays,Leaflet,我正在尝试将阵列中的标记添加到传单地图中。我试图从数组中获取弹出信息、图层和坐标。我肯定错过了一些明显的东西,因为我无法提取图层信息 markersArray[i][1]返回值“layer1”,但它在.addTo方法中不起作用 编辑:我已更改代码以解决群集外部出现标记的问题: 我的代码如下: var markersList = []; var markersList = [ [41.15,-8.61,'popup1','layer1'], [41.15,-8.61,'popup2','layer

我正在尝试将阵列中的标记添加到传单地图中。我试图从数组中获取弹出信息、图层和坐标。我肯定错过了一些明显的东西,因为我无法提取图层信息

markersArray[i][1]返回值“layer1”,但它在.addTo方法中不起作用

编辑:我已更改代码以解决群集外部出现标记的问题:

我的代码如下:

var markersList = [];
var markersList = [
[41.15,-8.61,'popup1','layer1'],
[41.15,-8.61,'popup2','layer1'],
[41.15,-8.31,'popup3','layer2'],
[41.15,-8.31,'popup4','layer2']
];

var markers = new L.MarkerClusterGroup();

for (var i = 0; i < markersList.length; i++) {
markers.addLayer(new L.marker([markersList[i][0], markersList[i][1]]).bindPopup(markersList[i][2]));
markers.addTo(layer1); // working
markers.addTo(markersList[i][3]); // not working
map.addLayer(markers);
};
var-markersList=[];
变量标记列表=[
[41.15,-8.61,'popup1','layer1',],
[41.15,-8.61,'popup2','layer1',],
[41.15,-8.31,'popup3','layer2',],
[41.15,-8.31,'popup4','layer2']
];
var markers=新的L.MarkerClusterGroup();
对于(变量i=0;i

感谢您的帮助。

这是因为markersArray[i][1]的类型为字符串。如果要使用它来引用layer1对象,可以使用此[markersArray[i][1]

由于询问者编辑而进行编辑:

你还在犯同样的错误。addTo方法需要一个层的实例作为参数,而不是包含layerinstance的变量名的字符串。markersList[i][3]包含一个字符串,该字符串的名称为layerinstance的变量,而不是该层的实例。如果要按字符串获取该层的实例,应使用:this[markersList[i][3]。这将导致以下代码:

markers.addTo(this[markersList[i][3]]);
这里的“this”表示您当前的作用域,markersList[i][3]使用变量名列出字符串,因此它将导致“this[“layer1”]”,这是对您的layerinstance的引用。我假设您已经在该范围内声明了变量layer1,并且它包含layerinstance:

var layer1 = new L.LayerGroup();
但我无法从您当前的代码中扣除,因为您已删除了创建图层组实例的位置。

用于将标记添加到地图中。传递它markersArray不会像您发现的那样工作

我猜你计划有多个图层,每个图层都包含一些你添加到地图中的特征。您可能需要使用图层字典,并将每个图层名称映射到相应的传单图层对象

var layerLookup {};
layerLookup["layer1"] = new L.LayerGroup().addTo(map);
layerLookup["layer2"] = new L.LayerGroup().addTo(map);

... // other code

for (var i = 0; i < markersArray.length; i++) {
    marker = new L.marker([markersArray[i][2],markersArray[i][3]])
    .bindPopup(markersArray[i][0]).addTo(layerLookup[markersArray[i][1]]);
};
var layerLookup{};
layerLookup[“layer1”]=新的L.LayerGroup().addTo(地图);
layerLookup[“layer2”]=新的L.LayerGroup().addTo(地图);
... // 其他代码
对于(var i=0;i
您能详细说明一下吗?我对代码做了一点修改,使集群能够与层一起工作(有一个问题:1个标记总是“在”集群之外)。我在原始帖子中编辑了代码。谢谢。看起来您选择了另一个答案并打开了一个新问题。希望你能把一切都弄明白。谢谢你的帮助。还是不走运,或者我可能不明白你的意思。我已经更改了原始帖子中的代码,因为我遇到了一个问题,标记总是出现在集群之外。谢谢。我现在更明白了。它现在没有输出错误,但不知何故标记被放置在两个层中;i、 e.在传单层控件中隐藏第1层或第2层隐藏/显示所有标记。。。我将尝试找出答案,您可以通过将标记记录到控制台来轻松检查是否将正确的标记添加到了正确的层。例如:console.log(layer1.\u层);对所有4个对象(标记)都在第1层和第2层上,而它们在第1层中应该是2个,在第2层中应该是2个。由于您的编辑,我对您试图完成的内容感到困惑。在您使用图层组之前,现在您突然加入了一个MarkerClusterGroup。在我的答案完全正确之前,改变问题的上下文对我和其他试图提供帮助或寻求相同解决方案的用户来说并不容易。我建议接受最好的答案和/或用新代码和清晰的问题描述开始一个新问题,也许在plunkr上有一个很好的测试用例。