我正在尝试将数组中的标记添加到传单地图中。我试图从数组中获取弹出信息,图层和坐标。我必须遗漏一些明显的东西,因为我无法提取图层信息。
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);
};
感谢您的帮助。
答案 0 :(得分:1)
那是因为markersArray [i] [1]具有字符串类型。如果你想用它来引用layer1对象你可以使用这个[markersArray [i] [1]];
因为提问者编辑而编辑:
你仍然犯同样的错误。 addTo方法要求将图层的实例作为参数,而不是具有包含layerinstance的变量名称的字符串。 markersList [i] [3]包含一个字符串,其中包含layerinstance变量的名称,而不是该层的实例。如果你想通过字符串获取该图层的实例,你应该使用:this [markersList [i] [3]]。这将导致以下代码:
markers.addTo(this[markersList[i][3]]);
这里&#39;这个&#39;代表你当前的范围,markersList [i] [3]带有你的变量名的字符串,这样就会产生这个[&#34; layer1&#34;]&#39;这是对您的layerinstance的引用。我假设您已在该范围内声明了变量layer1,并且它包含layerinstance:
var layer1 = new L.LayerGroup();
但我无法从您当前的代码中扣除该内容,因为您已删除了创建图层组实例的位置。
答案 1 :(得分:1)
addTo用于将标记添加到地图中。传递它markerArray不会像你找到的那样工作。
我猜你计划有多个图层,每个图层都包含你添加到地图中的一些功能。您可能需要使用图层字典,并将每个图层名称映射到相应的传单图层对象。
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]]);
};