Яндекс.Карты, статья №1: Элементы управления и параметры вызова

17 марта 2010, 13:39 Павел Марковнин JavaScript рейтинг +20-

Яндекс.Карты, статья №1Привет,

Сегодня мы начнем знакомство с апи Яндекс.Карт. Судя по вашим комментариям, мои статьи по Google Maps оказались полезными, поэтому я решил написать еще и про Яндекс.Карты.

Для начала давайте разберемся, зачем могут понадобиться Яндекс.Карты, если вы можете использовать Google Maps. Пожалуй самый веский аргумент для использования карт от Яндекса — лучшая поддержка городов России и СНГ. Да, Гуглокарты охватывают больше городов по миру, но по России Яндекс все же лучше.

Итак, хватит лирических отступлений, переходим к делу. Сегодня мы научимся подключать карты и настраивать элементы управления. 

Вызов карты

Итак, для начала нужно сходить и получить ключ для работы с картами. Идем, получаем.

При вызове карты, она будет показываться внутри указанного вами блока, так что необходимо сначала этот блок создать. Затем, подключаем саму библиотеку Яндекс.Карт с указанным вами ключом:

...
<body>
<!-- Контейнер под карту -->
<div id="test-map" style="width:600px;height:400px"></div>

<!-- Подключение библиотеки карты -->
<script type="text/javascript" src="http://api-maps.yandex.ru/1.1/index.xml?key=ваш_ключ"></script>
...

Ну тут все ясно. Теперь нам нужно вызвать карту, поместить ее в указанный контейнер и настроить. Вызов карты делается так: 

<script type="text/javascript">
var map = new YMaps.Map(document.getElementById("test-map")); // создаем объект карты в элементе с айди 'test-map'
map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 10); // центр карты (широта, долгота) и текущий уровень увеличения
</script>

Теперь давайте посмотрим, как вызывать карту разного типа, ведь есть три встроенные типа карты:

Для того, чтобы при вызове карты задать отличный от умолчания тип, нужно вызвать метод setType() и сообщить ему нужный тип карты:

<script type="text/javascript"> ...
var map = new YMaps.Map(document.getElementById("test-map"));
map.setType(YMaps.MapType.HYBRID); // Тип карты - гибрид
... </script>

Элементы управления

Для управления картой существует несколько типов элементов управления.

Внешние

Внешние элементы бывают пользовательские и встроенные. Пока что рассмотрим встроенные.

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

<script type="text/javascript">
...
map.addControl(new YMaps.MiniMap(),
new YMaps.ControlPosition(
YMaps.ControlPosition.BOTTOM_RIGHT, // положение на карте
new YMaps.Size (10, 10) // отступы от границ
)
);
...
</script>
Встроенные

Подключение (отключение) встроенного элемента управления происходит вот так:

<script type="text/javascript">
...
// Включаем масштабирование скроллингом мыши
map.enableScrollZoom();
...
</script>
Пользовательский внешний элементы управления

Рассмотрим этот момент на примере создания маркера в центре карты. Исходная задача: поместить на карту кнопку, при клике на которую по центру карты создавался бы маркер. Я написал реализацию кода и прокомментировал все ключенвые моменты:

<script type="text/javascript">
...
// Пользовательский элемент упраления,
// при клике на который по центру карты
// появляется маркер
function createMarkerInCenter () {
// Обработчик добавления элемента на карту
this.onAddToMap = function (map) {
this.container = YMaps.jQuery("<span>Добавить маркер</span>"); // контейнер контрола
this.map = map;
_this = this;
this.position = new YMaps.ControlPosition(YMaps.ControlPosition.TOP_RIGHT, new YMaps.Size(5, 40)); // положение на карте

// CSS-свойства, определяющие внешний вид элемента
this.container.css({
border: '1px solid #D50505',
position: 'absolute',
zIndex: YMaps.ZIndex.CONTROL,
background: '#FFF',
listStyle: 'none',
padding: '5px',
margin: 0
});

// Обрабатываем клик по конролу
this.container.bind("click", function (map) {
var cCoords = _this.map.getCenter(); // получаем координаты центра
var placemark = new YMaps.Placemark(cCoords); // создаем марке

// Добавляет метку на карту
_this.map.addOverlay(placemark);
});

// Располагает элемент управления в верхнем правом углу карты
this.position.apply(this.container);

// Добавляет элемент управления на карту
this.container.appendTo(this.map.getContainer());
}

// Обработчик удаления элемента с карты
this.onRemoveFromMap = function () {
// Действия при удалении элемента с карты
if (this.container.parent()) {
this.container.remove();
this.container = null;
}
this.map = null;
};
}

// Добавляем контрол на карту
map.addControl(new createMarkerInCenter());
...
</script>

 

Ну вот, все готово. Смотрим рабочий пример:

Пример

Заключение

В этой статье мы научились вызывать карту (с различными параметрами) и настраивать ее внешний под наши нужды (в том числе создавать свои элементы управления).

А теперь несколько полезных ссылок:

Если у вас есть какие-то вопросы или замечания по статье, то задавайте, не стесняйтесь. До новых встреч!

Рекламное место, которое может стать вашим

Понравилась статья?

Тогда подпишись на обновления через RSS или воспользуйся
другими способами подписки.

Читать в Яндекс.Ленте Добавить в Google Добавить в Netvibes
  •  

Комментарии — 13

RSS
  • Аватарка
    17 марта в 14:11 ]]>mktums]]>
    Буду ждать следущую статью :)
  • Аватарка
    17 марта в 14:56 ]]>Андрей]]>
    Отличная статейка! Спасибо.
    А будет статья с задачей:
    1. Определить по введённому адресу координаты и сохранить с базу
    2. Вывести на страничку из базы и позиционировать согласно сохранённым координатам
    Большое спасибо.
  • Аватарка
    17 марта в 15:02 ]]>Grin]]>
    Да, Андрей, такая статья будет одной из следующих.
  • Аватарка
    17 марта в 17:43 ]]>iomoio]]>
    Как всегда интересные и полезные статьи. Респект!!!
  • Аватарка
    17 марта в 18:05 ]]>Kykyryzo]]>
    довольно познавательно. яндекс прям всё у гугла перенимает)
  • Аватарка
    17 марта в 21:32 ]]>Тормоз]]>
    Напомню, что есть ещё Static API (вызов картинки), этого зачастую вполне достаточно.
  • Аватарка
    18 марта в 0:19 ]]>Seo]]>
    Спасибо, много полезного для себя взял. Кажется яша двигается в правильном направлении ;)
  • Аватарка
    21 марта в 5:38 ]]>Дмитрий]]>
    Только еще нашел этот блог....спасиба автору....
  • Аватарка
    21 марта в 23:52 ]]>romul]]>
    На всякий случай сделал закладку, может пригодится.
  • Аватарка
    22 марта в 10:58 ]]>Neutron]]>
    Спасибо за интересную статью. Очень жду следующих.
    Больше всего интересно бы было узнать - как добавлять маркер по клику на карту, записывать его в базу и выбирать его тип, описание, название.
  • Аватарка
    22 марта в 17:56 ]]>Rapid]]>
    Оказывается все так просто и понятно, спасибо за статью. Сам бы даже не полез в Я.карты, думал там черт ногу сломит...
  • Аватарка
    23 марта в 22:56 ]]>Вячеслав]]>
    Яша двигается в правильном направлении, потому что копирует многие решения Гугла :-)
    Жду следующих статей по теме.
  • Аватарка
    1 апреля в 13:51 ]]>Win Man]]>
    Огромное спасибо, на самом деле вменяемый мануал на тему АПИ от яндекс карт фиг найдешь. А у вас все по полочкам.
  • Эл. почта (используется для Граватарки)
  • Домашняя страница
  • Имя в Твиттере
  • Разрешенные теги Текст сообщения (надо бы заполнить это поле)
  • как выглядит какой тег
    жирный текст <b>жирный текст</b>
    курсивный тект <i>курсивный тект</i>
    зачеркнутый текст <s>зачеркнутый текст</s>
    подчеркнутый текст <u>подчеркнутый текст</u>
    ссылка <a href="адрес">ссылка</a>
    function foo() { ... }
    <pre><code>function foo() { ... } </code></pre>