В заметке «API Google Maps рисуем полилинию и сохраняем ее в базе данных MySQL» я описал процесс создания полилинии и сохранения ее координат в базе данных, здесь я хочу рассказать, как решить подобную задачу с применении ем API Яндекс.Карт.
В первой части я рассмотрю, как можно нарисовать полилинию и вывести координаты ее вершин на html-страницу с картой.
Пользователь , последовательно щелкая по карте создает полилинию, если щелкнуть левой кнопкой мыши по последней вершине, то появиться контекстное меню с тремя пунктами: удалить, завершить и завершить редактирование.
При выборе пункта удалить – удаляется последняя созданная вершина.
Когда мы выбираем завершить – создание полилинии завершается, но она еще находиться в режиме редактирования, мы можем продолжать ее редактирование, изменяя положение ее вершин или удаляя ненужные.
Продолжить создание полилинии мы можем, выбрав в контекстном меню, которое появиться при щелчке по последней вершине полилинии, пункт продолжить.
Если же мы выбираем пункт завершить редактирование – режим редактирования завершается и значения координат вершин появляются в текстовой области справа от карты.
Реализация данного функционала достаточно проста и это вы увидите из исходного кода.
Исходный код примера:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>API Яндекс.Карт - рисуем полилинию</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="http://api-maps.yandex.ru/1.1/index.xml?key=ANpUFEkBAAAAf7jmJwMAHGZHrcKNDsbEqEVjEUtCmufxQMwAAAAAAAAAAAAvVrubVT4btztbduoIgTLAeFILaQ==" type="text/javascript"></script>
<script type="text/javascript">
var polyline
// Создание обработчика для события window.onLoad
YMaps.jQuery(function () {
// Создание экземпляра карты и его привязка к созданному контейнеру
var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);
// Установка для карты ее центра и масштаба
map.setCenter(new YMaps.GeoPoint(43.998779,56.316537), 13);
map.addControl(new YMaps.Zoom());
map.addControl(new YMaps.TypeControl());
map.addControl(new YMaps.ToolBar());
// Создание ломанной
var polyline = new YMaps.Polyline();
// Установка параметров режима редактирования
polyline.setEditingOptions({
drawing: true,
menuManager: function (index, menuItems) {
menuItems.push({
id: "StopEditing",
title: '<span style="white-space:nowrap;">Завершить редактирование<span>',
onClick: function (polyline, pointIndex) {
polyline.stopEditing();
YMaps.jQuery("#coords").attr("value", polyline.getPoints().join('n'));
}
});
return menuItems;
}
});
// Добавление ломаной на карту
map.addOverlay(polyline);
// Включение режима редактирования
polyline.startEditing();
})
</script>
</head>
<body>
<table>
<tr>
<td>
<div id="YMapsID" style="width:800px;height:600px"></div>
</td>
<td valign="top">
<textarea rows="15" cols="35" id="coords" name="coord"></textarea>
</td>
</tr>
</table>
</body>
</html> |
В начале, как всегда, мы производим инициализацию объекта карты и помещаем необходимые элементы управления.
Затем, задаем нашу ломаную строкой
var polyline = new YMaps.Polyline();
После этого задаются параметры для режима редактирования setEditingOptions.
drawing: true — включает режим добавления новых вершин в графическую фигуру.
menuManager — диспетчер контекстного меню, открывающегося при щелчке по вершине графической фигуры (ломаной, многоугольника, и т.п.).
Принимает два аргумента: индекс вершины графической фигуры и массив объектов, описывающих пункты контекстного меню для этой вершины.
Диспетчер может изменять данные в переданном массиве.
Возвращает массив объектов, описывающих пункты контекстного меню.
В это меню мы добавляем свой пункт — Завершить редактирование, по клику по которому вызывается событие StopEditing и редактирование полилинии прекращается.
Там же мы добавили строку
YMaps.jQuery("#coords").attr("value", polyline.getPoints().join(‘n’));
Она помещает координаты вершин полилинии polyline.getPoints() в текстовую область с id="coords".
На этом пока все.
В следующий раз я рассмотрю, как можно сохранить координаты вершин в базе данных MySQL и вывести сохраненные данные на карту.

