Клуб API Карт

Помогите сделать карту Wi-Fi hotspot точек

Антон
18 мая 2014, 00:00

Хотелось бы реализовать карту уже на последней версии 2.1

 

Активно читаю API Yandex maps http://api.yandex.ru/maps/jsbox/2.1/ но пока мне никак не получаеться слепить то, что мне нужно ... Я как-то не могу разные примеры слепить в один.

 

1. Мне нужна карта области на которой видно 3-х города. В этих городах есть точки бесплатного Wi-Fi я хочу их обьеденить в кластеризатор.

( http://api.yandex.ru/maps/jsbox/2.1/clusterer_create )

2. Картинка точек должна быть своей. ( http://api.yandex.ru/maps/jsbox/2.1/icon_customImage )

3. На карте или под ней должна быть кнопка выбора города ( http://api.yandex.ru/maps/jsbox/2.1/list_box_layout )

4. По нажатии на точку, должен отображаться текст и фотография (чтобы можна было на каждую точку написать свой текст и добавить фото)

5. И последнее можно ли сделать так, что при приближении на маштаб 17-18 появлялась область охвата Wi-Fi ( пример http://wifi.ua/ )

 

Заранее большое спасибо за помощь. Буду рад любой подсказкой и всевозможными примерами. Спасибо.

12 комментариев
Подписаться на комментарии к посту

1. Берете точки, грузите их и вбрасываете в кластеризатор. В примерах все есть. Оно само заработает. Выставить нужное разрешение можно либо по заранее заданным координатам, либо через геокодер — он возвращает удобную область видимости и зум для городов. Геокодер: http://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/geocode.xml 

2. Проще всего передать свою картинку в кластеризатор. Вот такие объекты там используются чаще всего: http://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/ClusterPlacemark.xml

3. Это вам с контролами придется разобраться. Я бы копал в эту сторону: http://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/control.ListBox.xml Создаете его с нужными городами и вбрасываете его на карту. В т.ч. вешаете нужные события, чтобы при смене менялись boundingBox (boundedBy) и zoom.

4. Это балуны. При вбросе точек в кластеризатор можете задать нужный контент в них. Возможно, будет достаточно. Объект: http://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/Balloon.xml Ну и ClusterPlacemark опять же (ссылка выше).

5. Можно. http://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/Map.xml#events-summary — события boundschange, там смотрите какой зум и рисуете покрытие. Покрытие можно рисовать либо геометрией (там же в доках), либо отдельным слоем (для этого надо будет его подготовить).

 

Вот как-то так ;-)

Подскажите еще пожалуйста, может есть какие-то готовые примеры или решения от чего можно отталкиваться? Спасибо.

Сразу хочу попросить прощение за глупый вопрос. Но как правельно применять примеры которые приведенны в документации ? Например, http://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/control.ListBox.xml

Беру тут пример:

// Пример 1. // Обработка клика на элементах списка. var cityList = new ymaps.control.ListBox({ data: { content: 'Выбрать город' } items: [ new ymaps.control.ListBoxItem('Москва'), new ymaps.control.ListBoxItem('Новосибирск'), new ymaps.control.ListBoxItem({options: {type: 'separator'}}), new ymaps.control.ListBoxItem('Нью-Йорк'), ] }); cityList.get(0).events.add('click', function () { map.setCenter([55.752736, 37.606815]); }); cityList.get(1).events.add('click', function () { map.setCenter([55.026366, 82.907803]); }); cityList.get(3).events.add('click', function () { map.setCenter([40.695537, -73.97552]); }); map.controls.add(cityList, { floatIndex: 0 });

Как его правельно всунуть в script Яндекс карты ?

Вот например, сделал страницу с метками, как обьеденить метки в кластеризатор ?

http://jsfiddle.net/s6fcF/1/

http://jsfiddle.net/qfox/2UgZu/ — ну вот как-то так ;-)

я подключил карту в режиме mode=debug (слева) для удобства отладки и jquery там не используется.

когда тестируете — открывайте консоль (f12 в хроме) и смотрите ошибки.

предполагается, что города и точки вайфай вы будете загружать с сервера отдельно через js-файлики, в которых описываются те самые переменные с wifiDots и cities. если есть вопросы — спрашивайте. ;)

Когда создавал тему, даже и не думал что получу такую помощь ! Спасибо вам за готовые примеры, что тыкнули носом и помогли разобраться во многом.

Не совсем понял, как я буду загружать с сервера отдельно через js-файлики. Я планировал все заносить вручную, я знаю где размещенны точки вай-фая, вот по памяти и буду раставлять их на карте. Или есть иной, лучший способ как это реализовать?

По сути мне осталось прикрутить к вашему примеру только то, что когда маштабирование идет к 18-ти, появляються границы дальности сигнала вай-фай. Я что-то подобное когда-то делал, но мне кажеться это пародия ( http://www.free-wifi.com.ua/cover.html )

Ну как смог помог.

Если достаточно сделать кружки вокруг wifi точек и только на зумах, скажем, 16-18 — то я бы смотрел в сторону geometry. Правда, создавать и удалять их придется в момент смены зумов — входим в 16-18 — отображаем, выходим — удаляем. И, в идеале, рисовать их только в случае, когда геометрия будет видна — иначе нет смысла.

Событие смены зума я вам кидал, остается немножко попрограммировать ;-)

Хотя, вариант, который используется на этой страничке — тоже вариант. Но придется ограничится одним зумом, либо же для каждого зума делать свои стили, и поколдовать с ними. Менее стабильный, чем range wifi точки, который можно математически рассчитать и выбросить как ymaps.geometry.Circle http://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/geometry.Circle.xml и http://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/Circle.xml

Помогите пожалуйста еще с реализацией кругов вокруг точек. Чтобы появлялись круги при маштабировании на 17-18

Взято тут: http://api.yandex.ru/maps/jsbox/2.1/button

Код: map.controls.add(firstButton, {float: 'right'});

Лезу в доку. Нахожу у map поле controls: http://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/Map.xml#properties-summary Лезу дальше в control.Manager, потому что именно этот класс используется для controls, и смотрю метод add: http://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/control.Manager.xml#methods-summary и http://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/control.Manager.xml#add

Как засунуть — внутри ymaps.ready вы создаете карту (var map = new ymaps.Map('map')) и после пользуетесь map.controls.add. см. пример с button (первая ссылка).


p.s. Я бы создавал этот контрол так:

var cities = [
  {id: 1, name: 'Москва', coord: [55.026366, 82.907803]},
  {id: 2, name: 'Новосибирск', coord: [55.752736, 37.606815]},
  {id: 3, name: 'Нью-Йорк', coord: [40.695537, -73.97552]}
];

var cityListItems = [];
for (var i = 0, l = cities.length; i < l; i += 1) {
  var cityListItem = new ymaps.control.ListBoxItem(cities[i].name, cities[i]);
  cityListItem.events.add('click', function () {
    map.setCenter(this.data.coord); // тут не уверен.
  });
  cityListItems.push(cityListItem);
}
var cityListControl = new ymaps.control.ListBox({
  data: { content: 'Выбрать город' },
  items: cityListItems
});

map.controls.add(cityListControl);


Есть проблемы, снова вынужден просить у Вас помощи.

Не могу к вашему примеру прикрепить свою иконку на роставленные координаты точек. Иконка просто не появляеться. Путь к иконке: http://free-wifi.com.ua/image/wifi.png

{

        coord: [48.442152, 22.718870],

        balloon: 'Mukachevo',

        color: '#1faee9',

        iconLayout: 'default#image',

        iconImageHref: 'http://free-wifi.com.ua/image/wifi.png'

    },

И еще, так и не сумел разобраться как правильно сделать чтобы при приближении карты на координаты 17-18 появлялись кругы сигнала. Прошу помочь, заранее большое спасибо.

Вот так выглядит карта которую я делаю.
http://jsfiddle.net/Tonchi/agAD4/1/

Я так понимаю что координаты должны выглядеть так? У меня не получаеться :(

{

        coord: [48.442152, 22.718870],

        balloon: 'Mukachevo',

        color: '#1faee9',

       var circleGeometry = new ymaps.geometry.Circle([48.44, 22.71], 20),

        iconLayout: 'default#image', // иконка

        iconImageHref: 'http://free-wifi.com.ua/image/wifi.png' // иконка

    } 

http://jsfiddle.net/Tonchi/agAD4/2/

Добавил такой кусок кода, и круг на одной из точек появился. Но как сделать на множественное количество точек? дублировать такие куски кода ? и как сделать чтобы при маштабировании на 15-14-13-12 и т.д. круг просто пропадал.

    // Создаем геодезический круг радиусом 25 метров.

    var circle = new ymaps.Circle(

        [[48.440189, 22.717202], 25],{}, {

        geodesic: true

    });

    // Добавляем круг на карту.

    myMap.geoObjects.add(circle);

И есть ли возможность изменять цвет круга ?