Клуб API Карт

29 точек на карте

Пост в архиве.

Добрый вечре!

Народ подскажите как поступить!

Стоит задача при клике на кнопку отобразить на карте 29 точек с подписанными балунами, вот мучаюсь уже час, не знаю как лучше отобразить!

Пока выглядит это так:

 function list_hotels () {
    map.removeAllOverlays();
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.646768,55.822463)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.48826,55.83977)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.591467,55.768345)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.492437,55.838753)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.48826,55.83977)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.479852,55.812873)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.586607,55.849287)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.581846,55.804961)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.561275,55.780704)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.542815,55.794644)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.535314,55.79598)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.585988,55.852081)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.518093,55.798136)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.747711,55.789558)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.468389,55.859246)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.469045,55.877783)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.578181,55.845658)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.51635,55.810607)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.594647,55.6492)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.428899,55.889295)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.583939,55.846123)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.475162,55.867854)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.483607,55.783099)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.483607,55.783099)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.500279,55.869339)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.70832,55.78318)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.517051,55.859059)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.577525,55.84629)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.547818,55.790347)));
    map.addOverlay(new YMaps.Placemark(new YMaps.GeoPoint(37.525738,55.801415)));
}

Как прописать name и description пока тоже не знаю!

Хочу просто чистенько и аккуратненько!

День сегодня тяжелый, мыслей нет)

Заранее спасибо!!!

13 комментариев
Михаил Кротов
28 января 2016, 06:21
Ну это не вариант! Я спрашиваю как лучше загнать в массив значения или так писать! Как задать имя меток и тд..! Мне YMapsML совсем ненужен!
Sergey Konstantinov
28 января 2016, 06:21

var hotels = [

  { point: '37.646768,55.822463', name: 'Имя1', description: 'Описание 1' },

  // И так 29 раз

];

function getCollection (data) {

   var collection = new YMaps.GeoObjectCollection();

   YMaps.jQuery.each(data, function (i, element) {

       var pm = new YMaps.Placemark(YMaps.GeoPoint.fromString(element.point));

       pm.name = element.name;

       pm.description = element.description;

       collection.add(pm);

   });

   return collection;

}

function show_hotels () {

   map.addOverlay(getCollection(hotels));

}

Михаил Кротов
28 января 2016, 06:21
Спасибо, именно это я и искал! )
Михаил Кротов
28 января 2016, 06:21

Читаю документацию и удивляюсь!

Для кого она написана???

Вот есть у меня код,

var hotels = [

  { point: '37.646768,55.822463', name: 'Имя1', description: 'Описание 1' },

  // И так 29 раз

];

function getCollection (data) {

   var collection = new YMaps.GeoObjectCollection();

   YMaps.jQuery.each(data, function (i, element) {

       var pm = new YMaps.Placemark(YMaps.GeoPoint.fromString(element.point));

       pm.name = element.name;

       pm.description = element.description;

       collection.add(pm);

   });

   return collection;

}

function show_hotels () {

   map.addOverlay(getCollection(hotels));

}

Теперь для точек перечисленных в массиве я хочу задать позиционирование и масштаб!

Для этого есть класс 
                   
YMaps.Bounds. и констуктор YMaps.CollectionBounds(point) но как его применять непонятно!!!

Возникает путаница!

Подскажите пожалуйста как мне задать центр карты имея:

var hotels = [
    { point: '37.646768,55.822463', name: 'Имя1', description: 'Описание 1' },
];

function getCollection (data) {
var seton = new YMaps.GeoCollectionBounds();
    var collection = new YMaps.GeoObjectCollection();
    YMaps.jQuery.each(data, function (i, element) {
        var pm = new YMaps.Placemark(YMaps.GeoPoint.fromString(element.point), {style: "default#houseIcon"});
        pm.name = element.name;
        pm.description = element.description;
        collection.add(pm);
        seton.add([new YMaps.GeoPoint(element.point)]);

    });
    return collection;
}
function list_hotels () {
    map.removeAllOverlays();
    map.addOverlay(getCollection(hotels));
}

скрывайте код под врезки.

 

 seton.add([new YMaps.GeoPoint(element.point)]);

 

у вас element.point - строка

конструктор new YMaps.GeoPoint ждет два Number-а (долготу и широту)

нужно использовать YMaps.GeoPoint.fromString который на 5 строчек выше в вашем коде

И массив (квадратные скобки) не нужен вы же по одной точке добавляете

 

Документация нормальная. Рекомендую почитать книжку по javascript

Михаил Кротов
28 января 2016, 06:21

Читал и использую как настольную!

Но доки непонятные!

Что из себя представляет YMaps.GeoCollectionBounds(); что возвращает в результате и где использовать этого ненаписано!

как добавляет метогд add и куда он добавляет, в каком виде!

И основное, нет записей типа

Метод: add

Синтаксис: YMaps.GeoCollectionBounds.add (point)

Описание: add - метод для GeoCollectionBounds, добавляет новую точку куда то там после чего что там происходи, неясно что и в результате карта устанавливается по центру и сама масштабируется!

В качестве point - строка с координатами гео точки.

Пример использования метода:

****************

Вот так например!  Ну и естественно зависимости и с чем можно использовать!

Может тот кто хочет написать себе сервис на основе ваших карт, который он не напишет сам  и будет разбираться и каждую строчку вычитывать ваших доков, но те кому нужно побыстрому склепать простую карту и вывести 2 функции, то это очень геморойно и за 10 минут не разобраться!

Доки не оптимизированы, а сделаны реально как ДОКИ и не как помошник!

Есть справочник по програмному интерфейсу 

Он написан как референс. там есть описания всех методов и свойств их тип и возвращаемое значение.

Примеров использования каждого метода в справочнике нет иначе он будет огромный.

 

Есть руководство разработчика которое от простого к сложному на понятном языке с примерами объясняет основные сценарии работы с АПИ.

 

что именно, на ваш взгляд, не так написано?

 

Михаил Кротов
28 января 2016, 06:21

На мой взгля отделять справочник по програмному интерфейсу  и руководство разработчика не стоит, т.к справочник и сделан для разработчика! 

В руководстве должно быть все описано от програмного интерфейса до непосредственной разработки!

Должно быть написано доступным языком и последовательно (иерархично) типа что откуда и к чему! А то приходиться тут смотреть, там смотреть! А тут примеров нет идешь смотреть примеры в другое место ну и тд!

Михаил Кротов
28 января 2016, 06:21

Неужели получилось!

function getCollection (data) {
var seton = new YMaps.GeoCollectionBounds();
    var collection = new YMaps.GeoObjectCollection();
    YMaps.jQuery.each(data, function (i, element) {
        var pm = new YMaps.Placemark(YMaps.GeoPoint.fromString(element.point), {style: "default#houseIcon"});
        pm.name = element.name;
        pm.description = element.description;
        collection.add(pm);
        seton.add(new YMaps.GeoPoint.fromString(element.point));
    });
    map.setBounds(seton);
    return collection;
}

Обидно что пришел я к результаты не прочитав документацию и разобравшись, а прочитав документацию, спросив 10 раз в клубе и потыкав непонятно как! Хотя в общем то сложного ничего нет, но представление информации очень и очень скудное!

Теперь я уже понимаю как тут у вас все устроено и как работает и дальше постараюсь детальней разбираться!!!

Всем большое спасибо за участие, очень признателен!

 map.setBounds(seton); это некместу. В в функции в которая возвращает коллекцию, двигаете карту. Выкидывайте это действие туда где добавляете эту коллекцию на карту. Работает оно и так, но как-то неаккуратненько.

Если почитать возможности апи, ты вы увидете что bounds для коллекции можно вычислить по другому.http://api.yandex.ru/maps/jsapi/doc/ref/reference/geoobjectcollection.xml

Что из себя представляет YMaps.GeoCollectionBounds(); что возвращает в результате и где использовать этого ненаписано!

Ай-я-яй! Вы даже не пытались смотреть документацию. Все там написанно(смотрите ссылочку выше).  Задать вопрос не попытавшись разобраться самостоятельно это очень плохая практика. Так как: а) получение ответа занимает больше времени б) создает о вас отрицательное мнение.

Александр Новиков
28 января 2016, 06:21

Не надо так категорично ;)

Файл YMapsML намного проще править, чем копаться в исходниках...

Да и в результате код смотрится лучше ;)

Михаил Кротов
28 января 2016, 06:21
Я скорее всего так категоричен, в сяви с тем что пока мало разбираюсь в Yandex Api )) Буду изучать) Спасибо за совет!