Клуб API Карт

ListBoxItems и JSON массив с координатами точек

spirit.infernal
26 сентября 2016, 06:08

Приветствую. Помогите разобраться в корректной обработке указанного в шапке сочетания? на базе примера из песочницы собираю карту, добавляю на неё метки из обработанного массива координат и хотел бы получить указание на то, что почитать для добавления данного массива еще и в выпадающий список, с которым можно было бы взаимодействовать на манер этого? Я смутно догадываюсь, что надо бы распарсить json или xml файл на данные, которые уже через цикл надо вводить в переменную listBoxItems, но опыта парсинга не было.

на данный момент делаю так

listBoxItems = [
  $.getJSON('geojson.json', function (data) {
	$.each(data, function (coordinates, address) {
		new ymaps.control.ListBoxItem({
          data: {
           content: address, 
           center: coordinates,												
           zoom: 9											
          }										
        })
    });
  })
],

и получаю, ожидаемо, не работающий результат. что исправить и почитать, чтобы достичь нужного эффекта?

Если это будет полезно, api ругается: Cannot read property 'get' of undefined в combine.js. Ссылкой поделиться не могу, так как пока всё собирается на локальном компьютере.

спасибо заранее за помощь.

7 комментариев
ListBoxItem принимает на вход объект с определенными полями.
То что возвращает jQuery.getJSON не подходит в качестве входных данных.
Вам нужно сначала получить JSON, а затем уже формировать список из полученных данных, передавая описанные в документации поля
хотел бы еще раз попросить помощи, так как застрял с следующим шагом.
вдумчиво почитав документацию по json удалось собрать функцию парсинга, дающую нужные результаты. а дальше застрял. консоль ругается на то, что при создании листбокситема функция обращается к несуществующей переменной. что стоит поправить и изменить?

$.getJSON('geojson.json').done(function (data) {
 for (var i = 0, len = 198; i < len; i++) {
  var geo = data.features[i]["geometry"].coordinates,
  name = data.features[i]["properties"].address;
 }
});
listBoxItems = [
 new ymaps.control.ListBoxItem({
  data: {
  content: name,
  center: geo,
  zoom: 9
  }
 })
],         
spirit.infernal,
у вас синтаксическая ошибка в коде.
И главное – массив listBoxItems надо создать до цикла и наполнять внутри цикла, а не после него
dimik,
подскажите, пожалуйста, как корректно это сделать, если не сложно. И в каком месте синтаксическая ошибка? Если данный цикл запускать с выводом в консоль, консоль об ошибках не сообщает и корректно выводит все запрошенные данные
dimik,
перебрал скрипт, так как там была ошибка, перенёс вывод пунктов выпадающего списка в часть, где инициализируются и расставляются точки на карте
$.getJSON('geojson.json', function (json) {
var geoObjects = ym.geoQuery(json)
.addToMap(myMap)
.applyBoundsToMap(myMap, {
checkZoomRange: true
});
}).done(function(json, features){
for (var y = 0; y < 198; y++) {
var z = new ymaps.control.ListBoxItem({
data: {
content: json.features[y]["properties"].address,
center: json.features[y]["geometry"].coordinates
}
});
listBoxItems.push(z);
}
});


при выводе в консоль контента и центра - выводит нужные данные, а вот при выводе в консоль того, что передаётся в листбокситемс - получаю какую-то ерунду:
l {state: h, data: h, options: Object, events: s, _itemImplementation: n…}
_enabled : true
_itemImplementation : n
_layout : null
_layoutDeferred : null
_selected : undefined
data : h
eventProxy : l
events : s
options : Object
state : h
__proto__ : i
Можете подсказать, где я ошибся?
если не сложно помогите разобраться с парсингом из JSON, у меня своими силами не выходит(
собрал демку в песочнице, но без самого JSON файла она кажется бесполезной.
Вопрос решен с на стаковерфлоу, если кому будет интересно - пользуйтесь этим решением