Клуб API Карт

июнь 2017
Проблемы с картами. 500 Internal Server Error: https://api-maps.yandex.ru/2.1/?load=package.full&lang=ru_RU&coordorder=longlat
Кирилл Смирнов
1 июня 2017, 12:27

Проблемы с картами. 500 Internal Server Error: https://api-maps.yandex.ru/2.1/?load=package.full&lang=ru_RU&coordorder=longlat

Возникла проблема, с подключением карт. Ошибка 500 возникает при отправке запроса https://api-maps.yandex.ru/2.1/load=package.full&lang=ru_RU&coordorder=longlat, причем только с определенным Referer (по некоторым причинам, не могу сказать каким). Пробовал отправить запрос через Postman, запрос валиться только с referer-ом — N. С теми же параметрами на другим referer-ом, все норм. Подскажите в чем трабл?

1 комментарий
Как узнать координаты через geocoder
kashaev-lj
1 июня 2017, 14:28

Как получить координаты для дальнеших манипуляций (я хочу по клику вызвать карту)

>>console.log('coords2', coords); //undefined
 

var addr = 'Москва';
var coords, bounds;
// Как только будет загружен API и готов DOM, выполняем инициализацию
ymaps.ready(init(addr, coords));

// получение координат
function init (addr, coords) {
  return function () {
    var theGeocoder = ymaps.geocode(addr, {results: 1})
    theGeocoder.then(function (res) {
      var firstGeoObject = res.geoObjects.get(0);
      var coords = firstGeoObject.geometry.getCoordinates();
      var bounds = firstGeoObject.properties.get('boundedBy');
      console.log('coords', coords); // все ок!
    });
  } //return
} //init

console.log('coords2', coords); //undefined
//var coords2 = [55.755814, 37.617635]

var myMap;
// по клику рисую карту
$('#toggle').bind({
    click: function () {
    // рисую карту

1 комментарий
API 2.0
Проблема с установкой балуна метки.
vasily.pripyatko
2 июня 2017, 16:34

http://jsfiddle.net/z3pjcnLq/1/

На vue написан компонент (не суть важно), в который можно передавать координаты меток и они будут перерисовываться при изменении переданных координат.

Проблема: 1. Загрузили страницу, кликнули на 'icon 4', имитируется загрузка с сервера, текст в balloon висит 'Загрузка...', хотя данные уже подгрузились. Закрываем его, открываем заново, данные на месте.

2.Клик 'icon 5', надписи 'Загрузка...' нет, данные подгрузились и не выводятся до тех пор, пока не закроем/откроем снова этот balloon

3. В кластере аналогично. Например, если после загрузки карты открыть кластер, и кликнуть по нескольким элементам списка, то видно, что текст 'Загрузка...' пишется только тогда, когда мы переключимся на другой элемент списка, а потом снова на этот.

Проблема возникает здесь

setBalloon(obj) {
    if (this.loadingBalloon[obj.id]) return;
    this.loadingBalloon[obj.id] = true;
    if (!obj.properties.balloonContent) {
        obj.properties.balloonContent = 'Загрузка...'; // это ставится
        this.loadInfo(obj.id, (ok, data) => {
            if (ok) {
                obj.properties.balloonContent = data; // здесь содержимое balloon должно обновиться, в памяти оно обновляется
                console.log(obj.properties.balloonContent); // выводится
            } else {
                obj.properties.balloonContent = null;
            }
            this.loadingBalloon[obj.id] = false;
        });
    }
},

В разных примерах также советуют делать obj.properties.set('balloonContent', data), однако такого метода нет (obj.properties.set is not a function).

P.S. Все работает за исключением того, что приходится открыть/закрыть/и снова открыть balloon, чтобы данные отобразились. Если данные были ранее подгружены для этой конкретной метки, то все в порядке.

В редких случаях при самом первом клике по метке после загрузки карты содержимое balloon обновляется автоматически (т.е. видно 'Загрузка...' и затем загруженная информация), но непонятно, что на это влияет (гонок здесь не смог найти).

2 комментария
Как можно получить баллы пробок?
contact@petersamokhin.com
3 июня 2017, 03:10

Здравствуйте! Уже читал, например, здесь, что прямого способа получить баллы пробок нет, а использование системных скриптов и прочее - нарушение пользовательского соглашения, и вообще этого делать не стоит.

Так вот, как поступить? Мне необходимо получить баллы пробок в определенном городе в виде числа. Как я могу это сделать? Не запрещено ли парсить страницы и брать баллы пробок оттуда? Можно даже небесплатно, и указание, что данные взяты именно с Яндекс.Пробок тоже подойдет. Так делать нельзя?

3 комментария
яндекс пробки,пробки,Ограничения API
Блокировка карт в Украине
Ramona3
3 июня 2017, 08:18

Добрый день всем, как всем извесно в Украине начали блокировать Яндекс ресурсы, у меня вопрос который задают много фирм, как запустить (запускать, исправить отображение) яндекс карты, некоторые фирмы имеют множество меток на карте, соотвецтвенно банально переходить на гугл карты не хочется, может есть решение исправить ????? Буду признательным любому совету.

1 комментарий
Получение Района по адресу через геокодер
ivan.arturovitch
3 июня 2017, 21:01

Для тех, кто работал с геокодером Yandex Карт:  
Имеем: Адрес, типа: "Москва, улица Вострухина 6к1"  
Нужно отправить его геокодеру Яндекса (один поток)  
и вытянуть ответом (подойдет json):  
- Район в котором находится данный адрес  

Как это реализовать, помогите решить эту задачу...

2 комментария
Ограничение поиска объектов по определённому региону
Александр Васильев
5 июня 2017, 11:37

Интересует, есть ли возможность простым способом ограничить поиск по какому-то определённому региону, конкретно по Якутии.  Я пробовал через SearchControl и boundedBy, предварительно получив границы области через 

 ymaps.regions.load('RU', {
            lang: 'en',
            quality: 1
        })

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

Даже, если поставить координаты в SearchControl,

var searchControl = new ymaps.control.SearchControl({boundedBy:[ [71.95152553383006,124.77785662500001],[60.89422088315866,153.51809099999997]], noPlacemark: true, strictBounds: true});
myMap.controls.add(searchControl);

то всё равно можно через автокомплит найти Москву, которой, по идее быть не должно. 

Автоподбор почему-то зависит от видимой области на карте. Например если я смотрю на Москву, то в приоритете будут Московские адреса.

В провайдере стоит # map.

myMap = new ymaps.Map('map', {
  center: [62.15187236180695,129.7922575],
  zoom: 5
}, {
  searchControlProvider: 'yandex#map'
});

В чём может быть беда? И есть ли лёгкий способ ограничить выборку объектов по определённому региону РФ?

1 комментарий
поиск по карте,поиск,Не работает поиск,регион,регионы,карты
Как с помощью формы поиска установить свою метку?
Slim
5 июня 2017, 14:39

Следующим ниже кодом устанавливаю метку с возможностью перетаскивания (взял из примеров). Также на карте есть форма поиска, которая тоже ставит метку. И если я уже поставил свою метку мышкой , а потом решил поставить метку с  помощью формы поиска, то установится новая метка, и того на карте будет уже две метки. Но мне нужно чтобы при поиске через форму устанавливалась моя метка, а если она уже установлена то просто бы перемещалась на адрес найденый через поиск. Т.е. всего на карте должна быть максимум одна метка. Подскажите, пожалуйста, как тут быть?

ymaps.ready(init);
var myMap, 
    myPlacemark;

function init(){     
    myMap = new ymaps.Map("map", {
        center: [55.76, 37.64],
        zoom: 16,
        controls: ['zoomControl', 'fullscreenControl', 'typeSelector', 'rulerControl', 'searchControl']        
    });
    
    myMap.events.add('click', function (e) {
        var coords = e.get('coords');

        // Если метка уже создана – просто передвигаем ее.
        if (myPlacemark) {
            myPlacemark.geometry.setCoordinates(coords);
        }
        // Если нет – создаем.
        else {
            myPlacemark = createPlacemark(coords);
            myMap.geoObjects.add(myPlacemark);
            // Слушаем событие окончания перетаскивания на метке.
            myPlacemark.events.add('dragend', function () {
                myPlacemark.geometry.getCoordinates();
            });
        }
    });

    // Создание метки.
    function createPlacemark(coords) {
        return new ymaps.Placemark(coords, {
            iconCaption: 'метка...'
        }, {
            preset: 'islands#violetDotIconWithCaption',
            draggable: true
        });
    }
    
    
}

9 комментариев
Placemark,SearchControl
Поиск по собственным объектам загруженных с ObjectManager`а из json
arzanal
6 июня 2017, 04:47

Добрый день, а есть ли у кого пример как реализовать поиск по собственным объектам, которые были загружены на карту с помощью ObjectManager?

есть json файл

{"id":"107","location":"Astana","geometry":{"type": "Point", "coordinates": [58.179594, 72.424947]},"properties":{"hintContent": "\u041c\u0435\u0436\u0441\u0442\u0435\u043d\u043d\u044b\u0439 CashIn 107", "iconContent": "<strong>CI<\/strong>", "balloonContent": "CashIn ATM", "balloonContentBody": "Normal", "balloonContentFooter": "\u0433. \u0410\u0441\u0442\u0430\u043d\u0430, \u043f\u0440. \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0438, 45, \u0443\u0433\u043e\u043b \u0443\u043b.\u0414\u0436\u0430\u043d\u0433\u0435\u043b\u044c\u0434\u0438\u043d\u0430", "balloonContentHeader": "CashIn ATM 107"},"options":{"preset": "islands#violetCircleIcon", "hideIconOnBalloonOpen": false}},

Как реализовать поиск по ID??

2 комментария
Определение зоны доставки по адресу
orlovaolga3000
6 июня 2017, 10:49

Подскажите пожалуйста как осуществить определение зоны доставки по адресу

на примере

https://dodopizza.ru/SecretBuyer

2 комментария
доставка
Центрирование карты с использованием YMapsML + кластеры
SKolesnikov
6 июня 2017, 12:21

Добрый день!

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

<script src="//yandex.st/jquery/1.9.1/jquery.min.js"></script>
<script src="//api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>

<script type="text/javascript">
ymaps.ready(init);
var myMap;

function init(){
    myMap = new ymaps.Map("map", {
        center: [50,50],
        zoom: 5
    });

    clusterer = new ymaps.Clusterer();

    var result = [];   
    ymaps.geoXml.load('/testing/test-page-02.xml?v='+ (+new Date))
        .then(function (res) {
            res.geoObjects.each(function (geoObject) {
                result.push(geoObject);
            });
            clusterer.add(result);
        }, function (error) {
                console.log(error);
                alert('При загрузке YMapsML-файла произошла ошибка: ' + error);
        });  
    myMap.geoObjects.add(clusterer);

    //myMap.setBounds(clusterer.getBounds());

}
</script>
<div id="map" style="width:1200px; height:700px;"></div>

Результат:

Примелись точки [50,50]. При добавлении:

myMap.setBounds(clusterer.getBounds());

вылазит ошибка. Я так понимаю, что надо вытащить каким-то образом из geoObject все координаты и добавить куда-то (коллекция возможно). Подскажите пожалуйста, что необходимо сделать.

2 комментария
Событие на маркер в панорамах?
grosgean
6 июня 2017, 12:52

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

Подскажите, как можно вызывать пользовательскую функцию при клике на маркеры в панорамах? В картах такая возможность есть, а в панорамах, как я понял, нет. Если нет, то будет ли возможно в будущем? Сейчас доступны только стандартная подсказка или переход на другую панораму. Я пробовал повешать событие на маркер, нарисованый с помощью canvas

default: {
           image: renderImage("Книги по JavaScript"),
           offset: [0, -10]
 }

как описано здесь https://stackoverflow.com/questions/6215841/create-links-in-html-canvas, но это выглядит жутким велосипедом, да еще и не получается прикрутить к панораме

1 комментарий
панорамы
API Яндекс.Карт версия 2.1.52
Maps API
6 июня 2017, 17:10

Мы выпустили новую версию API Яндекс.Карт 2.1.52. Для её подключения используйте адрес: api-maps.yandex.ru/2.1.52/?lang=ru_RU
Также мы переключили на новую версию api-maps.yandex.ru/2.1-dev/?lang=ru_RU и вскоре опубликуем обновленную документацию.

Исправлено:
- Ошибки в режиме работы с CSP.

UPD: при подключении версии 2.1.52 отдается код версии 2.1.53 с момента её релиза.

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

Нет комментариев
новости,обновление,API 2.1
Построить маршрут минуя область(МКАД).
lobazenkoff.maxim
6 июня 2017, 20:31

Как задать маршрут, что бы он прокладывался по третьему транспортному а не через центр москвы...

1 комментарий
Координаты по data атрибутам
Удалённый пользователь
7 июня 2017, 18:33

Здравствуйте! Есть несколько блоков с дата атрибутами:

<a class="main-centers__link" data-coord="[55.119646, 61.625318]">
<a class="main-centers__link" data-coord="[55.244650, 61.375281]">

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

	var Placemark = {};

	ymaps.ready(function() {

		var activeItem = $('.main-   centers__link_active').attr('data-coord');
		activeItem = JSON.parse(activeItem);

		var myMap = new ymaps.Map('map-centers', {
			center: activeItem,
			zoom: 17,
			controls: ['zoomControl']
		}, {
			suppressMapOpenBlock: true,
		});
		console.log('3');
		myMap.behaviors.disable('scrollZoom');

		$('.main-centers .main-centers__link').each(function() {
			var obj = $(this).attr("data-coord");
			obj = JSON.parse(obj);
			console.log(obj);

			    myMap.geoObjects
			      .add(new ymaps.Placemark(obj, { 
			      	iconCaption: ''
			      }, {
			      	iconLayout: 'default#imageWithContent',
			      	iconImageHref: '../img/geo-mark.png',
			      	iconImageSize: [29, 43],
			      	iconImageOffset: [-29, -43]
			      }));

		}); //each

		$('.main-centers__link').click(function() {
			var objj = $(this).attr('data-coord');
			objj = JSON.parse(objj);
				// console.log(obj);

				myMap.panTo(objj, {
					flying: 2,
					callback: function() {
						alert('yeap!');
					}
				});

				var addTitle = $(this).find('.title').html();
				var addAddr = $(this).find('.arrd-hide').html();
				var addTels = $(this).find('.tels-hide').html();

				$('.center-addr__title').html(addTitle);
				$('.center-addr__address .addr').html(addAddr);
				$('.center-addr__address .tels__tel').html(addTels);
			});
	});

По итогу, точки проставились, но не работает клик по ссылке с атрибутами. Причем, ругается не на функцию клика, а на функцию сбора данных:

var obj = $(this).attr("data-coord");
    obj = JSON.parse(obj);

Именно на вторую строку. ЧЯДНТ? Функция клика, если убрать сбор точек, работает

Спасибо

2 комментария
Как правильно настроить балун для objectManager?
Elf W.
8 июня 2017, 10:35

Столкнулся с проблемой на совершенно ровном месте: не получается настроить балун для ObjectManagerʼa. Вот таким образом пытался:

const objectManager = new ymaps.ObjectManager({
    clusterize: true,
    gridSize: 32,
    clusterDisableClickZoom: true,
    clusterHasBaloon: false,
    clusterOpenBalooOnClick: false,
});
метки нет и балун есть, хотя я писал наоборот

Результат, как видно, не тот, какой задавался. Потом попробовал иначе:

const objectManager = new ymaps.ObjectManager({ 
    clusterize: true, 
    gridSize: 32, 
});
objectManager.clusters.options.set({
    preset: 'islands#blackClusterIcons',
    hasBaloon: false,
    hintContent: "Куча адресов",
    hideIconOnBaloonOpen: false,
});

Результат нисколько не поменялся — никаких хинтов, метка пропадает, балун появляется. Весь код пишу, внимательно вглядываясь в доки. Что я пропустил?

2 комментария
ObjectManager,baloon,customize
Как отобразить несколько меток на карте, не отображая вначале карту по-умолчанию?
Леонид Смирнов
8 июня 2017, 10:45

Нужно отобразить несколько меток на карте, чтобы они полностью поместились на карту.

Что делаю:

1. Карта с координатами по-умолчанию, как в примере, на ней центр Москвы

var myMap = new ymaps.Map("map", {
            center: [55.76, 37.64],
            zoom: 10
        }, {
            searchControlProvider: \'yandex#search\'
        });

2. Создаю метки

var myGeoObject = new ymaps.GeoObject({
           метка с координатами в центре Твери
        });

var myGeoObject2 = new ymaps.GeoObject({
           метка с координатами в центре Костромы
        });

3. Добавляю их в коллекцию, вычисляю размер карты и масштаб, помещаю на карту

gCollection = new ymaps.GeoObjectCollection(null);
    
gCollection.add(myGeoObject);
gCollection.add(myGeoObject2);

myMap.geoObjects.add(gCollection);
myMap.setBounds(gCollection.getBounds(), {checkZoomRange: true});

В результате сначала отображается карта по-умолчанию, с центром в Москве, а затем карта перерисовывается, с нужными метками и масштабом.

Как сделать так, чтобы сразу отображалась нужная карта?

10 комментариев
Проверить условие, если есть добавить транзитную точку.
lob.maksym
8 июня 2017, 12:33

Добрый день у меня есть роут(прокладывает маршрут от точки которую указал пользователь до 2 точки которую он указывает). И мне надо проверить если маршрут проходит через центр Москвы, добавить транзитную точку, если нет оставить как есть. Вопрос, в том как добавить её в роут...

ymaps.route([start,trans, finish])
                        .then(

                            function (router) {

Здесь я могу проверить, проходит или нет... И присвоить значение trans - но, как потом передать этот транс для перестройки маршрута...

4 комментария
Можно ли при расчете расстояния (например доставки) задать разные тарифы для разных дорог?
SeryCrow
8 июня 2017, 16:10

В одном из предыдущих постов (https://yandex.ru/blog/ymapsapi/1165) вы написали программу, расчитывающую стоимость доставки. Есть ли возможность задать отдельную стоимость некоторым магистралям для расчета стоимости по системе Платон (напимер).

5 комментариев
Карты, собранные в конструкторе яндекс карт не отображаются в браузерах Сафари
LittleWildNox
8 июня 2017, 22:31

Добрый день.

Обнаружили проблему с отображением яндекс карт из конструктора в браузерах Сафари. Пробовали на различных компьютерах и на различных версия, результат всегда один - просто пустое место.
В FireFox и Chrome все выводится нормально.

20 комментариев