Клуб API Карт

декабрь 2013
Перенести карту из одного dom дерева в другое
Виталий С.
1 декабря 2013, 00:06

подскажите пожалуйста

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

 

стала идея оптимизировать, и сделать, что бы это была одна карта

потому что в определенный момент времени видна только одна карта

скажите есть примере, где можно было бы посмотреть на подобную реализацию

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

на карте много элементов, скажем 2000, меток, и когда есть две карты, то лишняя нагрузка на клиента

 

буду благодарен за любые советы

 

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

mapSmallToLarge: function() {
    $('#mapl').append($('#map'));
},
mapLargeToSmall: function() {
    $('#map-container').append($('#map'));
},

 

2 комментария
fitToViewport,API 2.0,несколько карт
Неточности в документации на геокодер
Гарри
1 декабря 2013, 00:32

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

http://api.yandex.ru/maps/doc/geocoder/desc/concepts/response_structure.xml#json_response

1 комментарий
документация,геокодирование
Привет из Малайзии =)
dimik
1 декабря 2013, 14:41
АПИ Яндекс.Карт – это БОМБА!!!
АГОНЬ-АГОНЬ!!!

Привет из Малайзии

Привет из Малайзии

Нет комментариев
http://geocode-maps.yande
divined
1 декабря 2013, 17:35

http://geocode-maps.yandex.ru/1.x/?geocode=62.15,24.94&kind=locality

По этим координатам у нас Финляндия, что я делаю не так?

2 комментария
геокодирование
На карте не отображается текст хинта
frozzen.gm
2 декабря 2013, 10:53

Здравствуйте, уважаемые специалисты!

 

Столкнулся со странным глюком: хинты над метками на картах всплывают, но текст не отображают. Что делать? Куда копать?

hintContent у Placemark задан.

9 комментариев
метка,API 2.0,хинт
Расчет маршрута за пределами границы
yevart-nikita
2 декабря 2013, 11:20

Добрый день.

Задача состоит в том, чтобы расчитать расстояние маршрута, который выходит за пределы какой-то границы (например МКАДа или города).

За пример я взял скрипт http://api.yandex.ru/maps/jsbox/route_inside_polygon но никак не получаетя получить расстояние за МКАДом, прошу помочь с этим.

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

11 комментариев
маршрутизация,API 2.0
Баг Маршрутизатора? Не строится маршрут между точками.
boniole
2 декабря 2013, 11:51

Задаю две точки: 55.6549   37.7023     и       55,666569000000    37,588009000000 с учетом пробок, пишет что маршрут невозможно построить, API выдает ошибку строения маршрута. Почему?

12 комментариев
Хранение пользовательских данных в геообъекте
Андрей Ж.
2 декабря 2013, 13:36

Добрый день!

Получаю из БД координаты полигонов и добавляю их на карту. Вместе с координатами получаю пользовательские данные
(id, комментарий и т.п.). Как связать эти данные с полигоном? Для начала хочу вывести alert'ом пользовательский id объекта.

var poly = new ymaps.Polygon([ obj['data'], []],
   {
   },
   {
     fillColor: '#0000ff',
     strokeWidth: 1,
     opacity: 0.5,
     draggable: true
   }
);
poly.events.add('click', function(e) {
  alert('?');
});
myMap.geoObjects.add(poly);
poly.editor.startEditing();

4 комментария
API 2.0,полигон
Эволюция API Яндекс.Карт от версии 1.x до 2.1-beta
a.chebotareov
2 декабря 2013, 15:31
Эволюция API Яндекс.Карт от версии 1.x до 2.1-beta

От разработчика для разработчиков. Вся история API Яндекс.Карт в одном докладе. 7-8 декабря в Омске на Базе отдыха им. Стрельникова пройдет конференция HappyDev’13, посвященная вопросам разработки, на которой выступит разработчик интерфейсов API Яндекс.Карт Антон Корзунов.

Антон расскажет о развитии сервиса API Яндекс.Карт от версии 1.0 до 2.1-beta, о том, в каких случаях и почему нужно выпускать новую версию продукта, даже если это чревато сломом обратной совместимости. Кроме этого слушатели узнают какие технические и идеологически изменения могут заставить разработчиков полностью переписать работающий сервис и почему не нужно этого бояться.

Кто хочет послушать доклад Антона, приходите 8 декабря в Малый зал конференции. Именно там в секции Frontend с 13:35 по 14:05 Антон расскажет все секреты эволюции API и ответит на вопросы посетителей.

Подробная программа мероприятия.

2 комментария
конференции,анонсы
Область видимости для двух координат при небольшом расстоянии между ними
Sergey Kshanovskiy
2 декабря 2013, 18:56

 

function detectPlace(el) {
  accountMap.geoObjects.remove(myCollectionAcc);
  if (clickIndex > 0) {
    accountMap.geoObjects.remove(clickedService);
  }
  if (detectIndex > 0) {
    accountMap.geoObjects.remove(myPlacemarkDetect);
    accountMap.geoObjects.remove(point);
  }
  geolocationAcc = ymaps.geolocation,
  serviceAcc = new GeolocationService(),
  myLocationAcc = serviceAcc.getLocation({
      // Режим получения наиболее точных данных.
      enableHighAccuracy: true,
      // Максимальное время ожидания ответа (в миллисекундах).
      timeout: 10000,
      // Максимальное время жизни полученных данных (в миллисекундах).
      maximumAge: 1000
  });
  myLocationAcc.then(function (loc) {
      myCoordsAcc = [loc.latitude, loc.longitude],
      myPlacemarkDetect = new ymaps.Placemark(myCoordsAcc, {
          balloonContentBody: "Ваше местоположение"
      }, {
          preset: 'twirl#redIcon'
      });
      accountMap.setCenter(myCoordsAcc);
      accountMap.geoObjects.add(myPlacemarkDetect);
      defaultPoint = el.parent().parent().parent().next();
      var centerCoord = [Number(defaultPoint.attr('data-lat')), Number(defaultPoint.attr('data-lng'))];
      point = new ymaps.Placemark(centerCoord, {
        balloonContentBody: 'Ваша услуга' + '</br>' + defaultPoint.attr('data-kat') + '</br>' + defaultPoint.attr('data-podkat')
      }, {});
      detectIndex++;
      accountMap.setBounds([centerCoord, myCoordsAcc]);
      accountMap.geoObjects.add(point);
  });
}

Есть функция которая устанавливает на карте 2 метки: 1 - местоположение через Geolocation API, 2 - метка по определенным координатам. Нужно обязательно, чтобы метки находиись в областе видимости, я это реализовал способом выше, но тут возникает нюанс если расстояние между метками очень маленькое, карта выдает ошибку о том, что заданной области не существует, расстояние может быть как и совсем маленькое, так и очень большое. Возможно я использую не совсем верный подход, буду рад слышать другие варианты реализации.

PS: Пробывал вариант так же вариант accountMap.setBounds(accountMap.geoObjects.getBounds());, но он постоянно выбивал ошибку.

 

2 комментария
API 2.0,область видимости
многослойный картиночный слой!
sergei.murko
2 декабря 2013, 19:32

Прорисовывать тайлы при зуме 16! Нет возможности! Поэтому было выдвинуто решение прорисовывать тайл(тайлы если метка на краю тайла), но использовать многоуровневую систему. Т. е. получать от пользователя информацию в виде массива видимых тайлов. Исходя из координат, подгружать тайлы в несколько слоев! То есть для каждой точки свой тайл! Если в тайле 2 метки, то естественно путем наложения получается 3 слоя! + слой активных областей!


 

Слой активных областей

V

Нарисованный тайл со 2 точкой

V

Нарисованный тайл с 1 точкой

V

Карта с тайлом с 2 координатами

Плюсы (по нашим взглядам):

 

Ненадо будет хранить кучу пустых тайлов!

Тайлы будут грузится только если они нужны! 

 

Минус:

Вместо 1 тайла, будет 2, если в тайл попали 2 координаты!(<-На этот минус мы забили!)

 

1)Проблема встала в том, что не нашел функции, которая бы передала значения всех отображаемых тайлов!

Для передачи массива серверу, дабы вернуть массив изображений!

2)Через layer нельзя добавить тайл! отсуствует метод типа add(url);

 

Кто что посоветует?

 

1 комментарий
тайлы,API 2.0
Кластеризация разных типов меток, возможно ли?
WikiJournal
3 декабря 2013, 02:25

Привет всем, столкнулся с одной проблемой! В общем у меня на карте разные типы меток, все метки вытаскиваются с базы данных определяя их вид и размещение на карте. Возможно ли кластеризировать разные типы меток на одной карте?

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

 

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

        //Определение начальных параметров карты
        function init () {
            var myMap = new ymaps.Map("map", {
                    center: [42.87,74.59],
                    zoom: 12,
                    behaviors:['default', 'scrollZoom']
                }, {
                    balloonMaxWidth: 600
                });
           
            //Добавляем элементы управления   
            myMap.controls               
                .add('zoomControl')               
                .add('typeSelector')               
                .add('mapTools');
               
            //Запрос данных и вывод маркеров на карту
        $.getJSON("vivodpointsmap.php",
        function(json){
                for (i = 0; i < json.markers.length; i++) {

                    var myPlacemark = new ymaps.Placemark([json.markers[i].lat,json.markers[i].lon], {
                    // Свойства
                    iconContent: json.markers[i].icontext,
                    hintContent: json.markers[i].hinttext,
                    balloonContentBody: json.markers[i].balloontext                  
                    }, {
                    // Опции
                    preset: json.markers[i].styleplacemark                   
                });

                // Добавляем метку на карту
                myMap.geoObjects.add(myPlacemark);

            }
 
        });   
               
        }

 

 

ну и так определяю массив данных внутри метки и его вид:

 

<?php
header('Content-Type: text/html; charset=utf-8');
 
require ("bd.php");
 
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
 
$result = mysql_query("SELECT * FROM prodam");
if(mysql_num_rows($result)>0)
{
while ($mar = mysql_fetch_array($result))
{
        $json =  array(
        icontext=>$mar['rooms'],
        styleplacemark=>$mar['stylePlacemark'],
        lat=>$mar['lat'],
        lon=>$mar['lon']
    );
   
    $json["hinttext"] .= "{$mar["price"]} $";
    $json["balloontext"] .= "<div id=\"ballooncontent\">Комнат:<b> {$mar["rooms"]}</b></div>";
    $json["balloontext"] .= "<div id=\"ballooncontent\">Площадь:<b> {$mar["square"]} кв.м.</b></div>";
    $json["balloontext"] .= "<div id=\"ballooncontent\">Цена:<b> {$mar["price"]} $</b></div>";
    $json["balloontext"] .= "<div id=\"ballooncontent2\">Этаж:<b> {$mar["etage"]}</b></div><div id=\"linkballon\"><a target=\"_blank\" href=\"details.php?id={$mar["id"]}\">Подробнее ...</a></div>";
   
    $markers[] = $json;
}
 
}
$points = array(markers=>$markers);

echo json_encode($points);
 
}
 
?>

 

stylePlacemark - определяет вид метки

карту можно саму посмотреть тут http://kv.livewebmap.com/proba.php

кто поможет разобраться?

16 комментариев
метка,кластеризатор,API 2.0
Клик по геообъекту
kolesoffac
3 декабря 2013, 11:24

У меня есть карта с объектами в несколько десяток, объединенных в кластеры.

При создании объекта использовалась опция:

balloonContentBody: 'text'

 

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

 

Обработчик по клику нашел:

placemarks[j].events.add('click', function(e){ 
alert("");
});

 

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

 

 Спасибо

4 комментария
метка,кластеризатор,события,API 2.0,балун
Нахождения слоя в коллекции
smog005
3 декабря 2013, 11:46

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

Есть коллекция слоёв (LayerCollection). Необходимо включать/выключать отображение слоёв на карте из этой коллекции по требованию.

1. Как найти конкретный слой в коллекции ? Ведь у слоя нет вроде как определяемых свойств (т.е. скажем имя задать не получится) ? Даже если слой - глобальная переменная, то у LayerCollection я не нашёл метода для проверки. Можно только добавить или удалить слой. А как проверить наличие ? Через each() надо что-то с чем-то сравнивать, а что ? Не tileUrlTemplate же ?

2. Как я понял нельзя в коллекции сделать слой невидимым ? Т.е. только удалить/добавить ?

2 комментария
слои,API 2.0,коллекции
При изменении XML файла динамически обновить данные на карте.
marj-erokhova
3 декабря 2013, 14:34

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

 

В моем проекте столкнулась с таким вопросом:

 

http://gis.centerit35.ru/admin.php - страничка которая позволяет пользователю определить координаты объектов.

 

 Пользователь "жмет" на объект в меню

                             |

                            V

Появляется метка, которую можно перетащить, пользователь "перетаскивает" ее куда ему нужно

                             |

                            V

Когда выбрал месторасположение - жмет "пробел" на клавиатуре, тем самым подтверждает свой выбор.

                             |

                            V

В этот момент срабатывает ajax запрос и у данного объекта в БД меняеются поля с координатами.

 

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

4 комментария
API 2.0,YMapsML
При доступе к api-maps.yandex.ru по https возникает ошибка "Сертификат узла был отозван".
doubleyad
3 декабря 2013, 14:42

При обращении на https://api-maps.yandex.ru/2.0/?load=package.full&lang=ru-RU из кода происходит ошибка

ymaps.Map init failed (пишу по памяти, не успел заскриншотить).

При попытке открыть этот url через браузер возникает ошибка:

"При соединении с api-maps.yandex.ru произошла ошибка. Сертификат узла был отозван. Код ошибки sec_error_revoked_certificate."

При этом если нажать на странице кнопку  "Попробовать снова", то на некоторых компьютерах ошибка пропадает, код срипта загружается и после этого уже не происходит ошибок при обращении из скрипта. Но не всегда, у других клиентов ошибка так и остаётся висеть.

Не подскажете, в чём может быть проблема?

 

Да, до сегодняшнего дня ни каких нареканий к работе с картами по https не было. Отработали больше ггода

1 комментарий
https,API 2.0
Прокладывание маршрута (route), error 500 internal server error
rodogor46rus
3 декабря 2013, 15:14

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

 

Появилась проблема и использованием ymaps.route(...). через некоторые точки не прокладываются маршруты.

 

Работающие примеры:

курск - москва, москва - орёл,....

Неработающие примеры:

нижний новгород ~ арзамас. Смотрю отладчиком, в ответе сервера вижу следующее:

 

{"error":{"status":"500","message":"internal server error"}}

 

Так же в отладчике вижу, какая строка передаётся для поиска:

Россия, Нижегородская область, Нижний Новгород~Россия, Нижегородская область, Арзамас

 

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

 

URL, по которому уходит запрос, выглядит так:

http://api-maps.yandex.ru/services/route/1.1/route.xml?callback=id_138606680047543319&lang=ru_RU&rll=%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F%2C%20%D0%9D%D0%B8%D0%B6%D0%B5%D0%B3%D0%BE%D1%80%D0%BE%D0%B4%D1%81%D0%BA%D0%B0%D1%8F%20%D0%BE%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D1%8C%2C%20%D0%9D%D0%B8%D0%B6%D0%BD%D0%B8%D0%B9%20%D0%9D%D0%BE%D0%B2%D0%B3%D0%BE%D1%80%D0%BE%D0%B4~%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F%2C%20%D0%9D%D0%B8%D0%B6%D0%B5%D0%B3%D0%BE%D1%80%D0%BE%D0%B4%D1%81%D0%BA%D0%B0%D1%8F%20%D0%BE%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D1%8C%2C%20%D0%90%D1%80%D0%B7%D0%B0%D0%BC%D0%B0%D1%81&sco=latlong

Собственно, переходя по нему, можно увидеть тот самый JSON с ошибкой.

Попробуем поискать по запросу "нижний новгород - арзамас":

http://api-maps.yandex.ru/services/route/1.1/route.xml?callback=id_138606680047543319&lang=ru_RU&rll=%D0%9D%D0%B8%D0%B6%D0%BD%D0%B8%D0%B9%20%D0%BD%D0%BE%D0%B2%D0%B3%D0%BE%D1%80%D0%BE%D0%B4~%D0%90%D1%80%D0%B7%D0%B0%D0%BC%D0%B0%D1%81&sco=latlong

 

Видим, что запрос выполняется, расстояние находится.

 

У всех подобная проблема ? Может следует перейти на передачу координат вместо названий городов ?

 

P.S. Прямое обращение к API выполнено для демонстрации, на сайте подключено API и используется 2.0-stable версия. Листинг кода не показываю, он примитивен.

 

1 комментарий
маршрутизация,API 2.0
Прокладывание маршрута и измерение расстояние в конструкторе. Как реализовать
v.verschina2012
3 декабря 2013, 17:58

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

9 комментариев
маршрутизация,конструктор
тег для кода
Виталий С.
3 декабря 2013, 19:03

Было бы хорошо, добавить тег, для оформления кода. Намного легче воспринимается информация.

 

А то не очень удобно вставлять и читать код. При формировании коментариев или новой темы.

 

p.s.

сорри, если оффтоп

4 комментария
Как скачать карты для использования оффлайн?
urivskay
4 декабря 2013, 11:50

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

 

P.S. мое приложение, которое я пишу, является бесплатыни и свободнораспростараняемым.

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