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

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

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

Сделал всё как в статье, но появляется серый контейнер(
#
Игорь
ihamat
Спасибо за полезное
Valery_Li
Полезный материал. А не могли бы Вы привести пример вызова карт средствами VBA в приложении MS Office по заданным в таблице (поле) координатам?
#
Valery_Li

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

как выглядит какой тег
жирный текст <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>
разрешенные теги или посмотреть как будет выглядеть

metin2 pvp metin2 pvp serverler pvp serverler