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

Яндекс.Карты, статья №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>

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

  • «схема» — схематичное отображение объектов местности, используется по умолчанию; значение для аттрибута типа — YMaps.MapType.MAP;
  • «спутник» — спутниковая карта местности; YMaps.MapType.SATELLITE;
  • «гибрид» — спутниковая карта с названиями географических объектов; YMaps.MapType.HYBRID.

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

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

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

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

Внешние
  • переключатель типа карты: схема, спутник, гибрид; TypeControl();
  • панель инструментов: перемещение карты, увеличение и измерение расстояния; ToolBar();
  • элемент масштабирования: тут все ясно; Zoom();
  • обзорная карта: уменьшенная карта показываемой местности; MiniMap();
  • масштабная линейка: позволяет оценить расстояние на карте; ScaleLine();
  • поиск по карте, позволяющий искать географические объекты; SearchControl();

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

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

<script type="text/javascript">
...
map.addControl(new YMaps.MiniMap(),
new YMaps.ControlPosition(
YMaps.ControlPosition.BOTTOM_RIGHT, // положение на карте
new YMaps.Size (10, 10) // отступы от границ
)
);
...
</script>
Встроенные
  • перемещение; enableDragging() и disableDragging();
  • масштабирование двойным щелчком мыши; enableDblClickZoom() и disableDblClickZoom();
  • масштабирвоание колесиком мыши; enableScrollZoom() и disableScrollZoom();
  • лупа; enableMagnifier() и disableMagnifier();
  • горячие клавиши («+» и «-» для масштаба и стрелки «←» «→» для перемещения карты); enableHotKeys() и disableHotKeys();
  • линейка; enableRuler() и disableRuler().

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

<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>

 

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

Пример

Заключение

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

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

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

Расскажите друзьям

Оцените статью:
  • 1
  • 2
  • 3
  • 4
  • 5

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

mktums
Буду ждать следущую статью :)
Андрей
Отличная статейка! Спасибо.
А будет статья с задачей:
1. Определить по введённому адресу координаты и сохранить с базу
2. Вывести на страничку из базы и позиционировать согласно сохранённым координатам
Большое спасибо.
Grin
Да, Андрей, такая статья будет одной из следующих.
iomoio
Как всегда интересные и полезные статьи. Респект!!!
Kykyryzo
довольно познавательно. яндекс прям всё у гугла перенимает)
Тормоз
Напомню, что есть ещё Static API (вызов картинки), этого зачастую вполне достаточно.
Seo
Спасибо, много полезного для себя взял. Кажется яша двигается в правильном направлении ;)
Дмитрий
Только еще нашел этот блог....спасиба автору....
romul
На всякий случай сделал закладку, может пригодится.
Neutron
Спасибо за интересную статью. Очень жду следующих.
Больше всего интересно бы было узнать - как добавлять маркер по клику на карту, записывать его в базу и выбирать его тип, описание, название.
Rapid
Оказывается все так просто и понятно, спасибо за статью. Сам бы даже не полез в Я.карты, думал там черт ногу сломит...
Вячеслав
Яша двигается в правильном направлении, потому что копирует многие решения Гугла :-)
Жду следующих статей по теме.
Win Man
Огромное спасибо, на самом деле вменяемый мануал на тему АПИ от яндекс карт фиг найдешь. А у вас все по полочкам.
akuba
вах спасиба
#
akuba
zdorrov
а как сделать интерфейс для установки метки на карту
Moscow_Lover
Большое спасибо за статью! Очень запутался с одним из встроенных элементов управления и разобрался, лишь после её прочтения. Гораздо понятнее, чем в официальной документации :)
Игорь
Привет!

Сделал всё как в статье, но появляется серый контейнер(
#
Игорь

Новый комментарий

как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть
как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть
counter strike mt2 silkroad pvp metin2 metin2 pvp knight pvp gm olarak başlayan pvpler pvp silkroad pvp serverler counter strike serverler msn show cam show görüntülü sohbet oyunlar suskunlar gazete oku