Клуб API Карт

Найдено на тему «API 2.0»:
Как узнать координаты через 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
geolocation на Мобильном устройстве и Desktop
Илья Зеленский
13 сентября 2016, 13:33

Добрый день!
Использую API Yandex Maps 2.0 для определения геопозиции пользователя.
Для определения координат, города и региона использую функцию

var geolocation = ymaps.geolocation;

Из данного объекта получаю:

alert(geolocation.region +' '+ geolocation.city +' '+ geolocation.latitude +' '+ geolocation.longitude);

Сегодня обнаружил странное поведение:

Любой Desktop браузер возвращает, в моем случае, "Самарская область Тольятти 51,255 52,333" (на координаты не обращайте внимания они из головы - факт в том что они возвращаются)

Любой Mobile браузер возвращает, в моем случае, "undefind undefind 51,255 52,333"

В итоге: на любом мобильном устройстве на geolocation.region и geolocation.city возвращает undefind, но координаты определяет правильно. На desktop проблем вообще нет.

В чем может быть проблема?

geolocation api,yandex api,API 2.0
Переключение ссылки 2.0
Maps API
16 февраля 2016, 13:00

Сегодня мы переключили ссылки api-maps.yandex.ru/2.0 и api-maps.yandex.ru/2.0-stable, которые теперь соответствуют версии 2.0.43

40 комментариев
обновление,новости,API 2.0
API Яндекс.Карт версия 2.0.43
Maps API
12 февраля 2016, 11:56

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

В новой версии мы добавили блок "открыть в Яндекс.Картах". Теперь из карты, созданной в API, можно перейти на сервис maps.yandex.ru/, сохранив расположение меток, построенный маршрут, результаты поиска и другие параметры карты. 

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

новости,обновление,API 2.0
Как заменить метку из текстового поля после отрисовки карты?
llaabbss
20 января 2016, 13:56

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

 

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

 

У меня есть карта, которая автоматически загружается при загрузке страницы и определяет координаты пользователя (все из примеров Яндекса):

<script src="//yandex.st/jquery/1.8.0/jquery.min.js" type="text/javascript"></script>

<script src="//api-maps.yandex.ru/2.0/?lang=ru-RU&load=package.full" type="text/javascript"></script>

<script src="geolocation_service.js" type="text/javascript"></script>

<script src="geolocation.js" type="text/javascript"></script>

 

<div id="map" style="width: 100%;"></div>

 

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

 

Так вот теперь вопрос: как сделать так, чтобы после того, как карта была подготовлена, построена и выведена, при помощи AJAX запроса через отдельно стоящее текстовое поле менять/добавлять/заменять метки на карте и автоматически?

Или второй вопрос: если все же имеет смысл выбрать все имеющиеся данные из базы данных и кластеризовать их на карту Яндекса, как потом сделать так, чтобы при выборе в теге <select> карта убирала маркеры ненужных точек, оставляла только интересующую меня координату и автоматически перемещалась к указанной координате?


Заранее спасибо.

2 комментария
метка,API 2.0,AJAX
Ошибка геолокации с мобильного браузера с выключенным WiFi
crn
15 января 2016, 16:36

В API 2.0 по ymaps.geolocation проблем нет, но в API 2.1 по IP (провайдер 'yandex') показывает неверные координаты, а режимы {provider: 'browser'} и {'provider: auto'} не работают (хотя 'auto' должен работать всегда?!). Но при этом всем navigator.geolocation браузера показывает верные координаты! Настройки геолокации браузера проверены. У коллег тоже самое.

 

Вот результат:

... старт:

определение по IP:[51.691219,81.11363]

определение по navigator.geolocation:[54.8625062,83.0897644]

ошибка определения по auto:"Not found"

ошибка определения по browser:"Not found"

 

Вот код:

function init() {

$('body').append('старт:' + '<br>')

         

    ymaps.geolocation.get({

        provider: 'yandex'

    }).then(

   function (result) {

   var html = JSON.stringify(result.geoObjects.position);

   $('body').append('определение по IP:' + html + '<br>')

    

    },

   function(err){

   var html = JSON.stringify(err);

   $('body').append('ошибка определения по IP:' + html + '<br>')

   }

    );

 

    ymaps.geolocation.get({

        provider: 'browser'

    }).then(

   function (result) {

   var html = JSON.stringify(result.geoObjects.position);

   $('body').append('определение по browser:' + html + '<br>')

    },

   function(err){

   var html = JSON.stringify(err);

   $('body').append('ошибка определения по browser:' + html + '<br>')

   }

    );

    

    ymaps.geolocation.get({

        provider: 'auto'

    }).then(

   function (result) {

   var html = JSON.stringify(result.geoObjects.position);

   $('body').append('определение по auto:' + html + '<br>')

    

   },

   function(err){

   var html = JSON.stringify(err);

   $('body').append('ошибка определения по auto:' + html + '<br>')

   }

    );

    

    navigator.geolocation.getCurrentPosition(

    function(result){

var crd = result.coords;

var html = '[' + crd.latitude + ',' + crd.longitude + ']';

$('body').append('определение по navigator.geolocation:' + html + '<br>')

    }, 

   function(err){

   var html = JSON.stringify(err);

   $('body').append('ошибка определения по navigator.geolocation:' + html + '<br>')

   }, 

   {}

    );

 

}

ymaps.ready(init);

 

Куда копать? Не хотелось бы делать navigator.geolocation -> геокодирование по полученным координатам

6 комментариев
API 2.1,API 2.0,геокодирование
Ошибка при построении маршрута по некоторым адресам (например, "м Выхино")
mpetrushk
13 ноября 2015, 16:13

Добрый день.

В версии карты 2.0.33(41) (а также, 2.1 последней сборки) не строится маршрут "Южнобутовская, 17 → м Выхино".  Подробности в скринах (см. в конце поста).

Примерный код построения маршрута (можно проверить в песочнице, https://tech.yandex.ru/maps/jsbox/2.1):

ymaps.ready(init);

function init() {
  var boundedArea = [[55.576307, 37.348506], [55.92947, 37.827785]];
 
  return ymaps.route(['Южнобутовская, 17', 'м Выхино'], {
    mapStateAutoApply: true,
    avoidTrafficJams: true,
    boundedBy: boundedArea
  }).then(function(route) {
    alert("success");
  }, function(error) {
    alert("error");
  });
}


Сваливаемся в обработку ошибок, error при этом выглядит следующим образом:

    Object { code=500,  message="can't construct a route"}


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

Если вместо 'м Выхино' написать, скажем 'м Фрунзенская', то всё работает.

 

Снимки экрана (firebug): https://yadi.sk/d/cPdc0q_ukSBir (там запросы, ответы, и прочее)

2 комментария
маршрутизация,API 2.1,API 2.0,ошибка,проблема
Объединение крайних меток из группы в многоугольник
tomastovt
5 ноября 2015, 12:31

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

 

6 комментариев
метка,API 2.0
Минимальный путь на карте
Ryder78
27 октября 2015, 14:38

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

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

Сначала я пробовал через ymaps.route([...]), но эта функция, к сожалению, не сортирует, а выводит пути к точкам в той последовательности, в какой получает.

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

Какое может быть ещё решение такой задачи?

Возможно, есть вариант получить ещё также в ответ отсортированный список адресов?

2 комментария
маршрутизация,API 2.0,route
О районах Москвы
Юлия К
23 октября 2015, 18:06

Не нашла в вопросах и ответах, поэтому задаю вопрос здесь.

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

[Log] Тип геообъекта: street (direct_geocode, line 60)
[Log] Название объекта: Новокосинская улица (direct_geocode, line 61)
[Log] Описание объекта: Россия, Москва (direct_geocode, line 62)
[Log] Полное описание объекта: Россия, Москва, Новокосинская улица (direct_geocode, line 63)
[Log] Район: undefined (direct_geocode, line 64)


Как видно из логов никакого района или округа Москвы там нет, хотя это Восточный административный округ.

Заранее благодарю за ответ. 

1 комментарий
API 2.1,округ города,район в картах,метка,API 2.0,геокодирование,маршрутизация
options balloonContentBodyLayout различие 2.0 и 2.1
mogafk2016
20 октября 2015, 23:27

Следующий код отрабатывает на версии 2.0, но не 2.1. Иначе говоря 2.1 не ставит нового балуна, а выводит дефолтный. Как с путем, так и точками.

    ymaps.ready(function(){
        var map = new ymaps.Map("map",{
            center: [55.76, 37.64],
zoom: 10
});
var testingBalloon;
ymaps.route([
            'Королев',
{type: 'viaPoint', point: 'Мытищи'},
'Химки'
], {
            mapStateAutoApply: true
}).then(function (route) {
            route.getPaths().options.set({
balloonContentBodyLayout: ymaps.templateLayoutFactory.createClass('kyky'),
strokeColor: '0000ffff',
opacity: 0.9
});

route.getWayPoints().options.set({
                balloonContentBodyLayout: ymaps.templateLayoutFactory.createClass('hello kitty')
            });

map.geoObjects.add(route);

});

})
3 комментария
API 2.1,API 2.0
map.Balloon в версии 2.0 и 2.1
mogafk2016
16 октября 2015, 19:01

В версии 2.0 мы могли сделать нечто:

ymaps.ready(function(){
    var map = new ymaps.Map("map",{
        center: [55.76, 37.64],
zoom: 10
});
var balloon = map.balloon.open(map.getCenter(), { content: 'Hello Yandex!' }, { closeButton: true });
balloon.setData({content: "changed Text"});

})

В версии 2.1 этот же код выдает на balloon.setData(....) ошибку "Uncaught TypeError: undefined is not a function"

Карты подключались так:

<script src="https://api-maps.yandex.ru/2.1/?load=package.full&lang=ru_RU&mode=debug" type="text/javascript"></script>
<!--<script src="https://api-maps.yandex.ru/2.0/?load=package.full&lang=ru_RU&mode=debug" type="text/javascript"></script>-->

Важный: Как поменять контент балуна в версии 2.1?

Офтопный: это же поломанная обратная совместимость, неотображенная по семвер?

3 комментария
API 2.1,API 2.0,балун
Общий балл пробок по конкретному городу
Макс Пачино
8 октября 2015, 11:08

У нас имеется новостной сайт Ростова. Необходимо реализовать вывод бала пробок в городе, допустим - "Пробки : 5 баллов".

Реально ли это сделать с помощью вашего сервиса? Хотелось бы работать с вами.

Или же придется рассматривать сторонние ресурсы?

1 комментарий
API 2.1,API 2.0,пробки
Как правильно удалить событие?
Удалённый пользователь
18 сентября 2015, 16:14

 https://jsfiddle.net/murr2015/0tyggjqa/1/

Выставляю маркер.

Задаю событие click.

 myPlacemark.events.add('click', function (e){
            e.preventDefault();
            console.log('Отработали с e.preventDefault()');
        });

Тут же удаляю событие

myPlacemark.events.remove('click');

Снова навешиваю событие click.

myPlacemark.events.add('click', function(){
            console.log('Отработали БЕЗ e.preventDefault()');
        });

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


Отработали с e.preventDefault()
Отработали БЕЗ e.preventDefault()

И preventDefault продолжает так же действовать.

В принципе та же фигня с другими объектами.

3 комментария
события,API 2.0
getBounds у маршрута
Удалённый пользователь
15 сентября 2015, 12:22

В примере песочницы пытаюсь получить границы области маршрута.

 

Для объекта Route такой функции не нашел. Пробую получить границы geoObjects карты.

Несмотря на myMap.geoObjects.add(route); 

console.log(myMap.geoObjects.getBounds());  выдает Null

 http://jsfiddle.net/bu9gjvbn/1/

 

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

 

 ymaps.route([
        'Москва, улица Крылатские холмы',
        {
            point: 'Москва, метро Молодежная',
            // метро "Молодежная" - транзитная точка
            // (проезжать через эту точку, но не останавливаться в ней).
            type: 'viaPoint'
        },
        [55.731272, 37.447198], // метро "Кунцевская".
        'Москва, метро Пионерская'
    ]).then(function (route) {
        myMap.geoObjects.add(route);
        
        console.log(myMap.geoObjects.getBounds());

 

4 комментария
маршрутизация,API 2.0
.GeoObjectCollection each() перебирает элементы до предпоследнего
Удалённый пользователь
25 августа 2015, 11:32

Создаю коллекцию

 

collection=new ymaps.GeoObjectCollection();

 

добавляю  в коллекцию полигоны загружая данные из БД о координатах 

collection.add(polygon);

Создаю Placemark 

placemark=new ymaps.Placemark([56.01,93.04],
                                                                  {},
                                                                  {
                                                                    hideIcon: false,                   
                                                                    draggable: true
                                                                  }
                                                                  );
placemark.events.add(['dragend'], function(e){
                                                                console.log(collection.getLength());
                                                                collection.each(function(els){  console.log(els)})
                                                                })


Получаю объектов 3 а выводит только 2. Получается что проходит не все объекты.

 

3

yandexmap.js:55 s {geometry: e.d…e.S, properties: o, state: o, options: Object, events: s…} 

yandexmap.js:55 s {geometry: e.d…e.S, properties: o, state: o, options: Object, events: s…}

 


Если выполнить проход 2 раза то обходятся все объекты... 

Как решиьт данную проблему?

 

1 комментарий
API 2.0,коллекции,each
Как получить путевые точки, которые соединяет router.Path?
Удалённый пользователь
18 августа 2015, 10:22

Создал маршрут. Количество путевых точек более 2-х.

Разобрал маршрут по отрезкам router.Path.

Вывожу отрезки справа от карты в табличку. Все хорошо, но от router.Path кроме расстояния и времени напрямую получить больше ничего не получается. Хотелось бы не просто "1.  2,2 км", а что-то вида "1. Адрес 1 -> Адрес 2, 2,2 км.", т.е. добавить данные точек, которые соединяет router.Path.

Пока кроме костыля в виде счетчика counterPath после collroute.each(function (Path) { и соответственного выдергивания точек из исходного массива по номеру элемента (вроде point1 = points.get(counterPath); point2 = points.get(counterPath+1);) ничего не на ум не приходит.

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

function calcRoute(options){
        ymaps.route(options,
        {
            // Опции маршрутизатора
            mapStateAutoApply: true, // автоматически позиционировать карту
            avoidTrafficJams: true   // Учитывать пробки
        }).then(
            function (router) {

            route = router;
                myMap.geoObjects.add(route);

            var points = route.getWayPoints(),

                lastPoint = points.getLength() - 1;

                // Задаем стиль метки - иконки будут красного цвета, и
                // их изображения будут растягиваться под контент.
                points.options.set('preset', 'twirl#redStretchyIcon');

                // Задаем контент меток в начальной и конечной точках.
                points.get(0).properties.set('iconContent', 'Начало маршрута');
                points.get(lastPoint).properties.set('iconContent', 'Конец маршрута');
            });

            getRoutePaths();
           
            },
            function (error) {
                alert("Возникла ошибка: " + error.message);
        });

    }
function getRoutePaths() {
        var collroute = route.getPaths();

        if (collroute.getLength() > 0) {
        var i=1;
            collroute.each(function (Path) {
                var f = Path.getLength()/1000;
           
                f = Number(f).toFixed(1);
                $("#route_table tr:last").after("<tr><td>"+i+".</td><td>"+f+" км.</td></tr>");   
                i++;
           
            })
        }
    }
1 комментарий
маршрутизация,только учусь,API 2.0
Как из шаблона балуна достучаться до геообъекта, его породившего?
Удалённый пользователь
17 августа 2015, 15:46

API 2.0

К примеру:

Изменяю через фабрику шаблон балуна, добавляю в шаблон кнопку "удалить".

Хочу, чтобы при нажатии этой кнопки геообъект открытого балуна удалялся с карты.

Добавили плейсмарк на карту - кликнули - открылся балун - нажали внутри балуна кнопку "удалить" - плейсмарк удалился.

При клике e.target возвращает саму html-кнопку.

Подскажите новичку, плс, не соображу. ((

 

 

3 комментария
метка,события,API 2.0,балун
Перехват клика на кластере не работает
Удалённый пользователь
17 августа 2015, 14:36

API 2.0

Пытаюсь перехватить события маркеров кластера при клике и даблклике.

В итоге - когда кластер при зуме распадается на отдельные точки - на этих точках перехват работает (балун не открывается, срабатывает алерт).

Когда маркер кластера "групповой" - перехват не работает. Открывается балун. И срабатывает алерт. (((

 

    var myMap;
    var clusterer;
    var PointArray = [];

    ymaps.ready(init);

    function init(){ 
        myMap = new ymaps.Map ("map", {
            center: [47.096022, 37.548734],
            zoom: 12
        },{     minZoom:8,
              maxZoom:18
        });

        myMap.controls.add('zoomControl', { left: 5, top: 5 });
        myMap.behaviors.enable('scrollZoom');
        myMap.behaviors.disable('dblClickZoom');

        clusterer = new ymaps.Clusterer({clusterDisableClickZoom: true, synchAdd: true});

        clusterer.events.add('dblclick', function (e) {
           e.preventDefault();
            alert('clusterer dblclick');   
        });

        clusterer.events.add('click', function (e) {
           e.preventDefault();   
           alert('clusterer click');   
        });

        addToPointArray(47.091, 37.541, 'twirl#redIcon', 'id1', 'text1');
        addToPointArray(47.093, 37.543, 'twirl#redIcon', 'id2', 'text2');
        addToPointArray(47.095, 37.545, 'twirl#redIcon', 'id2', 'text2');

drawCluster('twirl#blueIcon');
       
   }

    function addToPointArray(CoordX, CoordY, IStyle, ID, Text){
        point = new ymaps.GeoObject({
            geometry: {type: "Point", coordinates: [CoordX, CoordY]},
            properties: {
                clusterCaption: ID,
                balloonContentBody: Text,
            balloonContentHeader: ID,
                //balloonContentFooter: "Подвал",
                hintContent: ID
            }
        },{
            preset: IStyle
           
        });

        point.events.add('click', function (e) {
           //e.preventDefault();       
        });

        point.events.add('dblclick', function (e) {
            //e.preventDefault();
        });

        PointArray.push(point);
    }

    function drawCluster(CStyle){
        clusterer.options.set('preset',CStyle);
        clusterer.add(PointArray);

        myMap.geoObjects.add(clusterer);
    }   


Пример - здесь:

 https://jsfiddle.net/bdv09t1n/ 

5 комментариев
метка,кластеризатор,события,API 2.0
Редактирование 2 полигонов на 2 разных картах одновременно
kamorka-gugo
6 августа 2015, 10:37

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

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

 

Javascript код:

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
var map_1_map, map_2_map, map_1_polygon, map_2_polygon;

// Первая карта
function map_1_add_polygon() {
    map_1_polygon = new ymaps.Polygon([], {}, {
        editorDrawingCursor: 'crosshair',
        editorMaxPoints: 10,
        fillColor: '#077ff7',
        fillOpacity: 0.5,
        strokeColor: '#077ff7',
        strokeOpacity: 0.9,
        strokeWidth: 1
    });
    map_1.geoObjects.add(map_1_polygon);
    map_1_polygon.editor.startDrawing();
}
function map_1_init() {
    map_1 = new ymaps.Map('map_1', {
        controls: ['zoomControl', 'searchControl', 'typeSelector',  'fullscreenControl'],
        center: [55.7522200,37.6155600],
        zoom: 16
    });
    map_1_add_polygon();
}
ymaps.ready(map_1_init);

// Вторая карта
function map_2_add_polygon() {
    map_2_polygon = new ymaps.Polygon([], {}, {
        editorDrawingCursor: 'crosshair',
        editorMaxPoints: 10,
        fillColor: '#077ff7',
        fillOpacity: 0.5,
        strokeColor: '#077ff7',
        strokeOpacity: 0.9,
        strokeWidth: 1
    });
    map_2.geoObjects.add(map_2_polygon);
    map_2_polygon.editor.startDrawing();
}
function map_2_init() {
    map_2 = new ymaps.Map('map_2', {
        controls: ['zoomControl', 'searchControl', 'typeSelector',  'fullscreenControl'],
        center: [55.7522200,37.6155600],
        zoom: 16
    });
    map_2_add_polygon();
}
ymaps.ready(map_2_init);



HTML код:

1
2
<div style="width:45%; height:300px; display:inline-block;" id="map_1"></div>
<div style="width:45%; height:300px; display:inline-block;" id="map_2"></div>

 

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


P.S. Тут можно посмотреть пример: http://grefon.com/examples/maps/

2 комментария
редактирование,API 2.0,полигон