В версии 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 Яндекс.Карт.
Изменено:
— При несовпадении реальных размеров изображения с указанными опция imageSize растягивает либо сжимает картинку.
— При добавлении элементов управления в позиции можно указывать один якорь, например, только bottom.
Команда разработчиков API Яндекс.Карт.
Мы решили дополнить существующую систему версионирования 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 Яндекс.Карт.
Победителем конкурса и обладателем денежного приза стал Николай Васильчук, автор модуля Yandex.Maps. Поздравляем Николая с этим достижением!
Конкурс был объявлен два месяца назад. Задачей конкурсантов было придумать такие решения, которые позволят владельцу сайта на Друпале без навыков программирования разместить на своем сайте Яндекс.Карты. Всего мы получили четыре конкурсные работы, которые оценивала комиссия экспертов из Российского сообщества Друпала.
Этот модуль, а также плагины для других CMS, вы можете найти на сайте API Яндекс.Карт. Если вы разработали или просто нашли в сети модуль, которого нет у нас на сайте, напишите нам. Мы уверены, что после того, как API-ключи стали необязательными, хороших модулей станет больше.
Спасибо всем участникам! Отдельно благодарим Российскую Друпал ассоциацию за помощь в подготовке и проведении конкурса, а также экспертов Pоссийского сообщества Друпал, которые помогли нам с оценкой конкурсных работ. Ими были Артем Паньков, Анна Федорук, Александр Графов, Виктор Степаньков, Роман Архаров, Станислав Езерский, Андрей Постников и Владислав Савицкий.
Команды Яндекса для бизнеса и API Яндекс.Карт
Мы уже публиковали статью и пример использования Geolocation API для API Яндекс.Карт 1.x в 2010 году. До сих пор она остается одной из самых популярных в блоге.
В связи с выходом версии 2.0 API Яндекс.Карт мы решили обновить пример и переписали код.
Посмотреть пример в новом окне.
Сам API Яндекс.Карт также умеет определять местоположение пользователя на основе его IP-адреса. Но этот способ не такой точный, как при использовании Geolocation API.
Местоположение пользователей уже определяют, например, сайты allcafe.ru и esosedi.ru.
Сегодня хотели бы поделиться с вами статьей «Занимательная геодезия», которую написал
Поводом для статьи послужил релиз версии 2.0.13, в котором были реализованы инструменты для решения геодезических задач.
onload
. Пока вы можете воспользоваться советами Владимира, а мы в ближайшее время дополним документацию.
Команда API Яндекс.Карт.
Мы заметили, что достаточно часто пользователи клуба сталкиваются с задачей получения координат для списка адресов (или получения адресов для списка координат). При этом встроенный в API геокодер позволяет получать данные только для одного адреса за один запрос.
Для обработки массива адресов мы написали класс множественного геокодирования. Его интерфейс полностью соответствует интерфейсу стандартного класса геокодирования в API, т.е. принимает те же опции и также возвращает объект-обещание (Promise). С его помощью можно делать смешанное гекодирование в одном запросе: для адресов — прямое, для координат — обратное (["Москва", [55.7, 37.5]]).
Также мы написали пример с использованием этого класса.
Класс множественного геокодирования позволяет получить коллекцию геообъектов для списка адресов и координат на клиенте. Полученная коллекция геообъектов может быть использована для отображения на карте или в качестве источника данных. Например, для добавления в кластер.
Использование этого класса позволяет решить проблемы, возникающие из-за асинхронности работы геокодера. Когда для каждого адреса из списка отправляется отдельный http-запрос, при этом время ответа сервера может быть разное, и как следствие, результаты могут прийти в разном порядке, например пятый адрес может прийти вторым и т.д. Написанный нами класс решает сразу две задачи:
1. Расположить найденные результаты в правильном порядке, соответствующем порядку в массиве адресов во входных данных.
2. Дождавшись ответа по всем запросам, сигнализировать о успешном выполнении и отдать агрегированный результат или вернуть ошибку.
Выбирая решение для вашего проекта, рекомендуем учитывать, что иногда лучше прогеокодировать все адреса на сервере, записать их в базу и работать на клиенте уже с координатами. Таким образом вы сэкономите трафик пользователей. Алгоритм множественного геокодирования на сервере подробно рассмотрен в статье «Получение координат для списка адресов».
На Хабре нашли очень интересную статью о том, как отображать панорамы с помощью KRPano на Яндекс.Картах у себя на сайте.
Подробная инструкция для всех, кто интересовался.
Не так давно, мы перевели документацию API Яндекс.Карт на английский язык. Это было сделано специально для пользователей Яндекс.Карт в Турции.
Мы подумали, что, возможно, кому-то из наших русскоговорящих пользователей может понадобиться перевод на английский, поэтому с радостью делимся с вами ссылкой: api.yandex.com.tr/maps/do
Пользователь
Если вы написали статью об API Яндекс.Карт, которая могла бы быть полезна другим разработчикам, присылайте ее нам в комментарии к любому посту или на адрес ymapsapi@ya.ru. Мы ее изучим и опубликуем в этом блоге с обязательными упоминаниями и ссылками на автора.
В блоге Занимательная веб-картография опубликована новая статья о том, как создать карту с адресами магазинов для своего сайта.
В примере, описанном в статье, реализован выбор региона из выпадающего списка, а затем и конкретного адреса. После выбора региона на карте показываются все расположенные там объекты. А при клике на адрес карта зумится до масштаба дома и открывается балун с дополнительной информацией.
Надеемся скоро увидеть сайты, на которых реализованы эти возможности.
UPD: после публикации статьи прислали отличный пример подобный реализации dom-rus.com/search.
Видео и презентация доклада Сергея Перескокова (
Постоянный участник клуба разработчиков
Ранее мы уже публиковали класс множественного геокодирования на клиенте и наш вариант получения координат для списка адресов с использованием 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 и streetif ($xml->GeoObjectCollection->metaDataProperty->Geoc oderResponseMetaData->fou nd !=0 && in_array($xml->GeoObjectCollection->featureMember[ 0]->GeoObject->metaDataPr operty->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);// отправляем ответ jsonheader('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. Кстати, насиловать яндекс тысячами адресов в минуту тоже нехорошо)
Появились новые спутниковые снимки, которые вы можете использовать через API Яндекс.Карт.
Например на сайте кафе «Женева» местоположение заведения показано именно на спутниковом снимке и это очень красиво. Елена Бокарева, художник из Снежинска, на спутниковой карте размещает фотографии своих картин, а компания «СибирьРегионСтрой» использует их для дизайна сайта!
Сегодня на Яндекс.Картах появились новые спутниковые снимки. Благодаря им мы значительно увеличили покрытие в Центральном федеральном округе - в первую очередь, за счет Владимирской, Липецкой, Тверской и Тульской областей.
Серьезно увеличилась территория покрытия Московской области – главным образом, добавился восток области и ee окресности, в частности, такие города, как Ногинск, Электросталь, Сергиев Посад, Александров. Также на картах появились подробные снимки Пензы, Курска, Владимира, Твери и (наконец-то) легендарного Нижнего Тагила с его окрестностями.
Что касается обновлений, то кроме Москвы мы заменили снимки Уфы, Тулы, Воронежа, Саратова и Самары на более свежие и качественные.
Общая площадь релиза составила 50 000 километров, его подробную карту можно посмотреть тут.
Кстати, спутниковые карты – это повод для того, чтобы немного порисовать. На Народной карте вы можете нарисовать любой объект – например, здание или парк. Эти карты – самые оперативные и сообщают другим людям информацию, которой нет на официальных картах.
Вот красивые виды из космоса, которые понравились нам самим:
1. Тверь, речной вокзал на стрелке Тверцы и Волги
2. Нижний Тагил, Дворец Культуры Металлургов
3. Александров, Александровская слобода - резиденция Ивана Грозного
4. Владимир, Свято-Боголюбовский монастырь
5. Могилев, Дом Советов
Команда Яндекс.Карт
Опубликована новая версия 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.
Добавлено в публичные пакеты:
— util.bind.
Исправлено:
— Некорректная работа метода Map.panTo при flying: false.
— Метод getObjectState кластеризатора в некоторых ситуациях отдавал неправильную ссылку на кластер.
— Некорректная работа линейки при использовании декартовой системы координат.
— Некорректное поведение magnifier при попытке использовать его во время анимации.
— Event.stopImmediatePropagation теперь не отключает defaultaction событие.
— Ошибка при расчете геодезических кривых для точек, отстоящих ровно на 180 градусов по долготе.
— Оптимизирована работа под Android ICS.
— Ошибка при перетаскивании круга через 180 меридиан.
— Клик по геообъекту без балуна закрывает балун.
— Оптимизирована работа nodeSize (отображение меток с контентом).
Команда разработчиков API Яндекс.Карт.
Вчера мы выпустили новую версию API — 2.0.15.
Очевидно, что за каждым пунктом в списке обновлений стоит большой труд команды проекта, но одному пункту мы хотим посвятить эту статью.
Новые возможности:
— Пользовательские макеты для элементов управления.
Итак,
Теперь можно использовать единую фабрику макетов как в оверлеях, так и в элементах управления. Эта возможность сильно упрощает решение задачи их кастомизации и приведения их внешнего вида в соответствие со стилистикой сайта.
Преимущества макетов уже оценили многие из наших пользователей, а также те, кто посетил наши мероприятия.
Для демонстрации возможностей макетов мы отобрали шесть самых популярных элементов управления картой в API (Кнопка, Раскрывающийся список, Поиск по карте, Простой элемент управления масштабом карты, Панель управления пробками, и Переключатель типа карты) и изменили их дизайн с помощью популяного css-фреймворка Twitter Bootstrap.
Посмотреть примеры в новом окне.
Код на гитхабе.
Поведение всех элементов управления должно было сохранить обратную совместимость со всеми предыдущими версиями API, однако, поскольку их внутренняя реализация была полностью переписана, мы рекомендуем обратить на них внимание при переключении версии API на новую (автоматически мы переключим 2.0 на 2.0.15 во вторник, 4 сентября). Если вы заметите ошибки в их работе, пишите нам, пожалуйста, в клуб.
Советы по поиску ошибок в коде мы публиковали в статьях День победы над ошибками и Победа над ошибками ч.2.
А научиться писать правильные багрепорты можно у пользователя