Блог API Яндекс.Карт

Блог API Яндекс.Карт переезжает
20 ноября 2014, 15:28

Мы не прощаемся, мы просто немного меняем формат. Все новости API Карт: обновления сервиса, анонсы конференций, видео докладов и другая информация теперь будут публиковаться в клубе разработчиков. Они доступны по метке Новости, а также на сайте API Карт.

Напомним, что клуб и страницы в Facebook и ВКонтакте читают разработчики API, а значит им можно задавать вопросы про API, высказывать свои замечания и предложения.

Этот блог не закрывается, но обновляться больше не будет. Старые посты и комментарии никуда не пропадут. Текущие обсуждения можно продолжать вести в блоге.

Ждем вас в клубе разработчиков!

обновление,новости
ObjectManager в API Яндекс.Карт
19 ноября 2014, 19:40

Как быстро отрисовать 10000 меток на карте и не затормозить всё вокруг. Как и зачем мы делали ObjectManager — читайте в новой статье на Хабрахабре. Автор статьи — создатель модуля и руководитель группы разработки визуальных компонент API Карт, Марина Степанова.

Перед разработчикам, которые используют API Яндекс.Карт, довольно часто встаёт задача отобразить много объектов на карте. Действительно много — порядка 10 000. Причем эта задача актуальна и для нас самих — попробуйте поискать аптеки на Яндексе. На первый взгляд кажется: «А в чем собственно проблема? Бери да показывай». Но пока не начнешь этим заниматься, не поймешь, что проблем на самом деле целый вагон.

Вопросы по большому количеству меток с завидной регулярностью поступают в наш клуб и техподдержку. Кто все эти люди? Кому может быть интересно показать на карте больше 10 меток? В этом посте я подробно рассмотрю весь вагон проблем и расскажу, как в API появились инструменты, помогающие разработчикам оптимально показать большое количество объектов на карте.

В основном с проблемой сталкиваются информационные сервисы, которые хотят привязать данные к карте. Например сайт bankomator.ru рассказывает пользователям, где найти банкомат нужного банка.

03c40157090c4d039fe324e23a684591.png

Также от большого количества данных страдают ресурсы, посвященные недвижимости. Яркий пример – Cian.ru.

Мы сами внутри Яндекса до недавнего времени советовали смежным командам различные «хаки» и приемы для показа множества точек через API. Яркие примеры – Яндекс.Недвижимость и Яндекс.Такси.

Пункт 1. В чем собственно проблема?

Чтобы прочувствовать на себе всю тяжесть поставленной задачи, нужно попробовать ее решить. Для начала давайте поймем, как показать карту на странице вашего сервиса. Рассмотрим простую схему:

33e83ec6f56341a79c0adb1de12f9b1a.png

Клиент (например, Safari на iPhone) запрашивает с сервера страницу index.html. Страница представляет собой документ вот с таким кодом:

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="//api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>
    <script type="text/javascript">
        ymaps.ready(init);

        function init () {
            var myMap = new ymaps.Map('map', {
                center: [55.76, 37.64],
                zoom: 10
            });
        }
    </script>
</head>
<body>
    <div id="map"></div>
</body>

Теперь усложняем задачу. У нас есть база данных, в которой хранятся адреса болельщиков «Зенита». И мы хотим показать на карте адреса этих болельщиков.


Решение задачи «в лоб»:

  • Делаем выборку из базы данных, получаем 1 млрд адресов.
    • Дописываем в файл index.html массив, содержащий весь миллиард адресов.
    • Передаем этот файл на клиент.
  • На киенте перебираем данные массива и рисуем для каждого элемента метку на карте.

Если вы менеджер проекта, и ваш разработчик демонстрирует такое решение, скорее всего, вы поседеете. Вы выскажете ему свое оценочное суждение. Если убрать нецензурную брань, можно будет выделить следующие тезисы:

    • Вес файла index.html увеличится до нескольких Мб и у пользователя страница будет открываться по несколько секунд.
    • Зачем передавать на клиент ВСЮ базу, если нужно показать только метки для Москвы?
    • Зачем рисовать на карте ВСЕ метки, если человек увидит только десятую их часть?
    • Если на карте нарисовать около 100-200 меток обычным способом, карта будет тормозить.
  • Можно загружать метки постепенно, пачками, чтобы канал не забивался и браузер успевал эти метки отрисовывать?

Мысль получает два направления:

      1. Нужно уметь определять, какие данные видит пользователь и запрашивать только нужное.
      2. Когда это нужное пришло, его надо оптимально отрисовать.

В API Яндекс.Карт сто лет назад был сделан инструмент для решения этих задач – технология активных областей. Кому интересно подробно, почитайте руководство разработчика. 

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

С помощью хотспотов, например, рисуются пробки на maps.yandex.ru. На этой же технологии сделан сайт bankomator.ru.

У этой технологии есть несколько существенных минусов

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

fba4da37164742cdbf44a645228ee962.png

2. Абсолютная негибкость. Невозможно «приподнять» метку при наведении на нее курсора. Невозможно быстро поменять на клиенте внешний вид меток. Короче – на любой чих надо просить сервер перегенерировать картинку.

Поэтому пользователи крутились, как могли, без хотспотов – передавали наборы единичных объектов на клиент пачками, через таймаут. При этом на клиенте их снова ждали проблемы. Если вы передали на клиент 1000 точек, как их отрисовать?

Из каждой точки нужно было сгенерировать объект ymaps.Placemark и добавить его на карту. Можно было добавить метки в кластеризатор (ymaps.Clusterer) и добавить откластеризованные метки на карту. Тут надо обратить внимание, что при кластеризации 10 000 точек нужно сначала эти 10 000 точек инстанцировать, а потом передать в кластеризатор. То есть метка может не показаться на карте, так как войдет в кластер, но мы все равно потратим время на ее инициализацию.

Подытожив все эти дела, мы решили написать модуль, который бы позволил:

    1. Быстро и легко отрисовать на клиенте большое количество точек.
    2. Избежать лишних инициализаций при работе с точками на клиенте.
    3. Загружать данные на клиент строго по требованию.

И мы это сделали. Мы котики.

Пункт 2. Рисуем метки быстро

Чтобы научиться рисовать метки быстро, надо было понять, какие проблемы кроются в текущем, уже существующем решении. Давайте посмотрим, что может делать объект ymaps.Placemark:

    1. Он умеет рисоваться на карте.
    2. У него есть свой менеджер балуна placemark.balloon.
    3. У него есть свой менеджер хинта placemark.hint.
    4. У него есть редактор, который позволяет перетаскивать метку и фиксировать ее координаты placemark.editor.

Кроме того, метка динамически реагирует на любое изменение внешней среды – изменение опций, данных, проекции карты, смена масштаба карты, смена центра карты и многое, многое другое. Такие вот у нас могучие плейсмарки.

А нужна ли вся эта программная мощь для случая, когда разработчику просто нужно показать много однотипных меток на карте? Правильно, не нужна.

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

Второе озарение пришло, когда мы думали над проблемой лишних программных инициализаций. Вспоминаем рассказ выше, где-то в районе вот такой картинки.

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

 

Мы решили, что будем хранить пользовательские данные об объектах (по факту в JSON), а программные сущности для объектов будут создаваться только тогда, когда какой-либо объект нужно будет отрисовать на карте.

После комбинации этих идей и некоторой разработки родился новый модуль API для отображения большого количества точечных объектов – ymaps.ObjectManager.

На вход этого менеджера скармливается JSON-описание объектов.

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

Для отрисовки меток и кластеров на карте мы взяли только часть объектаymaps.Placemark (а именно ymaps.overlay.*), которая отвечала только за отображение метки на карте. Всю инфраструктуру типа балунов и хинтов мы вынесли в единый общий компонент.

Эти приемы позволили нам неплохо продвинуться в вопросе отрисовки большого числа меток на клиенте. Вот какие мы получили приросты по скорости:

1d8d3157f4324a66b46c2381296a6be7.png

График 1. Скорость создания и добавления объектов на карту с последующей асинхронной отрисовкой их видимой части

    1. Создание 1000 меток и добавление их на карту, все метки видны.
    2. Создание 1000 меток и добавление их на карту с кластеризацией, все метки видны.
    3. Создание 10000 меток и добавление их на карту с кластеризацией, все метки видны.
    4. Создание 50 000 меток и добавление их на карту с кластеризацией, все метки видны.
    5. Создание 50 000 меток и добавление их на карту с кластеризацией, видны 500 объектов.
    6. Создание 50 000 меток и добавление их на карту без кластеризации, видны 10 000.

 1b06d3c0650c43949bb45a2ee88dbec0.png

График 2. Скорость создания и добавления объектов на карту с последующей синхронной отрисовкой их видимой части

  1. Создание 1000 меток и добавление их на карту, все метки видны.
  2. Создание 1000 меток и добавление их на карту с кластеризацией, все метки видны.
  3. Создание 10000 меток и добавление их на карту с кластеризацией, все метки видны.
  4. Создание 50 000 меток и добавление их на карту с кластеризацией, все метки видны.
  5. Создание 50 000 меток и добавление их на карту с кластеризацией, видны 500 объектов.
  6. Создание 10 000 меток и добавление их на карту без кластеризации, видны 2000.
  7. Создание 5000 меток и добавление их на карту без кластеризации, видны 1000.

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

У нас получилось ускорить непосредственно создание и отрисовку объектов, вдобавок к этому мы максимально оптимизировали инициализацию программных сущностей. Теперь вы можете, например, откластеризовать на клиенте 50 000 точек, и работать с картой будет комфортно.

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

Итак, мы научились быстро-быстро рисовать и кластеризовать точки на клиенте. Что дальше?

Пункт 3. Оптимально подгружаем данные

Помните пример про болельщиков «Зенита»? Мы решили проблему отрисовки данных на клиенте, но никак не решили проблему, связанную с оптимальной подгрузкой этих данных. Мы начали собирать типовые задачи пользователей API. По итогам исследований мы получили два типовых кейса:

  • У человека на сервере много данных, он хочет показывать их на клиенте, но подгружать данные по мере надобности.
  • Разработчик подготавливает данные на сервере (например, реализует серверную кластеризацию) и хочет показывать на клиенте результаты этой обработки.

Для решения этих кейсов были написаны модули LoadingObjectManager и RemoteObjectManager соответственно.Оба модуля основаны по сути на реализации ObjectManager, но имеют ряд различий в алгоритме загрузки и кеширования загруженных данных.

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

Данные хранятся на клиенте в pr-дереве, поэтому выборки даже для большого количества данных делаются довольно шустро.

Теперь обсудим вариант номер два – отображение на клиенте результатов серверной кластеризации. Допустим, вы написали серверную кластеризацию меток. Также вы написали скрипт, который по запросу от клиента умеет отдавать кластеры и единичные метки, не вошедшие в состав кластера.

Вам остается только создать инстанцию RemoteObjectManager и прописать в нем путь до этого чудо-скрипта. RemoteObjectManager будет работать почти так же, как и LoadingObjectManager. Разница будет только в том, что мы будем перезапрашивать данные с сервера при каждой смене зума.

Поскольку данные кластеризуются на сервере, то сервер и только сервер может знать, какие данные нужно, а какие не нужно показывать в данный момент на карте. Поэтому информация об объектах хранится на клиенте только до первой смены зума, а потом все запрашивается заново.

Если с сервера передается описание метки-кластера, то на клиенте эти метки подцепят всю инфраструктуру из API – для кластеров нарисуются специальные значки, для них будут работать все стандартные поведения и так далее и тому подобное.

Пункт 4. Размышления на тему серверной реализации

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

1. Хранение информации об объектах на сервере в статических файлах

Клиентский код оперирует данными исключительно потайлово. Тайл – это некоторая нумерованная область на карте. Подробнее про нумерацию тайлов можно прочитать в нашей документации.

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

У клиентского модуля есть настройки, которые заставляют отправлять запросы за каждым новым тайлом по отдельности. Чем это ценно? Да тем, что мы получаем конечное число вариантов запроса клиента на сервер.

zoom=0, tile=[0, 0]
zoom=1, tile=[0, 0]
zoom=1, tile=[0, 1]
zoom=1, tile=[1, 0]
zoom=1, tile=[1, 1]
zoom=2, tile=[0, 0]

Поскольку запросы известны заранее, ответы на запросы тоже можно сгенерировать заранее. Организуем на сервере какую-то такую файловую структуру.

В файлах будет храниться примерно такой код:

myCallback_x_1_y_2_z_5({
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "id": 0,
      "geometry": {
        "type": "Point",
        "coordinates": [55.831903, 37.411961]
      },
      "properties": {
        "balloonContent": "Содержимое балуна",
        "clusterCaption": "Метка 1",
        "hintContent": "Текст подсказки"
      }
    },
    ...
  ]
}

При загрузке такого файла на клиенте будет вызван JSONP-callback, прописанный в файле. Данные попадут в недры LoadingObjectManager, закешируются и отрисуются в нужном виде.

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

2. Динамическое формирование ответа из статических файлов

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

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

3. Динамическое формирование ответа с использованием базы данных

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

Вообще хранение геопривязанных данных на сервере и их кластеризация – тема отдельной беседы. Так что обсудим в другой раз.

В этом репозитории живет пример реализации серверной части с серверной grid-кластеризацией, написанный на node.js + mongo.db. может кому-то пригодится (Демо).

Заключение

Сравнительная таблица новых модулей. 

МодульПреимуществаНедостатки
ObjectManagerПозволяет кластеризовать объекты на клиенте.

Отрисовка производится только тех объектов, которые попадают в видимую область карты.

Позволяет фильтровать объекты при их отображении.

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

Данные загружаются для всех объектов сразу (даже для тех, которые не попадают в видимую область карты).

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

Сохраняет загруженные данные. Для каждого объекта данные загружаются только один раз.

Позволяет фильтровать объекты при их отображении.
Поддерживает работу только с метками.

Кластеризация объектов производится на стороне клиента.

Необходимо реализовать серверную часть.
RemoteObjectManagerИспользует серверную кластеризацию данных.

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

При изменении коэффициента масштабирования данные загружаются заново (даже для тех объектов, для которых данные уже были загружены).

Необходимо реализовывать собственную кластеризацию.

Необходимо реализовать серверную часть.


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

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

Полезные ссылки:

    1. Подробнейшее руководство разработчика с картинками –tech.yandex.ru/maps/doc/jsapi/2.1/dg/concepts/many-objects-docpage/.
    2. Примеры в песочнице – tech.yandex.ru/maps/jsbox/2.1/object_manager
    3. Проект на гитхабе с примером реализации серверной части для RemoteObjectManager – github.com/dimik/geohosting-server.
    4. Клуб разработчиков API Яндекс.Карт, куда нужно приходить с вопросами –clubs.ya.ru/mapsapi.

6 комментариев
API 2.1,статьи
Новая Песочница
18 ноября 2014, 14:02

Одновременно с перезапуском сайта Технологий Яндекса мы обновили Песочницу.

Экспортировать или сохранить к себе на компьютер пример в JSFiddle теперь можно в два клика. Для этого надо нажать на кнопку «Экспорт» в правом верхнем углу и выбрать подходящий вариант. Операция «Сохранить как файлы» позволит загрузить архив с файлами примера на жесткий диск. «Экспорт на JSFiddle» — откроет новую вкладку с примером, загруженным в JSFiddle.

Все примеры теперь хранятся в открытом репозитории на GitHub. Если вы хотите написать свой собственный пример, исправить или дополнить уже существующий, пришлите нам Pull Request.

API 2.1,обновление,песочница,новости,API 2.0
Переключение версий с 2.1.0 по 2.1.8 на 2.1
17 ноября 2014, 15:46

Внимание! Во вторник 25 ноября мы переключим версии API с 2.1.0 до 2.1.8 включительно на api-maps.yandex.ru/2.1. Эти версии были выпущены в рамках открытого бета-тестирования API. Во время выхода 2.1 из беты мы предупреждали о том, что они будут закрыты.

Если вы используете эти версии, мы рекомендуем вам протестировать работоспособность ваших проектов для api-maps.yandex.ru/2.1. В случае возникновения ошибок, сообщайте, пожалуйста, нам.

Более подробно о версиях API и наших рекомендациях для различных типов проектов читайте в документации.

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

API 2.1,2.1,обновление
Переключение 2.1
13 ноября 2014, 13:04

Мы переключили api-maps.yandex.ru/2.1 на версию API 2.1.17. Если вы хотите продолжить использование предыдущей версии, указывайте api-maps.yandex.ru/2.1.16

Пожалуйста, прочтите статью о системе версионирования API.

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

2 комментария
API 2.1,обновление
Карта визуализация работы велопроката в Москве
7 ноября 2014, 14:39

Ниже на скриншоте вы можете видеть пример пример использования модуля тепловых карт в API. Модуль был использован для отображения статистики работы московской сети велопроката Velobike за весь велосезон с 9 июня по 31 октября.

На карте в режиме «Маршруты» можно посмотреть общую статистику, узнать популярные направления поездок и их распределение по времени суток и дням недели. В режиме «Активность» отображаются тепловые карты активности работы станций (тоже по времени суток и по дням недели), а также активность по районам в любой день и час велосезона.

Карта велопроката Москвы 

Карту подготовил наш коллега Андрей Кармацкий.

Присылайте свои собственные реализации основанные на API Яндекс.Карт в комментариях. Напоминаем, что в нашем клубе разработчиков, на страничках в Facebook и ВКонтакте можно задавать вопросы на которые отвечают разработчики команды API Яндекс.Карт.

API 2.1,модули,примеры реализации
Ключи для работы с API Яндекс.Карт версий 1.х больше не нужны
31 октября 2014, 13:40

Мы отключили обязательные ключи для старых версий API 1.х. Теперь, если вы используете версию API 1.x, указывать ключ в ссылке подключения не обязательно.

Менять ссылку, удаляя из нее ключ, тоже не требуется — API будет работать со старыми ключами. 

Форма получения нового ключа больше не доступна.

API 1.x
API Яндекс.Карт версия 2.1.17
30 октября 2014, 17:34

Сегодня мы опубликовали новую версию API Яндекс.Карт 2.1 — 2.1.17. Она доступна по адресу api-maps.yandex.ru/2.1.17 и api-maps.yandex.ru/2.1-dev.

Добавлено:

— Возможность добавлять пользовательские фильтры в шаблонах макетов.

— Класс Template для работы с шаблонами HTML.

Изменено:

— RemoteObjectManager отображает объекты только в видимой области карты.

Исправлено:

— RemoteObjectManager не перерисовывал одинаковые объекты при смене коэффициента масштабирования.

— Ошибка из-за которой поле viaPointsChange события multiRouter.MultiRouteModel.requestsuccess могло принимать неверное значение.

— Позиционирование меток при изменении масштаба страницы в Chromium-браузерах.

— После выбора слоя в выпадающем списке слоев, список не сворачивался.

— В некоторых случаях возникали ошибки при вводе текста в элемент управления «Поиск по карте» при использовании мыши и клавиатуры одновременно.

— Ошибки в работе редактора геообъектов.

— Некорректная работа editor.startDrawing в обработчике события geometrychange у полигона.

— Ошибки в отображении элемента управления «Пробки» при показа карты из скрытого контейнера.

— В некоторых случаях в панели «Пробки» показывалось некорректное время.

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

— При драге маршрута не учитывался параметр searchCoordOrder.

— В некоторых версиях IE не срабатывала анимация при смене тайлов.

— Ошибки при изменении границ элементов во вложенных коллекциях.

— Ошибки при удалении и повторном добавлении ObjectManager на карту.

— Устранены утечки памяти.

— Ошибки при попадании хотспотных объектов с одинаковым id в несколько соседних тайлов.

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

API 2.1,обновление
Новый сайт для технологий Яндекса
29 октября 2014, 18:28

Сегодня мы полностью обновили облик сайтов Яндекс.Технологии. Вместо пяти разделов на tech.yandex.ru мы запустили пять новых сайтов: про сами технологии, а также про событияобучение, науку и стартапы, каждый в отдельности.

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

Вот основные особенности сайта технологий:

  • Структура. Например, API Карт – это целое дерево технологий, так что на сайте для него предусмотрена дополнительная разводящая страница.
  • Хабы. Мы не только собрали технологии вместе, но ещё и сгруппировали их по области применения. Сейчас у нас есть хабы для разработчиков мобильных приложенийвебмастеров, интернет-магазинов и тематических порталов.
  • Описания. Все технологии снабжены простыми и понятными описаниями, выполненными в едином дизайне, а технические детали теперь расположены в разделах Документации.
  • Документация. Она тоже обновилась внешне, и ей стало удобней пользоваться, например, документацией для API Карт версии 2.1.
  • Новости. Не все технологии Яндекса служат источником такого же количества новостей, как API Карт. Поэтому не для всех из них у нас есть блоги. Но теперь мы завели общую площадку, где не столь частые апдейты от каждой технологии сложатся в регулярно обновляемую ленту.
обновление
3D-модели и высотность зданий на картах
29 октября 2014, 13:17

Сегодня мы сделали ещё один большой шаг в сторону повышения читаемости карты — все здания на Яндекс.Картах стали объёмными. Теперь, находясь на улице рядом с высоким зданием, можно быстро найти его на карте и правильно сориентироваться.

Для того чтобы показать высоту большинства зданий, достаточно просто «приподнять» контур дома. Однако во многих городах есть особенные сооружения, которые служат отличными ориентирами. Их мы отображаем в виде простых 3D-моделей. Сейчас на картах более 1000 таких моделей в разных городах, со временем их станет больше. Если вам хочется построить объёмный город самостоятельно, приглашаем на Народную карту. С сегодняшнего дня там появилась возможность указывать высоту зданий.

Троицкий собор в Санкт-Петербурге 

Все эти обновления также доступны на картах, созданных через API Яндекс.Карт.

6 комментариев
обновления карт
ObjectManager, или Как работать с большим количеством объектов на карте
27 октября 2014, 14:09

С 31 октября по 1 ноября в Москве пройдет конференция разработчиков высоконагруженных систем HighLoad++, на которой выступит руководитель группы разработки API Яндекс.Карт Марина Степанова.

Марина расскажет о сложностях работы с большими объемами географических данных, стандартных решениях для отображения большого количества меток на клиенте и методах хранения данных на сервере. Доклад пройдет в рамках секции «Производительность фронтенда».

Зарегистрироваться на конференцию можно здесь.

конференции,анонсы
Яндекс обновил карты
21 октября 2014, 14:49

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

В этот раз, благодаря сообщениям пользователей, на картах России, Беларуси, Украины и Казахстана учтено более 6000 замечаний по маршрутам и более 6500 — по карте. Самые значительные обновления коснулись Воронежа, Екатеринбурга, Минска, Новосибирска, Саратова, Ставрополя, Томска и Челябинска. Для городов Кинель и Костанай появились карты с точностью до дома, заработала маршрутизация. Кроме того, мы добавили недавно открывшиеся эстакады в Перово, на Новорязанском шоссе и новые развязки на МКАД.

Бугринский мост в Новосибирске

Продолжайте присылать нам свои замечания и пожелания к исправлению через специальную форму — maps.yandex.ru/feedback и вместе мы сделаем Яндекс.Карты еще лучше.

Все эти обновления также доступны на картах, созданных через API Яндекс.Карт.

обновления карт
Панорамы ВДНХ
3 октября 2014, 16:33

Совершите виртуальную прогулку по ВДНХ вместе с Яндекс.Картами. Сегодня стали доступны панорамы ВДНХ. Их протяженность составляет около 36 км, а это почти равно протяженности Москвы в пределах МКАД с севера на юг. Всего было сделано 8 000 фотографий, из которых получилось 2000 панорам. Благодаря новым техническим решениям качество панорам ВДНХ и всех вновь отснятых теперь в восемь раз выше.

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

3 комментария
панорамы,обновления карт
Переключение 2.1
2 октября 2014, 17:27

Мы переключили api-maps.yandex.ru/2.1 на версию API 2.1.16. Если вы хотите продолжить использование предыдущей версии, указывайте api-maps.yandex.ru/2.1.15

Пожалуйста, прочтите статью о системе версионирования API.

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

API 2.1,обновление
Ломаные линии на карте
1 октября 2014, 14:53

Как нарисовать несколько ломаных линий на одной карте. Об этом рассказывает статья в блоге Дмитрия Власова. Автор усовершенствовал пример из Песочницы и нарисовал на одной карте несколько ломаных линий.

 Читать статью полностью 

Если вы написали статью или хотите рассказать о своей реализации, пишите нам в КлубFacebookВКонтакте или на почту ymapsapi@ya.ru.

API 2.1,примеры пользователей,статьи пользователей
Как правильно разрабатывать API с поддержкой обратной совместимости
23 сентября 2014, 08:24

Интересно, как мы делаем API? В статье на Хабре и в докладе руководитель службы разработки API Яндекс.Карт Сергей Константинов рассказывает о том, как мы разрабатываем API и что мы делаем, если нужно что-то рефакторить и не сломать по дороге обратную совместимость.

Видеозаписи других докладов доступны по тегу «видео».

статьи,видео
API Яндекс.Карт версия 2.1.16
18 сентября 2014, 15:15

Сегодня мы опубликовали новую версию API Яндекс.Карт 2.1 — 2.1.16. Она доступна по адресу api-maps.yandex.ru/2.1.16 и api-maps.yandex.ru/2.1-dev.

Добавлено:
— Опция activeRouteAutoSelection мультимаршрутизатора.
— Событие update мультимаршрутизатора.
— Поисковые подсказки в платной версии API.

Исправлено:
— Некорректная работа балуна кластера при задании html в clusterCaption.
— Ошибки при работе с балуном точки редактора геообъекта в IE8.
— Ошибки при фильтрации объектов в ObjectManager.
— Метод ObjectManager.getObjectState возвращал некорректные значения для объектов вне области видимости.
— В IE9, IE10 в некоторых случаях некорректно обрабатывалась смена zIndex маршрута.
— Метод autoPan возвращал некорректное значение для балуна в режиме панели.
— В некоторых случаях возникала ошибка при изменении значения опции yandexMapAutoSwitch.
— Узловые точки редактора геообъектов съезжали относительно объекта в iOS7.
— В некоторых случаях не срабатывала опция fillOpacity геообъекта.
— В некоторых случаях не срабатывало изменение опции fill геообъекта.
— Отсутствовал текст сообщения об ошибки в поисковом контроле в англоязычной версии.
— Проблемы со скроллом дефолтного балуна кластера при задании произвольного макета itemContentLayout.
— LoadingObjectManager и RemoteObjectManager отправляли некорректные запросы при переходе карты через нулевой меридиан.
— В некоторых случаях не срабатывали опции единичных объектов в ObjectManager.
— Ошибки при изменении опции hasHint кластеризатора.
— В некоторых случаях хинт кластера не закрывался при уходе курсора с метки.
— Ошибки в работе менеджера хинта ObjectManager.
— В некоторых случаях некорректно отображалась метка кластера при переходе балуна в режим панели.
— В некоторых случаях не закрывался балун метки при попадании метки в кластер в ObjectManager.
— При повторном вызове метода GeoQueryResult.addToMap объекты удалялись и добавлялись на карту заново.

1 комментарий
API 2.1,обновление
Переключение 2.1
11 сентября 2014, 13:04

Мы переключили api-maps.yandex.ru/2.1 на версию API 2.1.15. Если вы хотите продолжить использование предыдущей версии, указывайте api-maps.yandex.ru/2.1.11

Пожалуйста, прочтите статью о системе версионирования API.

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

API 2.1,обновление
Что API Яндекс.Карт забыл на сервере
10 сентября 2014, 13:54

Видео доклада разработчика интерфейсов API Яндекс.Карт Антона Корзунова про LoadingObjectManager и RemoteObjectManager на Яндекс.Субботнике по бекенду в Минске 30 августа 2014 года. Из доклада вы узнаете, зачем API нужен бэкенд, почему писать его придётся вам, как API Карт будет помогать этой задаче со стороны фронтенда.

Видеозаписи других докладов доступны по тегу «видео».

API 2.1,видео,конференции
Добавление объектов на карту через ObjectManager
9 сентября 2014, 14:25

Довольно часто перед пользователем API стоит задача отобразить на карте сотни и даже тысячи геообъектов. Добавление на карту такого большого числа объектов может привести к значительной потере производительности и даже зависанию страницы. Для работы с большим количеством объектов карты API мы запустили ObjectManager. Это менеджер объектов, который позволяет оптимально отображать, кластеризовать и управлять видимостью объектов.

Код примера доступен в Песочнице.

Пользуйтесь этим примером и присылайте свои собственные в комментариях. Напоминаем, что в нашем клубе разработчиков, на страничках в Facebook и ВКонтакте, можно задавать вопросы на которые отвечают разработчики команды API Яндекс.Карт.

8 комментариев
API 2.1,примеры