Клуб API Карт

июнь 2015
Получение центра кластера
Алекс
1 июня 2015, 10:55

Здравствствуйте! Пытаюсь делать так, чтобы при наведении на ссылку с id=14 менялась иконка кластера и происходило плавное перемещение к кластеру. Но так ничего не меняется. Нужна ваша помощь.

            $('#14').bind('mouseenter', function (e) {
            myMap.panTo( myMap.geoObjects.get($(this).find('[id=14]')).getClusters(), {delay: 1500} );
            myMap.geoObjects.get($(this).find('[id=14]')).options.set({ iconLayout: 'default#image', iconImageHref:'img/map3.png', iconImageSize: [29, 39],     iconImageOffset: [-29, -39]});

3 комментария
кластеризатор,события,API 2.1
убрать зум по двойному клику
Игорь Воробьёв
1 июня 2015, 11:02

Подскажите как убрать или запретить зум по двойному клику на карте?

1 комментарий
API 2.1,поведения карты
Изменение меток для группы объектов
khomchanovsky
1 июня 2015, 12:09

Добрый день!

Необходимо изменить стандартные метки на свои картинки. Каждой метке должна соответствовать своя собственная картинка!

Карта сделана по примеру из песочницы https://tech.yandex.ru/maps/jsbox/2.1/object_list.

Метки старался менять по этому примеру https://tech.yandex.ru/maps/jsbox/2.1/icon_customImage.

По-видимому команду iconImageHref ставлю куда-то не туда. Хотя пробывал разные варианты и в object_list.js и в groups.js.

В программировании не силен, поэтому надежда только на Вас.

Единственное, что получилось, так это сменить все метки на одну картинку, но мне-то нужно чтоб каждой иконке соответствовала своя картинка...

 function createSubMenu (item, collection, submenu) {

        // Пункт подменю.

        var submenuItem = $('<li><a href="#">' + item.name + '</a></li>'),

        // Создаем метку.

            placemark = new ymaps.Placemark(item.center, {balloonContent:item.balloonContent },

{

 

iconLayout: 'default#image',// ЭТИ 2 СТРОЧКИ Я ВПИСАЛ, В НАДЕЖДЕ ЧТО МЕТКИ ИЗМЕНЮТСЯ НА КАРТИНКУ.

iconImageHref: 'algae.gif'  // ОНИ ДЕЙСТВИТЕЛЬНО ИЗМЕНИЛИСЬ, ОДНАКО ОНИ ВСЕ ОДИНАКОВЫЕ

 

});

Пробывал ставить ссылки в файл groups.js, тогда совсем ничего не происходит...В консоли ошибок не показывает, вот ссылка на всю папку с сайтом https://yadi.sk/d/-BasuTJ8gzSG9

4 комментария
Как сделать такие метки
slepoff.al
1 июня 2015, 12:13

Подскажите, как сделать такие метки с надписями https://yadi.sk/i/BPnltlzpgzSas

2 комментария
метка,API 2.1
Элементы управления на мобильной версии
Александр Белый
1 июня 2015, 13:56

Добрый день. Установил API 2.1 в мобильную версию.

 

myMap = new ymaps.Map("myMap", {
   center: [55.76, 37.64],
   zoom: 15,
   controls: ["smallMapDefaultSet"]
});

 

Однако, кнопки управления картой очень маленькие.

 

 

Скажите, как можно исправить этот недуг? Может надо указать картам, что надо использовать мобильную версию?

 

PS на телефоне отображается так же...

3 комментария
элементы управления,API 2.1,мобильные устройства
api 2.0 в ie6
Скляров Роман
1 июня 2015, 14:30

Здравствуте! 
Возникла спечцифичная задача как отображение карты на ie6 (данный браузер стоит на терминалах)

Функционал написан на апи карт 2.0 и там кода довольно не мало. переписывать такое-же функционал на апи 1.x не очень хочется к тому же делал не я. Можно как-то добиться чтобы карта показыала тили. Сейчас просто серый квадрат с бекграундом яндекса и это просто на голой странице при обычной инициализации карты.

Помогите пожалуйста, может есть какой-то способ старую карту подгрузить хотябы.

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

 

3 комментария
слои,IE6,IE,API 2.0
Не отображается картинка в баллуне меток загруженных с помощью ymapsml
Евгений Закиров
1 июня 2015, 15:56

код:

 

        var myMap = new ymaps.Map("show-base", {

            center: [53.346930035079104,83.77647585253904], 

            zoom: 8,

            controls: ['smallMapDefaultSet']

        });

 

        ymaps.geoXml.load('http://tur.flyleaf.su/hostels/default/ymapsml/1/?d=556c5116c5880')

            .then(onGeoXmlLoad);

        function onGeoXmlLoad (res) {

            myMap.geoObjects.add(res.geoObjects);

 

            if (res.mapState) {

                res.mapState.applyToMap(myMap);

            }

        } 

 

 

http://tur.flyleaf.su/hostels/default/ymapsml/1/ метки отсюда.

В шаблоне баллуна загружаемых меток я подставляю <img src="$[metaDataProperty.AnyMetaData.link]" /> (http://tur.flyleaf.su/hostels/default/ymapsml/1/) но в результате, при выводе меток на карте, картинка не отображается, в коде: <img > , при этом ссылка на картинку точно существует, если в шаблоне указать: $[metaDataProperty.AnyMetaData.link], то выведется текст ссылки на картинку.

https://yadi.sk/i/glNbIREDgzjyr

что я делаю не так?(

ps: к примеру если поменять здесь  <img src="$[metaDataProperty.AnyMetaData.link]" />  src на alt , то ссылка выведется нормально, картинки естественно не будет, но: https://yadi.sk/i/cAKovBeAgzkyN

2 комментария
API 2.1,шаблоны,YMapsML
Зависание браузера на большом кол-ве объектов
Удалённый пользователь
1 июня 2015, 17:20

Строго говоря, объектов не так уж и много, 3500. Но при попытке добавить их в геоколлекцию и вывести эту коллекцию на карту браузер просто умирает.

 

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

 

Объекты приходят из отдельного файла в виде JSON:

 

Points.stores =  [{"id":"1", "name":"ТУТ ИМЯ", "lat":"55.751656", "lng":"37.71718", "descript":"ОПИСАНИЕ", "type":"ТИП", "sell":"1", "refill":"1" ,"refund":"0"},.....]

 

После создания карты, обычным образом создаю метки:

 

map = new ymaps.Map('map', {

            center: [55.754015, 37.618827],

            zoom: 15

        });

collection = new ymaps.GeoObjectCollection();

for (var i = 0; i < Points.stores.length; i++) {

            marker = new ymaps.Placemark([Points.stores[i].lat, Points.stores[i].lng], {

                    iconContent: i,

                    balloonContent: Points.stores[i].descript,

                    content: Points.stores[i].descript

                },{

                    preset: 'islands#blueStretchyIcon'

                });

              collection.add(marker); //вот тут все умирает

}

map.geoObjects.add(collection);

 

Пробовал создавать коллекции по запросу,  а не при инициализаии карты; вносить метки в атрибуты самих объектов Points, но работает хоть как-то только если уйти от коллекций. Где-то что-то я не замечаю. Прошу помощи.

2 комментария
коллекция,метка,API 2.1,коллекции
wordpress
noname4343
1 июня 2015, 17:46

Доброго дня коллеги! Попросили прикрутить карту к сайту на wordpress, но что то пошло не так... карта хоть увеличивай хоть уменьшай остается "непрогруженной " и даже при изменении схемы на другие виды карт не помогают, не могу понять в чем дело, направьте на путь истинный..

4 комментария
WordPress
Как найти и удалить маршрут через geoQuery?
Aleksey Korsakov
1 июня 2015, 20:33

Задача состоит в том, чтобы удалить маршрут. При его создании задаю маршруту имя:

route.name='myway';
В другой части программы пытаюсь его найти:
var result = ymaps.geoQuery(myMap.geoObjects).search("name = 'myway'");

Но такая конструкция не работает. Как быть? Или есть другой способ удаления маршрута?

1 комментарий
Moscow API Meetup: видео
tech.yandex.ru
2 июня 2015, 13:09
Видеозаписи докладов с мероприятия Moscow API Meetup уже доступны на events.yandex.ru! Встреча сообщества прошла 28 мая: в зале московского офиса Яндекса собрались специалисты из разных сфер, чья деятельность так или иначе связана с API.

Всего выступлений было четыре. Закрывал встречу Роман Акинфеев – руководитель группы разработки ядра облачной платформы Яндекса. Роман объяснил, как у нас построен процесс разработки API облачных сервисов и какие подходы с технологиями в нём задействованы. Обычно о том, как при создании API правильно применять технологии, в докладах не говорят, так что выступление Романа стало своего рода исключением.


Все видео выложены на странице мероприятия.

Оригинал заметки опубликован в новостях tech.yandex.ru
Нет комментариев
видео,новости,мероприятия
Фильтрация меток из БД
romDOSI
2 июня 2015, 13:48

Здравствуйте!

Интересует вопрос во поводу фильтрации меток на карте выводящиеся из БД.

Просмотрел пример https://tech.yandex.ru/maps/jsbox/2.0/geoobjects_menu , всё понятно, всё получается.

Но, как сделать, чтобы метки фильтровались выводясь из базы данных ?

Также в примере метки прописываются вручную, (...coordinates: [62.0410, 129.717]...) у нас же они ставятся по клику по карте, т.е. все сведения об метке заносятся в БД сайта и выводятся на карту.

Прошу помощи..

4 комментария
API 2.1
Ограничить поиск ('searchControl') Ленинградской областью
akon1982
2 июня 2015, 15:48

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

Например, пытался сделать так: 

var LenOblBounds = new YMaps.GeoBounds(new YMaps.GeoPoint(58.42032164, 27.75087718),new YMaps.GeoPoint(61.49507945, 35.74420556));
 var searchControl = new ymaps.control.SearchControl({
     options: {
         //boundedBy : [58.42032164,27.75087718][61.49507945,35.74420556],
         boundedBy : LenOblBounds,
         strictBounds : true
     }
    });
    globus.controls.add(searchControl);

 http://jsfiddle.net/dmfp8jj6/

 globus.controls.add('searchControl',{boundedBy : [58.42032164,27.75087718][61.49507945,35.74420556],strictBounds : true});

 

Но ничего не меняется. Например, ввожу "улица" - выдаёт Приморскую улицу в Одессе

 Ссылка на изображение подтверждающее это

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

2 комментария
API 2.1,элементы управления,поиск,область видимости,контролы
Баг с заливкой регионов, а также прекращение срабатывания событий
eduard.dyckman
2 июня 2015, 18:11

Здравствуйте! В проекте используется АПИ регионов и были замечены два неприятных бага. 

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

2. Если программно перенести активную область карты (при помощи метода map.setBounds) куда-нибудь в Чукотский автономный округ, то этот регион перестаёт бросать события

Песочница: http://jsfiddle.net/cnvyvse9/

8 комментариев
регионы,API 2.1,события
Печать яндекс карты
alex.nezdanov
3 июня 2015, 15:42

День добрый.

Столкнулся с проблемой: создаю карту, добавляю к ней Placemark, пытаюсь напечатать страинцы с картой, но при печати на карте вместо меток пустые квадраты ...

Код добавления Placemark:

yMap.geoObjects.add(new ymaps.Placemark([Latitude, Longitude],{balloonContentBody: title,},
                             {iconLayout: 'default#image',
                                iconImageHref: '/img/mapmarker.png',
                                iconImageSize: [35, 42],
                                iconImageOffset: [-17, -40]
                            }));

Версия карт: 2.1

2 комментария
печать карты,API 2.1
Нужна помощь: выпадающий список объектов
Игорь Р.
3 июня 2015, 18:54

Добрый день! Давно использую карты. Но сейчас ради эксперимента задался целью, как сделать выпадающий список определенных городов?

Пример посмотрел https://tech.yandex.ru/maps/jsbox/2.1/list_box_layout все возможно. Но как это реализовать?

В конструктуре генерим код:

<script type="text/javascript" charset="utf-8" src="https://api-maps.yandex.ru/services/constructor/1.0/js/?sid=NZFJUw3f7b9xvx1S2R41gK8RKBKyPLwtg&width=100%&height=500" ></script>

 

А дальше что? Как подключить код выпадающего списка?

Надо создать и подключить скрипт в вышеуказанный код?

Подскажите пожалуйста, буду очень благодарен.

4 комментария
API 2.1,элементы управления,контролы,выпадающий список,конструктор
Как сделать балун с переадресацией на внешнюю ссылку?
MaksTihomirow
3 июня 2015, 20:21

Если сделать balloonContent:['http://yandex.ru'] то сначала откроется балун, а потом можно будет кликнуть по ссылке.

 

А как сделать так, чтобы сразу был переход по ссылке как это реализовано вот тут: http://www.baikalsr.ru/city/geo_map/

Без открытия балуна

13 комментариев
Javascript,API 2.1
Проблема версии 2.1.26 (решено)
igordev
4 июня 2015, 08:37

Добрый день! Более года код работал четко, но в 2.1.26 появилась проблема, если принудительно переключаю на 2.1.23 то все снова работает.

Смоделировать можно так: Ссылка на карту выбрать водоем Солдатское, открыть балун и в нем нажать "проезд от Прохладного". После этого отрисовывается проезд но изчезают тайлы карты....

 

 ymaps.geoXml.load(item.url + '?' + timestamp).then(function (res) {
   res.geoObjects.options.set( {
      iconLayout: 'default#image',
      iconImageHref: 'http://igordev.ru/Devices/FishingMapKBR/i.png',
      iconImageSize: [16, 27],
      iconImageOffset: [-8, -26],
      strokeColor: '#FF0000',
      strokeWidth: 2,
      preset: 'gpx#interactive',
      balloonContentLayout: myPropLayout
   });

   myMap.geoObjects.add(res.geoObjects);
   myMap.setBounds( res.geoObjects.getBounds() ,{duration:500, checkZoomRange:true});
}, function (err) { console.log('Ошибка загрузки ' + err);  } );

 

Проверял в IE и Firefox, в консоль ошибки не вываливаются, но при приближении и удалении карты тайлы не запрашиваются и не подгружаются, соответственно карта без тайлов но с метками... в 2.1.23 и ранних все работало без нареканий...

 

Спасибо!

3 комментария
слои,API 2.1
Интеграция с GWT - поставить Placemark
Александр Боровков
4 июня 2015, 09:22

Получается загрузить карту, сменить центр. Но при работе с PlaceMark возникает ошибка 

 

    function GeoObject (feature, options) {
        this.geometry = componentCastGeometry(feature && feature.geometry);
        this.properties = componentCastProperties(feature && feature.properties);
        this.state = new DataManager();
        this.options = new OptionManager(options, null, 'geoObject', geoObjectOptionMapper);
        this.events = new EventManager({
            context: this
        });
        this._geoObjectComponent = this.createGeoObjectComponent(); //<--------------  Здесь
    }



Ловлю

 

SCRIPT438: Объект не поддерживает свойство или метод "createGeoObjectComponent" 
combine.xml, строка 26381 символ 9

т.е. каким то образом этот конструктор вызывается когда в this нет методов определных в defineClass 

  

 Введите содержимое врезки

 

Некотрые цитаты из gwt кода:

ScriptInjector
    .setWindow(ScriptInjector.TOP_WINDOW)
    .setCallback(new Callback<Void, Exception>() {
        @Override
        public void onFailure(Exception reason) {
            ErrorHandler.handle(reason);
        }
        @Override
        public void onSuccess(Void result) {
            initJs(id);
        }
    }).inject();
//...
    protected native void initJs(String id) /*-{
        var ymaps = $wnd.ymaps;
        ymaps.ready(init);
        var _this = this;
        function init() {
            _this.@ru.cft.qpay.admin.webapp.client.ui.widget.YandexMapWidget::map = new ymaps.Map(id, {
                center: [55.76, 37.64],
                zoom: 7
            });
            _this.@ru.cft.qpay.admin.webapp.client.ui.widget.YandexMapWidget::setReady()();
        }
    }-*/;
//...
  protected native void setMarker(double latitude, double longitude)/*-{
        var ymaps = $wnd.ymaps;
        var placeMark = ymaps.Placemark([latitude, longitude]);
        this.@ru.cft.qpay.admin.webapp.client.ui.widget.YandexMapWidget::map.geoObjects.add(placeMark);
    }-*/;
5 комментариев
Uncaught TypeError: Cannot read property 'setCenter' of undefined
himerafrontier
4 июня 2015, 11:43

Добрый день, пытался соединить несколько примеров в один, но появляется ошибка "Uncaught TypeError: Cannot read property 'setCenter' of undefined". Чем она может быть вызвана?

 

Код примера, где ошибка есть:

 

button.html
<!DOCTYPE html>
<html>
<head>
    <title>Примеры. Добавление кнопки на карту</title>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
    <!-- Если вы используете API локально, то в URL ресурса необходимо указывать протокол в стандартном виде (http://...)-->
    <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>
    <script src="button.js" type="text/javascript"></script>
<style>
        html, body, #map {
            width: 600px; 
height: 500px; 
padding: 0; 
margin: 0;
        }
    </style>
</head>
<body>
<div id="map"></div>
    <div id="buttons">
        <input type="button" value="Изменить центр" onclick="setCenter();" />
    </div>
</body>
</html>

button.js
ymaps.ready(init);
var myMap;
function init () {
    var myMap = new ymaps.Map('map', {
            center: [48.0345, 38.4820],
            zoom: 14,
            controls: []
        }),
        firstButton = new ymaps.control.Button("Кнопка");
    myMap.controls.add(firstButton, {float: 'right'});
    var secondButton = new ymaps.control.Button({
        data: {
            // Зададим текст и иконку для кнопки.
            content: "Адаптивная кнопка",
            // Иконка имеет размер 16х16 пикселей.
            image: 'images/error.png'
        },
        options: {
            // Поскольку кнопка будет менять вид в зависимости от размера карты,
            // зададим ей три разных значения maxWidth в массиве.
            maxWidth: [28, 150, 178]
        }
    });
    myMap.controls.add(secondButton);
    // Будем искусственно переключать размеры кнопки каждую секунду, чтобы показать все варианты
    // внешнего вида кнопки.
    // При изменении размера карты эти перестроения будут происходить автоматически.
    function changeSize  () {
        var oldSize = secondButton.options.get('size'),
            newSize;
        switch (oldSize) {
            case 'small': newSize = 'medium'; break;
            case 'medium': newSize = 'large'; break;
            case 'large': newSize = 'small'; break;
            default: newSize = 'small';
        }
        secondButton.options.set('size', newSize);
    }
    window.setInterval(changeSize, 1000);
}
function setCenter () {
myMap.setCenter([48.0345, 38.4820])
}

 

Код, где та же функция не вызывает ошибку

 

mapparams.html
<!DOCTYPE html>
<html>
<head>
    <title>Примеры. Задание и изменение параметров карты.</title>
    <meta http-equiv="Content-Type"
          content="text/html; charset=windows-1251"/>
    <!-- Если вы используете API локально, то в URL ресурса необходимо указывать протокол в стандартном виде (http://...)-->
    <script src="http://api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>
    <script src="mapparams.js" type="text/javascript"></script>
<style>
        html, body, #map {
            width: 600px; 
height: 500px; 
padding: 0; 
margin: 0;
        }
    </style>
</head>
<body>
    <div id="map"></div>
    <div id="buttons">
        <input type="button" value="Изменить центр" onclick="setCenter();" />
        <input type="button" value="Изменить границы" onclick="setBounds();" />
        <input type="button" value="Изменить тип и плавно переместиться" onclick="setTypeAndPan();" />
    </div>
</body>
</html>

mapparams.js
ymaps.ready(init);
var myMap;
function init () {
    // Параметры карты можно задать в конструкторе.
    myMap = new ymaps.Map(
        // ID DOM-элемента, в который будет добавлена карта.
        'map',
        // Параметры карты.
        {
            // Географические координаты центра отображаемой карты.
            center: [55.76, 37.64],
            // Масштаб.
            zoom: 14,
            controls: []
        }
    );
}
function setCenter () {
myMap.setCenter([48.0345, 38.4820])
}
function setBounds () {
    // Bounds - границы видимой области карты.
    // Задаются в географических координатах самой юго-восточной и самой северо-западной точек видимой области.
    myMap.setBounds([[37, 38], [39, 40]]);
}
function setTypeAndPan () {
    // Меняем тип карты на "Народный гибрид".
    myMap.setType('yandex#publicMapHybrid');
    // Плавное перемещение центра карты в точку с новыми координатами.
    myMap.panTo([62.915, 34.461], {
            // Задержка между перемещениями.
            delay: 1500
        });
}
2 комментария