Вы делаете ...
var maps = [ L.map('mapid'+[n]).setView([lat[n], lng[n]], 13) ]; // Creates three maps, that corresponds with three mapids in my HTML
... и это не делает то, что вы думаете. Вы создаете массив из одного элемента и назначаете его maps
, и вы делаете это три раза. Следовательно, на втором проходе l oop, когда код ссылается на maps[1]
, он имеет значение undefined
.
Вместо этого вы, вероятно, захотите сделать что-то вроде ...
var maps = [];
for(var n = 0; n < 3; n++) {
/* stuff */
maps.push( L.map( /*stuff*/ ) );
L.tileLayer( /* stuff */ ).addTo(maps[n]);
}
... или даже ...
var maps = [];
for(var n = 0; n < 3; n++) {
/* stuff */
var map = L.map( /*stuff*/ );
L.tileLayer( /* stuff */ ).addTo(map);
maps.push(map);
}
С другой стороны, у вас есть старое добро состояние гонки относительно значений latLng[n]
, lat[n]
и lng[n]
. Поскольку эти значения устанавливаются только после завершения сетевой операции (поскольку AJAX - это asyn c, et c et c), они (наиболее вероятно) undefined
при использовании. Возможно, вам захочется отложить добавление данных на каждую карту до тех пор, пока вы не получите указанные данные, например, например,
var maps = [];
for(var n = 0; n < 3; n++) {
var map = L.map( /*stuff*/ );
fetch(url)
.then(function(response){return response.json})
.then(function(json)){
L.circle(json.results[0].locations[0]).addTo(map);
});
L.tileLayer( /* stuff */ ).addTo(map);
maps.push(map);
}
Обратите внимание, что последовательность событий здесь следующая: сетевой запрос инициирован , map создается, создается экземпляр tilelayer, сетевой запрос завершается, создается круг.
(И почему да, я предпочитаю API извлечения вместо jQuery в любой день) 1032 *
Помните, что в Leaflet обычно приятно заменить leaflet.js
на leaflet-src.js
, чтобы улучшить трассировку стека, и что использование инструментов разработчика браузера для установки точек останова перед исключениями позволит вам увидеть, какие значения undefined
в то время.