Клуб API Карт

август 2016
Шеф, все пропало. Точнее все перестало вдруг работать, или начало работать не корректно.
Андрей Карнаух
1 августа 2016, 10:25

Здравствуйте, Совсем запарился, вдруг перестало все работать, точнее маркеры перестали отрисовываться, не верное определение региона. Как на локальном так и в продакшене. Думал может что-то допиливают, уже 3 день не работает, Полез проверил комиты, ничего нового не комитил. Подскажите что делать, не хочеться все переписывать.

7 комментариев
Яндекс.Карты в нативном приложении под iOS с помощью JavaScript API
ymapsapi
1 августа 2016, 10:32

Хорошие новости для всех, кто хочет интегрировать Яндекс.Карты в мобильное приложение.
Мы опубликовали iOS-фреймворк, позволяющий использовать JavaScript API версии 2.1 в вашем проекте с помощью CocoaPods.

Подключите фреймворк всего одной строчкой в Podfile, и вы уже можете добавить карту в своё приложение. Мы подготовили пример JS-кода карты, чтобы вы сразу могли увидеть результат.   

Описание и подробные инcтрукции по установке вы найдете на GitHub
Также данный фреймворк и модули, расширяющие функциональность JS API, описаны в нашей документации.

Команда разработчиков API Яндекс.Карт

6 комментариев
модули,API 2.1,iOS,новости
Метка не добавляется на сайте
Khurshedi-abdu
1 августа 2016, 15:43

На сайте почему то не добавляются метки, а тут https://jsfiddle.net/4Lh38h12/ все норм работает, что не так? 

6 комментариев
maps.yandex.ru
Расчёт стоимости доставки
rais-ja
2 августа 2016, 09:50

Доброго дня!

Искал решение, но не нашел. Сам ещё не могу решить задачку.

Имеем: https://tech.yandex.ru/maps/jsbox/2.1/deliveryCalculator

С двумя полями ввода, не есть удобно для нас. Как реализовать точку "А" по умолчанию и вывести только одно поле ввода?

Буду благодарен за помощь!

1 комментарий
Калькулятор доставки автомобилем и общ. транспортом
buhacker
3 августа 2016, 15:59

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

https://jsfiddle.net/buhacker/nvypee9g/#&togetherjs=wR0PUu9vGe

Интересно услышать замечания знающих людей

2 комментария
маршрутизация,калькулятор,примеры пользователей
При загрузке карты изменяется прорисовка шрифта DinPro
KePAMuK
4 августа 2016, 08:40

Загружаю карту на страницу и изменяется шрифт, стоновиться менее жирным и менее читаемым, если в коносли удалить карту, то шрифт возвращается на нормальный, с чем это связано ?

1 комментарий
По клику на ссылку города, центрировать и выделять границу города на Яндекс карте
veremeev.al
4 августа 2016, 15:23

Есть Список городов, по клику на город, карта центрируется, а как выделить границу города, как на самой карте яндекса реализованно. API 2.1.

1 комментарий
Поиск
Андрей Козлов
4 августа 2016, 15:35
mySearchControl = new ymaps.control.SearchControl({options:{noPlacemark:true, visible: true, float: 'top', size: 'small'}});

таким способом создаю панель поиска, поскольку указал размер контрола small создастся стандартная кнопка по нажатию на которую будет показываться или скрываться сама панель поиска с полем для ввода.

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

3 комментария
Добавление меток и определение локации
ratedapa
4 августа 2016, 22:32

Как одновременно сделать добалвение меток чз xml и определение местонахождения пользователя?

Получилось сделать таким образом:
 

ymaps.ready(init);

function init () {
    // Создание экземпляра карты
    var geolocation = ymaps.geolocation,
     myMap = new ymaps.Map('map', {
            center: [55.76, 37.64],
            zoom: 14
        }, {
            searchControlProvider: 'yandex#search'
        });
        
        geolocation.get({
        provider: 'yandex',
        mapStateAutoApply: true
    }).then(function (result) {
        // Красным цветом пометим положение, вычисленное через ip.
        result.geoObjects.options.set('preset', 'islands#redCircleIcon');
        result.geoObjects.get(0).properties.set({
            balloonContentBody: 'Мое местоположение'
        });
        myMap.geoObjects.add(result.geoObjects);
    });
    // Загрузка YMapsML-файла
    ymaps.geoXml.load('/map1.xml?time="7"')
        .then(function (res) {
            // Добавление геообъектов на карту.
            myMap.geoObjects.add(res.geoObjects);
            // Вызывается в случае неудачной загрузки YMapsML-файла.
        }, function (error){
            alert('Ошибка: ' + error);
        });
        
        myMap.geoObjects.add(
    new ymaps.Placemark(
        [ymaps.geolocation.latitude, ymaps.geolocation.longitude],
        {
            balloonContentHeader: ymaps.geolocation.country,
            balloonContent: ymaps.geolocation.city,
            balloonContentFooter: ymaps.geolocation.region
        }
    )
);

}

но это определение чз IP, а хотелось бы через  Geolocation API 

И второй вопрос: что такое ?time="7" в строке загрузки ymaps.geoXml.load ? без этого значения почему то новые объекты, доабленные в xml файл, не отображаются! отображаются только если менять это вручную, на любую произвольную цифру! 

12 комментариев
Не работает масштабирование по коллекции/кластеру
azhirov1991
5 августа 2016, 10:35

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

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

function marks(){
    if( window.myCollection ) window.myCollection.removeAll();
    window.myCollection = new ymaps.GeoObjectCollection();
    window.clusterer = new ymaps.Clusterer({
        preset: 'islands#invertedVioletClusterIcons',
        groupByCoordinates: false,
        clusterDisableClickZoom: true,
    });

    getPointData = function (cityOne, id, volume, capacity, nds, distance, cityTwo) {
        return {
            balloonContentBody: [
                '<address>' +
                '<b>Загрузка:</b> ' + cityOne +
                '<br/>' +
                '<b>ID объявления:</b> ' + id +
                '<br/>' +
                '<b>Вес/Объём:</b> ' + volume + '/' + capacity +
                '<br/>' +
                '<b>' + nds + '</b> (' + (distance/nds) + ' р/км)' +
                '<br/>' +
                '<b>Разгрузка:</b> ' + cityTwo +
                '<br/>' +
                '<b>Расстояние:</b> ' + distance +
                '</address>'
            ],
            clusterCaption: '<strong class="list-item" id=' + id + '>' + cityOne + " => " + cityTwo + '</strong>',
            identifier: id
        };
    }

    $('.datacontent').each(function(){
        var cityload = $(this).data('cityload'),
            cityunload = $(this).data('cityunload'),
            coordsload = $(this).data('coordsload').split(';'),
            coordsunload = $(this).data('coordsunload').split(';'),
            id = $(this).data('id'),
            volume = $(this).data('volume'),
            capacity = $(this).data('capacity'),
            nds = $(this).data('nds'),
            distance = $(this).data('distance');

        var markTo = new ymaps.Placemark([coordsload[0], coordsload[1]], getPointData(cityload, id, volume, capacity, nds, distance, cityunload), {
            preset: 'islands#greenDotIcon'
        });

        var markDo = new ymaps.Placemark([coordsunload[0], coordsunload[1]], getPointData(cityload, id, volume, capacity, nds, distance, cityunload), {
            preset: 'islands#redDotIcon'
        });

        var lineCity = new ymaps.Polyline([
            [coordsload[0], coordsload[1]],[coordsunload[0], coordsunload[1]]
        ],{
            strokeColor: "0000FF55",
            strokeWidth: 20,
            identifier: id
        });

        clusterer.add(markTo).add(markDo);
        myCollection.add(lineCity);

    });

    clusterer.events.add('click', clickOnPlacemark);

    clusterer.events.add(['balloonopen'], function(){
        $('.list-item').click(function(){
            for( var i = 0; i < myCollection.getLength(); i++ ){
                if(myCollection.get(i).properties.get('identifier') != this.id){
                    myCollection.get(i).options.set('visible', false);
                }else{
                    myCollection.get(i).options.set('visible', true);
                }
            }
        });
    });

    searchMap.geoObjects.add(clusterer);
    searchMap.geoObjects.add(myCollection);
    searchMap.setBounds(clusterer.getBounds(), { checkZoomRange: true });
}

4 комментария
Нужно поместить ссылку на карту.
anikin.dima3
5 августа 2016, 16:47

Как сделать чтобы при нажатии на какой то обьект на карте, открывалась ссылка на той же странице и подсвечивался тот контейнер, который описывает этот обьект. Сейчас только наоборот при нажатии на описание - открывается обьект на карте. 

Чтобы посмотреть как работает сейчас нужно: 

1)Перейти по ссылке http://test.eltempo.ru/catalog/product/emr35_15761_black_brown/ 

2) Положить в корзину

3) Нажать на корзину и выбрать оформить заказ

4) Нажать на иконку Самовывоз (Стоимость: 0 )
 

1 комментарий
ссылка на карту
Перестала работать карта
darknez90
7 августа 2016, 09:36

До этого отлично все отображало, а с сегодняшнего дня пишет При загрузке YMapsML-файла произошла ошибка: [object Object]

1 комментарий
геокодер
Метка не хочет попадать в кластер.
p15623
7 августа 2016, 13:34

Метка не хочет попадать в кластер, gridSize пробовал увеличивать, не помогает.

UPDATE:

https://jsfiddle.net/3pjmx3p2/2/

1 комментарий
кластеризация
Удаление кастомного балуна с карты
akubenov
7 августа 2016, 13:51

Добрый день всем.

Есть задача: При ховере на элемент списка магазинов подкрашивать метку на карте и также выводить название магазина в балуне. При этом одновременно могут быть покрашены несколько магазинов и показаны их балуны соответствено.

Для отображения нескольких балунов на карте отдновременно использую кастомные балуны:

var balloon = new ymaps.Balloon(this.map);

balloon.options.setParent(this.map.options);

balloon.options.set({
									shadow: false,
									layout: MyBalloonLayout,
									contentLayout: MyBalloonContentLayout,
									panelMaxMapArea: 0
});

balloon.setData({
   content: object.name
});

balloon.open(element.geometry.coordinates);

Вопрос: как удалять созданные кастомные балуны с карты? В документации не нашел как это можно сделать.

Сейчас удаляю балуны так $('selector').remove(). При следующем ховере создается новый балун.

1 комментарий
baloon,maps,API 2.1,custom ballon,yandex,map
Карта диллеров
mail@joksa.ru
8 августа 2016, 06:35

Доброго времени суток!

Есть задача реализовать карту диллеров, со сменой оформления карты, выводом балуна при клике на регион. Нужно охватить Россию, Белорусию и Казахстан. Сам уже голову сломал. За основу взял пример регионов;  остановился на смене цвета пассивной и активной области. В js - не очень, все опытным методом. Подключить RU, BY и KZ одновременно не смог. Гуру помогите, направте!

6 комментариев
регионы
EVENT на ссылку внутри кластера
azhirov1991
8 августа 2016, 12:50

Не поулчается повесить событие на ссылку внутри кластера. При открытии балуна - вешается событие на ссылку, что видимая. При переключении в меню пунктов - событие не вешается.

var clickBalloonClose = function(){
		for( var i = 0; i < myCollection.getLength(); i++ ){
			myCollection.get(i).options.set('visible', true);
		}
	};

clusterer.events.add('click', clickOnPlacemark);
clusterer.events.add('balloonclose', clickBalloonClose);

function clickOnPlacemark(e){
	var clickBalloon = function(){
		if($('.list-item').is(':visible')){
			$('.list-item').click(function(){
				for( var i = 0; i < myCollection.getLength(); i++ ){
					if(myCollection.get(i).properties.get('identifier') != this.id){
						myCollection.get(i).options.set('visible', false);
					}else{
						myCollection.get(i).options.set('visible', true);
					}
					$('.open-more-card').click(function(){moreCardSearch.show();});
				}
			}).click();
		}else{
			for( var i = 0; i < myCollection.getLength(); i++ ){
				if(myCollection.get(i).properties.get('identifier') != e.get('target').properties.get('identifier')){
					myCollection.get(i).options.set('visible', false);
				}else{
					myCollection.get(i).options.set('visible', true);
				}
			}
		}
$('.open-more-card').click(function(){moreCardSearch.show();});
		clusterer.events.remove('balloonopen', clickBalloon);
	};
	clusterer.events.add('balloonopen', clickBalloon);
}

window.moreCardSearch = new rpDialog( "#moreCard", {
		id: "card",
		width: 750,
		heigth: 500
	});

Или событие какое есть, которое определяет открытие пункта в меню, что-то вроде - открытие Placemark'a на карте...

Пробовал так делать:

Placemark.events.add('click', function(){
            $('.open-more-card').click(function(){moreCardSearch.show();});
        });

clusterer.add(Placemark);

далее код...

Но всё равно не работает.. Или что-то не то делаю.

4 комментария
Почему запятые?
Белкин Дмитрий
8 августа 2016, 12:59

Здравствуйте! Заранее прошу прощения.

Объясните, пожалуйста, чайнику! Почему в песочнице в примере clusterer_create.js стоят запятые вместо точек с запятой? 

Например, после задания конструктора var myMap? После скобки, которая закрывает список параметров? И далее по тексту в аналогичных случаях?

Что это за прием такой? Где о нем прочитать? По какому слову его искать хотя бы?

Далее код из песочницы

ymaps.ready(function () {
    var myMap = new ymaps.Map('map', {
            center: [55.751574, 37.573856],
            zoom: 9,
            behaviors: ['default', 'scrollZoom']
        }, {
            searchControlProvider: 'yandex#search'
        }),
        /**
         * Создадим кластеризатор, вызвав функцию-конструктор.
         * Список всех опций доступен в документации.
         * @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/Clusterer.xml#constructor-summary
         */
            clusterer = new ymaps.Clusterer({
            /**
             * Через кластеризатор можно указать только стили кластеров,
             * стили для меток нужно назначать каждой метке отдельно.
             * @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/option.presetStorage.xml
             */
            preset: 'islands#invertedVioletClusterIcons',
            /**
             * Ставим true, если хотим кластеризовать только точки с одинаковыми координатами.
             */
            groupByCoordinates: false,
            /**
             * Опции кластеров указываем в кластеризаторе с префиксом "cluster".
             * @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/ClusterPlacemark.xml
             */
            clusterDisableClickZoom: true,
            clusterHideIconOnBalloonOpen: false,
            geoObjectHideIconOnBalloonOpen: false
        }),
        /**
         * Функция возвращает объект, содержащий данные метки.
         * Поле данных clusterCaption будет отображено в списке геообъектов в балуне кластера.
         * Поле balloonContentBody - источник данных для контента балуна.
         * Оба поля поддерживают HTML-разметку.
         * Список полей данных, которые используют стандартные макеты содержимого иконки метки
         * и балуна геообъектов, можно посмотреть в документации.
         * @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/GeoObject.xml
         */
            getPointData = function (index) {
            return {
                balloonContentBody: 'балун <strong>метки ' + index + '</strong>',
                clusterCaption: 'метка <strong>' + index + '</strong>'
            };
        },
        /**
         * Функция возвращает объект, содержащий опции метки.
         * Все опции, которые поддерживают геообъекты, можно посмотреть в документации.
         * @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/GeoObject.xml
         */
            getPointOptions = function () {
            return {
                preset: 'islands#violetIcon'
            };
        },
        points = [
            [55.831903,37.411961], [55.763338,37.565466], [55.763338,37.565466], [55.744522,37.616378], [55.780898,37.642889], [55.793559,37.435983], [55.800584,37.675638], [55.716733,37.589988], [55.775724,37.560840], [55.822144,37.433781], [55.874170,37.669838], [55.716770,37.482338], [55.780850,37.750210], [55.810906,37.654142], [55.865386,37.713329], [55.847121,37.525797], [55.778655,37.710743], [55.623415,37.717934], [55.863193,37.737000], [55.866770,37.760113], [55.698261,37.730838], [55.633800,37.564769], [55.639996,37.539400], [55.690230,37.405853], [55.775970,37.512900], [55.775777,37.442180], [55.811814,37.440448], [55.751841,37.404853], [55.627303,37.728976], [55.816515,37.597163], [55.664352,37.689397], [55.679195,37.600961], [55.673873,37.658425], [55.681006,37.605126], [55.876327,37.431744], [55.843363,37.778445], [55.875445,37.549348], [55.662903,37.702087], [55.746099,37.434113], [55.838660,37.712326], [55.774838,37.415725], [55.871539,37.630223], [55.657037,37.571271], [55.691046,37.711026], [55.803972,37.659610], [55.616448,37.452759], [55.781329,37.442781], [55.844708,37.748870], [55.723123,37.406067], [55.858585,37.484980]
        ],
        geoObjects = [];

    /**
     * Данные передаются вторым параметром в конструктор метки, опции - третьим.
     * @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/Placemark.xml#constructor-summary
     */
    for(var i = 0, len = points.length; i < len; i++) {
        geoObjects[i] = new ymaps.Placemark(points[i], getPointData(i), getPointOptions());
    }

    /**
     * Можно менять опции кластеризатора после создания.
     */
    clusterer.options.set({
        gridSize: 80,
        clusterDisableClickZoom: true
    });

    /**
     * В кластеризатор можно добавить javascript-массив меток (не геоколлекцию) или одну метку.
     * @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/Clusterer.xml#add
     */
    clusterer.add(geoObjects);
    myMap.geoObjects.add(clusterer);

    /**
     * Спозиционируем карту так, чтобы на ней были видны все объекты.
     */

    myMap.setBounds(clusterer.getBounds(), {
        checkZoomRange: true
    });
});

11 комментариев
Вывод областей на карту
Евгений
9 августа 2016, 09:34

Не могу понять, почему нет Москвы, другие регионы есть?

ymaps.ready(function () {
map = new ymaps.Map('reviewsmap', {
	zoom: 6,
	center: [37.6214,55.7847],
	controls: ["fullscreenControl"]
	},{}
);
var zoomControl = new ymaps.control.ZoomControl({
	options: {
		position: {right: 10,top: 230}
			}
		});
		map.controls.add(zoomControl);			
		map.behaviors.disable(['scrollZoom']);
	//Загружаем области
jQuery.getJSON("file/region.json", function(data)
	{
    var url = "http://nominatim.openstreetmap.org/search";
    jQuery.each(data, function(index, value) {
    	var tmp = value.split("|");
    	var zInd = tmp[0];
    	var regionname = tmp[1];
    	$.getJSON(url, {q: regionname, format: "json", polygon_geojson: 1, limit:2 })
    		.then(function (data) {
    			$.each(data, function(ix, place) {
    				if ("administrative" == place.type) {
    					var obl = new ymaps.Polygon(place.geojson.coordinates);
    					obl.options.set('fillColor', 'rgba(255, 0, 0, 0.4)');
    					obl.options.set('strokeColor', '#F8DA19');
    					obl.options.set('zIndex', zInd);
    					obl.properties.set('hintContent', regionname+"111");
    					obl.events.add('mouseenter', function () {obl.options.set('fillColor', 'rgba(255, 0, 0, 0.6)');});		
    					obl.events.add('mouseleave', function () {obl.options.set('fillColor', 'rgba(255, 0, 0, 0.4)');});
    					map.geoObjects.add(obl);
    				} 
    			});
    		}, 	function (err) {console.log(err);});	
		});
	});
});

json файл 

[
"1000|Москва",
"1000|Московская область",
"1000|Ярославская область",
"2000|Конаковский район",
"1000|Саратовская область"
]

5 комментариев
Yandex suggest version
Nikita Rakitin
9 августа 2016, 11:45

Добрый день! Использую yandex suggest, подключил скрипт https://api-maps.yandex.ru/2.1/?lang=ru_RU . При отправке запроса

https://suggest-maps.yandex.ru/suggest-geo?callback=id_14707305338075696725&v=5&search_type=tp&part=Кирова&lang=ru_RU&n=5&origin=jsapi2Geocoder&bbox=-180%2C-90%2C180%2C90

он посылается с версией 5 (v=5 параметр) и в ответе с каждым городом приходит {"hl":[[n,m]]},

id_14707305338075696725(["Кирова",[["geo","проспект Кирова, Самара, Россия","Россия, Самара, проспект Кирова ",{"hl":[[9,15]]}],["geo","улица Кирова, Люберцы, Московская область, Россия","Россия, Московская область, Люберцы, улица Кирова ",{"hl":[[6,12]]}],["geo","улица Кирова, Подольск, Московская область, Россия","Россия, Московская область, Подольск, улица Кирова ",{"hl":[[6,12]]}],["geo","улица Кирова, село Макарье, Киров, Россия","Россия, Киров, село Макарье, улица Кирова ",{"hl":[[6,12]]}],["geo","улица Кирова, Минск, Беларусь","Беларусь, Минск, улица Кирова ",{"hl":[[6,12]]}]],{"pers_options":0}])

а мне нужны координаты, как на версии 7.

id_14707305338075696725({"part":"Кирова","results":[{"name":"проспект Кирова","type":"geo","desc":"Самара, Россия","lat":53.223949,"lon":50.256864},{"name":"улица Кирова","type":"geo","desc":"Люберцы, Московская область, Россия","lat":55.679756,"lon":37.883981},{"name":"улица Кирова","type":"geo","desc":"Подольск, Московская область, Россия","lat":55.423205,"lon":37.52001},{"name":"улица Кирова","type":"geo","desc":"село Макарье, Киров, Россия","lat":58.613051,"lon":49.741904},{"name":"улица Кирова","type":"geo","desc":"Минск, Беларусь","lat":53.897306,"lon":27.560054}],"pers_options":0})

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

3 комментария
Пользовательские иконки для точек
pokemonlike
9 августа 2016, 15:55

Всех приветствую. Хочется для каждой точки свою пользователькую иконку. Максимум чего я добился, это смена иконки для всех точек. А хочется разные.

    function reloadYandexMap(responseCoords)
    {
      myMap.geoObjects.removeAll();

      objectManager = new ymaps.ObjectManager({
        clusterize: true,
        gridSize: 32
      });

      objectManager.objects.options.set({
        iconLayout: 'default#image',
        iconImageHref: '/images/def.png',
        iconImageSize: [48, 48],
        iconImageOffset: [-24, -48]
      });


      myMap.geoObjects.add(objectManager);
      objectManager.add(responseCoords);
    }

Союственно в responseCoords заходит массив с точками:

{
    type: 'FeatureCollection',
    features: [{
            type: 'Feature',
            id: currentId++,
            geometry: {
                type: 'Point',
                coordinates: [24.34, 65.24]
            }
        }, {
            type: 'Feature',
            id: currentId++,
            geometry: {
                type: 'Point',
                coordinates: [25.34, 63.24]
            }
        }
   ]
}

В features можно добавить options, но оно ни на что не реагирует ;(

3 комментария