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

август 2012
Восстановление работы недокументированных возможностей
6 августа 2012, 14:35
В релизе JS API 2.0.13 мы внесли ряд изменений, затронувших недокументированные возможности API.

В версии 2.0.10 опция imageSize при несовпадении реального размера изображения с заданным в опции растягивала либо сжимала изображение, а в версии 2.0.13 начала обрезать его. Также задание позиции контрола с указанием только одного якоря, например, только bottom или только right, работало в 2.0.10, а в 2.0.13 вызывает исключение.

Выяснилось, что некоторые пользователи использовали эти возможности, поэтому было принято решение выпустить версию 2.0.14 и откатить эти поведения до такого вида, в котором они были в 2.0.10. Уже сейчас можно переключиться на новую версию, указав адрес api-maps.yandex.ru/2.0.14/. А завтра мы планируем ее выкатить на api-maps.yandex.ru/2.0/.

Чтобы избежать подобных ошибок в будущем, рекомендуем не использовать недокументированные возможности API, либо при подключении указывать номер конкретной версии.

Команда разработчиков API Яндекс.Карт.
2 комментария
недокументированные возможности,обновление,API 2.0
API Яндекс.Карт версия 2.0.14
7 августа 2012, 14:54
Опубликована новая версия API Яндекс.Карт. Она доступна по адресу api-maps.yandex.ru/2.0. Если вы хотите продолжить использование предыдущей версии, указывайте api-maps.yandex.ru/2.0.13.

Изменено:
— При несовпадении реальных размеров изображения с указанными опция imageSize растягивает либо сжимает картинку.
— При добавлении элементов управления в позиции можно указывать один якорь, например, только bottom.

Команда разработчиков API Яндекс.Карт.
обновление,API 2.0
Дополнение в систему версионирования API
7 августа 2012, 17:12

Мы решили дополнить существующую систему версионирования API.

С момента запуска в API 2.0 было два варианта подключения:
api-maps.yandex.ru/2.0 — последняя опубликованная версия.
api-maps.yandex.ru/2.0.х — конкретная желаемая версия (например, api-maps.yandex.ru/2.0.13).

Теперь мы добавили еще один вариант:
api-maps.yandex.ru/2.0-stable — подключение последней стабильной версии.

2.0-stable будет отставать от 2.0 на несколько релизов и будет переключаться на новую версию, только если в ней не будет выявлено явных ошибок и на нее не будет жалоб от пользователей клуба.

Рекомендуем в продакшене подключать api-maps.yandex.ru/2.0-stable, а для разработки использовать api-maps.yandex.ru/2.0.

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

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

12 комментариев
версионирование,обновление,API 2.0
Завершен конкурс разработчиков модулей для CMS Drupal
8 августа 2012, 13:44

Победителем конкурса и обладателем денежного приза стал Николай Васильчук, автор модуля Yandex.Maps. Поздравляем Николая с этим достижением!

Конкурс был объявлен два месяца назад. Задачей конкурсантов было придумать такие решения, которые позволят владельцу сайта на Друпале без навыков программирования разместить на своем сайте Яндекс.Карты. Всего мы получили четыре конкурсные работы, которые оценивала комиссия экспертов из Российского сообщества Друпала.

Этот модуль, а также плагины для других CMS, вы можете найти на сайте API Яндекс.Карт. Если вы разработали или просто нашли в сети модуль, которого нет у нас на сайте, напишите нам. Мы уверены, что после того, как API-ключи стали необязательными, хороших модулей станет больше.

Спасибо всем участникам! Отдельно благодарим Российскую Друпал ассоциацию за помощь в подготовке и проведении конкурса, а также экспертов Pоссийского сообщества Друпал, которые помогли нам с оценкой конкурсных работ. Ими были Артем Паньков, Анна Федорук, Александр Графов, Виктор Степаньков, Роман Архаров, Станислав Езерский, Андрей Постников и Владислав Савицкий.

Команды Яндекса для бизнеса и API Яндекс.Карт

drupal,модули,cms,конкурс,API 2.0
Пример: определение местоположения с использованием Geolocation API
9 августа 2012, 16:05

Мы уже публиковали статью и пример использования Geolocation API для API Яндекс.Карт 1.x в 2010 году. До сих пор она остается одной из самых популярных в блоге.

В связи с выходом версии 2.0 API Яндекс.Карт мы решили обновить пример и переписали код.

Посмотреть пример в новом окне.

Сам API Яндекс.Карт также умеет определять местоположение пользователя на основе его IP-адреса. Но этот способ не такой точный, как при использовании Geolocation API.

Местоположение пользователей уже определяют, например, сайты allcafe.ru и esosedi.ru.

17 комментариев
геолокация,примеры,статьи,API 2.0
Занимательная геодезия
10 августа 2012, 15:48

Сегодня хотели бы поделиться с вами статьей «Занимательная геодезия», которую написал  на Хабре.

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

5 комментариев
статьи,геодезия,API 2.0
Подключение Яндекс.Карт после загрузки страницы
13 августа 2012, 12:20

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

Команда API Яндекс.Карт.

2 комментария
статьи,API 2.0,статьи пользователей
Множественное геокодирование
15 августа 2012, 12:38

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

Для обработки массива адресов мы написали класс множественного геокодирования. Его интерфейс полностью соответствует интерфейсу стандартного класса геокодирования в API, т.е. принимает те же опции и также возвращает объект-обещание (Promise). С его помощью можно делать смешанное гекодирование в одном запросе: для адресов — прямое, для координат — обратное (["Москва", [55.7, 37.5]]).

Также мы написали пример с использованием этого класса.

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

Использование этого класса позволяет решить проблемы, возникающие из-за асинхронности работы геокодера. Когда для каждого адреса из списка отправляется отдельный http-запрос, при этом время ответа сервера может быть разное, и как следствие, результаты могут прийти в разном порядке, например пятый адрес может прийти вторым и т.д. Написанный нами класс решает сразу две задачи:
1. Расположить найденные результаты в правильном порядке, соответствующем порядку в массиве адресов во входных данных.
2. Дождавшись ответа по всем запросам, сигнализировать о успешном выполнении и отдать агрегированный результат или вернуть ошибку.

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

43 комментария
примеры,статьи,геокодирование,API 2.0
Панорамы на Яндекс.Картах с помощью KRPano
16 августа 2012, 15:27

На Хабре нашли очень интересную статью о том, как отображать панорамы с помощью KRPano на Яндекс.Картах у себя на сайте.

Подробная инструкция для всех, кто интересовался.

8 комментариев
статьи,панорамы,статьи пользователей
Документация API Яндекс.Карт на английском языке
21 августа 2012, 17:09

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

Мы подумали, что, возможно, кому-то из наших русскоговорящих пользователей может понадобиться перевод на английский, поэтому с радостью делимся с вами ссылкой: api.yandex.com.tr/maps/doc/intro/concepts/intro.xml.

документация на английском,API 2.0
Печать Яндекс.Карты с метками и кластерами
23 августа 2012, 16:14

Пользователь  вчера выложил в клубе разработчиков API Яндекс.Карт свою реализацию вывода на печать карты с метками и кластерами. А затем опубликовал на Хабре статью на эту же тему.

Если вы написали статью об API Яндекс.Карт, которая могла бы быть полезна другим разработчикам, присылайте ее нам в комментарии к любому посту или на адрес ymapsapi@ya.ru. Мы ее изучим и опубликуем в этом блоге с обязательными упоминаниями и ссылками на автора.

печать карты,примеры,статьи,API 2.0,статьи пользователей
Создание карты на сайте с адресами магазинов
27 августа 2012, 13:23

В блоге Занимательная веб-картография опубликована новая статья о том, как создать карту с адресами магазинов для своего сайта

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

Надеемся скоро увидеть сайты, на которых реализованы эти возможности.


UPD: после публикации статьи прислали отличный пример подобный реализации dom-rus.com/search.

примеры,статьи,API 2.0,статьи пользователей
JS API Яндекс.Карт 2.0: что нового и как это работает
28 августа 2012, 12:44

Видео и презентация доклада Сергея Перескокова (@serjo_pepper), разработчика API Яндекс.Карт, c Я.Субботника в Минске.

 

JS API Яндекс.Карт 2.0: что нового и как это работает
фото автора
Сергей Перескоков. Минск, 2 июня 2012 года
Разработчик интерфейсов API Яндекс.Карт.

О докладе
JS API Яндекс.Карт 2.0: что нового и как это работает

Что и зачем мы изменили в JavaScript API Яндекс.Карт. О новой архитектуре API, о взаимосвязи его компонентов, о новых инструментах и возможностях, которые теперь доступны разработчикам.


презентации,видео,конференции,Я.Субботник,API 2.0
Серверная реализация мультигеокодирования
29 августа 2012, 15:03

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


Ранее мы уже публиковали класс множественного геокодирования на клиенте и наш вариант получения координат для списка адресов с использованием PHP и MySQL.


Спасибо автору за еще одну реализацию!

Серверная реализация мультигеокодирования

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

алгоритм такой:
1. загрузка excel-файла и его парсинг в csv
2. вывод окна с формой ajax, которая опрашивает сервер каждую минуту до окончания геокодирования
3. если юзер обновляет окно, сервер проверяет наличие "недокодированного" файла с данными,и, если такой есть, показывает форму из п.2
4. по окончании геокодирования выводится список ошибок и файл с данными удаляется.
вот функция собственно геокодирования:
$result = array('html'=>'');
// проверяем существовование файла с данными для геокодирования
if (file_exists($dataraw)) {
// инициализируем memcache
        $memcache = new Memcache;
        $memcache->pconnect('127.0.0.1', 11211);
// грузим данные для геокодирования
        $data = file($dataraw, FILE_IGNORE_NEW_LINES);
// устанавливаем таймаут работы скрипта
        $endtime = time() + 60;
        $storage = '';
        $count = 0;
        $geocoded = 0;
        $errordata = '';
// инициализируем curl.
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// цикл геокодирования заканчивается по таймаут либо когда массив с адресами кончится
        while ((time() < $endtime) && sizeof($data)) {
            $count ++;
            $coords = false;
            $string = array_shift($data);
            $row = str_getcsv($string);
            array_walk($row, create_function('&$val', '$val = trim($val);'));
// тут превращаем часть столбцов массива данных в строку адреса
            $addr = implode(',', array_slice($row, 4, 4));
// хэш для хранения и поиска в memcache
            $hash = md5($addr);
// проверяем наличие уже отгеокодированного адреса в memcache
            $coords =  $memcache->get($hash);
// обраращение к геокодеру
            if ($coords === false)
            {
                curl_setopt($ch, CURLOPT_URL, 'http://geocode-maps.yandex.ru/1.x/?kind=house'.
                    '&geocode='.urlencode('Россия,+'.implode(',+', array_slice($row, 4, 4))));
                $content = curl_exec($ch);
                if (curl_error($ch)) {
                    break;
                }
                $xml = simplexml_load_file($content);
// тут коряво, конечно, но проверяем точность геокодирования. нас вполне устроит точность exact, number, near и street
                if ($xml->GeoObjectCollection->metaDataProperty->GeocoderResponseMetaData->found !=0 &&
                    in_array($xml->GeoObjectCollection->featureMember[0]->GeoObject->metaDataProperty->GeocoderMetaData->precision, array('exact', 'number','near', 'street')))
                {
// сохраняем в memcache если геокодирование прошло удачно
                    $coords = sprintf($xml->GeoObjectCollection->featureMember[0]->GeoObject->Point->pos[0]);
                    $memcache->set($hash, $coords, MEMCACHE_COMPRESSED, strtotime('+30 days'));
                } else {
// сохраняем false, если геокодирование прошло неудачно.
                    $memcache->set($hash, NULL, MEMCACHE_COMPRESSED, strtotime('+1 days'));
                }
                $geocoded ++;
            };
            if ($coords) {
// сохраняем результат 
                list($lng, $lat) = explode(' ', $coords);
                $storage .= ($storage ? '|' : '') . implode(":", array(
                    $row[0],
                    $lat,
                    $lng,
                    isset($row[9]) ? intval($row[9]) : 0,
                    $row[0].". ".$row[1].' '.$row[2].' '.$row[3].'<br />'. implode(',', array_slice($row, 4, 5))));
            } else {
// или сохраняем ошибку
                $errordata .= "<tr><td>{$row[0]}</td><td>$addr</td></tr>";
            };
        };
// сохраняем ошибки в файл
        file_put_contents($error, $errordata."<tr colspan='2'>Обработано $count, геокодировано $geocoded<td></tr>");
// если отработан весь файл с данными - удаляем его и выводим ошибки
        if (sizeof($data) == 0) {
            @unlink($dataraw);
            $result['done'] = true;
            file_put_contents($error, "<tr><td colspan='2'>Обработка завершена<td></tr>" .
                "<tr><td colspan='2'><a href='/mapexcel/'>Нажмите для переходы к карте</a><td></tr>",  FILE_APPEND);
        } else {
            file_put_contents($error, "<tr><td colspan='2'>Обработано $count. Осталось ".sizeof($data)."<td></tr>",  FILE_APPEND);
        };
        $result['html'] = file_exists($error) ? file_get_contents($error) : '<tr><td colspan="2">Ошибок не найдено</td></tr>';
// сохраняем файл с обработанными данными
        file_put_contents($datafile, $storage);
// отправляем ответ json
        header('Content-Type: application/json');
        echo json_encode($result);
        exit;
    }

клиентская часть
if (file_exists($dataraw))
{
    echo '<h1>Обработка загруженного файла</h1>';
    echo '<div id="result">Обрабатывается...</div>'.PHP_EOL;
    echo '<script type="text/javascript">
    $().ready(function() {
        var load = function() {
                $.get("?action=work", function(response) {
                    $("#result").html(response.html);
                    if (!response.done) {
                        window.setTimeout(load, 1000);
                    }
                });
            };
        window.setTimeout(load, 1000);
    })
    </script>
    </body>
    </html>';
    exit;
};

пояснения:
1. cron не использую, так как проект мелкий, да и потом вспомнить, что там было в кроне - сложно
2. почему без mysql? нет смысла морочиться из-за такого мелкого объема. данные обновляются ежедневно, а вот адресов будет 20-50 новых в день
3. memcache? вместо него можно использовать что угодно - mysql, файловый кэш и т.д. (сложнее, медленнее)
4. почему curl? сначала исползовал file_get_contents, но после большого числа обращений к геокодеру, яндекс начинает отдавать результаты с большой задержкой и скрипт вылетает по таймауту. Можно поставить set_time_limit(0), но все расвно вылетает из-за Nginx. в общем, curl хорош тем, что легко настраивается timeout. Кстати, насиловать яндекс тысячами адресов в минуту тоже нехорошо)

 

 

1 комментарий
примеры,статьи,геокодирование,API 2.0,статьи пользователей
Тагил и другие новые города на спутниковых картах
30 августа 2012, 15:35

Появились новые спутниковые снимки, которые вы можете использовать через API Яндекс.Карт.

Например на сайте кафе «Женева» местоположение заведения показано именно на спутниковом снимке и это очень красиво. Елена Бокарева, художник из Снежинска, на спутниковой карте размещает фотографии своих картин, а компания «СибирьРегионСтрой» использует их для дизайна сайта!

Тагил и другие новые города на спутниковых картах

Сегодня на Яндекс.Картах появились новые спутниковые снимки. Благодаря им мы значительно увеличили покрытие в Центральном федеральном округе - в первую очередь, за счет Владимирской,  ЛипецкойТверской и Тульской областей.

Серьезно увеличилась территория покрытия Московской области – главным образом, добавился восток области и ee окресности, в частности, такие города, как НогинскЭлектросталь, Сергиев ПосадАлександров. Также на картах появились подробные снимки ПензыКурскаВладимираТвери и (наконец-то) легендарного Нижнего Тагила с его окрестностями.

Что касается обновлений, то кроме Москвы мы заменили снимки УфыТулыВоронежаСаратова и Самары на более свежие и качественные.

Общая площадь релиза составила 50 000 километров, его подробную карту можно посмотреть тут.

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

Вот красивые виды из космоса, которые понравились нам самим:

1. Тверь, речной вокзал на стрелке Тверцы и Волги



2. Нижний Тагил, Дворец Культуры Металлургов



3. Александров, Александровская слобода - резиденция Ивана Грозного



4. Владимир, Свято-Боголюбовский монастырь



5. Могилев, Дом Советов



Команда Яндекс.Карт

 

спутники
API Яндекс.Карт версия 2.0.15
30 августа 2012, 17:39

Опубликована новая версия API Яндекс.Карт. Она доступна по адресу api-maps.yandex.ru/2.0.15. Во вторник, 4 сентября, мы переключим на нее api-maps.yandex.ru/2.0. Если вы хотите продолжить использование предыдущей версии, указывайте api-maps.yandex.ru/2.0.14.

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

Новые возможности:

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

— Балуны, выходящие за пределы карты.

Отображение загруженности дорог без панели пробок.

Добавлено:

— Параметр scale для projection.Cartesian.

— Метод map.geoObjects.getBounds.

— Линейка теперь показывает кратчайшее расстояние.

— Класс Monitor.

Добавлено в публичные пакеты:

behavior.storage.

util.bind.

Исправлено:

— Некорректная работа метода Map.panTo при flying: false.

— Метод getObjectState кластеризатора в некоторых ситуациях отдавал неправильную ссылку на кластер.

— Некорректная работа линейки при использовании декартовой системы координат.

— Некорректное поведение magnifier при попытке использовать его во время анимации.

Event.stopImmediatePropagation теперь не отключает defaultaction событие.

— Ошибка при расчете геодезических кривых для точек, отстоящих ровно на 180 градусов по долготе.

— Оптимизирована работа под Android ICS.

— Ошибка при перетаскивании круга через 180 меридиан.

— Клик по геообъекту без балуна закрывает балун.

— Оптимизирована работа nodeSize (отображение меток с контентом).


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

14 комментариев
обновление,API 2.0
Больше контролов, красивых и разных!
31 августа 2012, 12:43

Пользовательские элементы управления

Вчера мы выпустили новую версию API — 2.0.15.

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

Новые возможности:

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


Итак,  сделала нам настоящий подарок: интегрировала, или как она любит говорить, «запилила» макеты в контролы.

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

Преимущества макетов уже оценили многие из наших пользователей, а также те, кто посетил наши мероприятия.

Для демонстрации возможностей макетов мы отобрали шесть самых популярных элементов управления картой в API (КнопкаРаскрывающийся списокПоиск по картеПростой элемент управления масштабом картыПанель управления пробками, и Переключатель типа карты) и изменили их дизайн с помощью популяного css-фреймворка Twitter Bootstrap.

Посмотреть примеры в новом окне.

Код на гитхабе.

Поведение всех элементов управления должно было сохранить обратную совместимость со всеми предыдущими версиями API, однако, поскольку их внутренняя реализация была полностью переписана, мы рекомендуем обратить на них внимание при переключении версии API на новую (автоматически мы переключим 2.0 на 2.0.15 во вторник, 4 сентября). Если вы заметите ошибки в их работе, пишите нам, пожалуйста, в клуб.

Советы по поиску ошибок в коде мы публиковали в статьях День победы над ошибками и Победа над ошибками ч.2.

А научиться писать правильные багрепорты можно у пользователя .

2 комментария
примеры,статьи,контролы,элементы управления,API 2.0