Не работает setCenter Яндекс карты

325
22 декабря 2017, 03:19

Дано: на странице есть карта с несколькими маркерами. Есть список ссылок с координатами этих маркеров, по клику отрабатывает onclick=changeCenter(x,y)

Адрес 1

function changeCenter(x,y) {
    myMap.setCenter(x, y);
}

переменные x и y передаются нормально, функция их съедает. Но карта тупо сбрасывается и ничего не происходит. Функцию подключил сразу после init карты. Кто подскажет в чем беда? Так мало примеров setCenter в интернете. Допускаю что просто я не очень сообразительный)

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

  ymaps.ready(init);
    var myMap, 
    myPlacemark;
    function init ()
    {
        myMap = new ymaps.Map("myMapId",
        {
            center: ["x", "y"],
            zoom: 18,
            controls: ["zoomControl", "fullscreenControl"]
        });
        myMap.geoObjects
        .add(new ymaps.Placemark
        (
            ["x", "y"],
            {
                balloonContent: "Адрес 1"
            }
        ))
        myMap.behaviors.disable("scrollZoom");
    }
  //ну и сама функция
    function changeCenter(x,y) {
        myMap.setCenter(x, y);
    }
Answer 1

Метод setCenter - устанавливает центр и коэффициент масштабирования карты. Центр задается в географических координатах. Возвращает ссылку на себя.

Ваша функция выглядит следующим образом:

function changeCenter(x, y) {
    myMap.setCenter(x, y);
}

В документации яндекса к методу setCenter написано следующее:

{Map} setCenter(center[, zoom[, options]])

Нас интересует первый параметр:

Параметр: center (обязательное для заполнения поле)
Значение по умолчанию: нет
Тип: Number[]
Описание: Геокоординаты центра карты

Откуда следует, что в метод нужно передавать массив из 2-х чисел (чтобы это был массив - нужны квадратные скобки [x, y]). Думаю в этом и заключается причина сброса карты (некорректная работа, которая не ожидалась).

Касаемо Placemark и Map, там где вы передаете строки, что-то мне подсказывает, что туда нужно передавать не строки в виде ["x", "y"], а координаты в формате чисел (кстати тут указали верно - массив, но вот только строк).

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

  • Технологии Яндекса Map
  • Метод setCenter
  • Placemark

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

  1. Инициализация карты из известных центра и уровня масштабирования:

    var myMap = new ymaps.Map('map', {
         center: [55.74954, 37.621587],
         zoom: 10,
         // включаем масштабирование карты колесом
         behaviors: ['default', 'scrollZoom']
    });
    
  2. Создание метки:

    var placemark = new ymaps.Placemark([48, 40], {
        balloonContent: '<img src="http://img-fotki.yandex.ru/get/6114/82599242.2d6/0_88b97_ec425cf5_M" />',
        iconContent: "Азербайджан"
    }, {
        preset: "twirl#yellowStretchyIcon",
        // Отключаем кнопку закрытия балуна.
        balloonCloseButton: false,
        // Балун будем открывать и закрывать кликом по иконке метки.
        hideIconOnBalloonOpen: false
    });
    geoMap.geoObjects.add(placemark);
    
  3. Установка центра:

    myMap.setCenter([40, 50], 3, {
        checkZoomRange: true
    });
    

Из примеров видно, что значения координаты метки передаются в виде массива двух чисел: [40, 50], [48, 40] и [55.74954, 37.621587]. Поэтому меняйте ваши ["x", "y"] - строки на числа, а в метод setCenter - передавайте массив.

READ ALSO
Почему возвращает undefined [требует правки]

Почему возвращает undefined [требует правки]

Почему alert выдает длину массива как undefined?

143
Почему не подключается css в React

Почему не подключается css в React

Например я импортирую компонент из библиотеки:

162
Bootstrap4 Collapse

Bootstrap4 Collapse

Как сделать так чтобы если одна копка нажата другие вкладки закрывались

280
Длина массива undefined. NodeJS/Oracle

Длина массива undefined. NodeJS/Oracle

Пытаюсь привести выгрузку из Oracle в NodeJS к нормальному JSON вида: { "name": "Bob", "age": 21 }

456