2014-11-21 4 views
0

Я пытаюсь добавить маркеры из массива в карточку листовки. Я пытаюсь получить информацию всплывающего окна, слой и координаты из массива. Я должен упустить что-то очевидное, потому что я не могу вытащить информацию о слое.Добавление маркеров из массива в Листовку

markersArray [i] [1] возвращает значение «layer1», но оно не работает в методе .addTo.

EDIT: Я изменил код, чтобы решить проблему с маркерным ЯВЛЕНИЕ ВНЕ Кластер:

Мой код выглядит следующим образом:

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); 
}; 

Спасибо за помощь.

ответ

1

Это потому, что маркерArray [i] [1] имеет тип строки. Если вы хотите использовать это для ссылки на объект layer1, вы можете использовать это [markersArray [i] [1]];

редактировать из Аскер редактирования:

Вы по-прежнему совершают ту же ошибку. Метод addTo ожидает, что экземпляр слоя как параметр не является строкой с именем переменной, содержащей ваш уровень. markersList [i] [3] содержит строку с именем переменной вашего уровня, а не экземпляром этого слоя. Если вы хотите захватить экземпляр этого слоя строкой, вы должны использовать: this [markersList [i] [3]]. Это приведет к следующему коду:

markers.addTo(this[markersList[i][3]]); 

Вот это "представляет текущую область действия, markersList [я] [3] строка с именем переменной, так что приведет к" это [ „layer1“] что является ссылкой на ваш уровень. Я предполагаю, что вы объявили переменную layer1 в этой области видимости и содержит layerinstance:

var layer1 = new L.LayerGroup(); 

Но я не могу вычитать, что из текущего кода, потому что вы удалили, где вы создаете экземпляры layergroups ,

+0

Спасибо за помощь. Все равно не повезло, или я, возможно, не понял, что вы имели в виду. Я изменил код в исходном сообщении, так как у меня была проблема с маркером, появляющимся всегда вне кластера. Tks – BMM

+1

Я отредактировал свой ответ, надеюсь, что это прояснит ситуацию. – iH8

+0

Спасибо. Теперь я понимаю это лучше. Теперь он не выдает ошибки, но как-то маркеры помещаются в оба слоя; то есть скрытие уровня1 или уровня2 в элементе управления листовкой скрывает/показывает все маркеры ... Я попытаюсь понять это. – BMM

1

addTo Используется для добавления маркера к карте. Передача маркеровArray не будет работать так, как вы нашли.

Я собираюсь предположить, что вы планируете иметь несколько слоев, каждый из которых содержит некоторые функции, которые вы добавляете к карте. Вероятно, вам нужно использовать словарь слоев и сопоставить имя каждого слоя с соответствующим объектом слоя буклета.

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]]); 
}; 
+0

Не могли бы вы рассказать? Я немного изменил код, чтобы заставить кластер работать со слоями (возникла проблема: 1 маркер всегда был «вне» кластера). У меня есть код в исходном сообщении. Спасибо. – BMM

+1

Похоже, вы выбрали другой ответ и открыли новый вопрос. Надеюсь, вы все разобрались. –

Смежные вопросы