|
|
YMaps.GPX
Расширяет
YMaps.GeoObjectCollection.
Класс для работы с GPX-документами. Загружаемый документ должен находиться в
открытом доступе по HTTP-протоколу.
Схема преобразования:
- тег gpx преобразуется в корневую группу,
с вложенными тегами wpt, rte и trk;
- теги wpt преобразуются в метки;
- теги rte преобразуются в ломаные, вершинами которых выступают rtept;
- теги trk преобразуются в группы с вложенными тегами trkseg;
- теги trkseg преобразуются в ломаные, вершинами которых выступают trkpt;
- теги name и desc преобразуются в поля name и description соответствующих объектов.
Кроме того, в каждый объект, входящий в metaDataProperty, добавляется вложенный объект gpxMetaData, со следующими полями:
- gpxTagName - добавляется для всех объектов;
- sym и time - добавляются для wpt;
- gpxStartTime и gpxEndTime - добавляются для rte и trkseg,
значения полей берутся из первой и последней точки маршрута (отрезка);
Значение тега bounds записывается в поле boundedBy объекта YMaps.GPX.view.
Конструктор
| Имя |
Описание |
| YMaps.GPX(url, options) |
Создает объект для работы с GPX-документами. |
Поля
| Имя |
Описание |
| Events |
Список событий, возможных в YMaps.GPX. |
| view |
Настройки отображения GPX-документа.
|
События
| Имя |
Описание |
| Fault |
Ошибка при загрузке GPX-документа.
|
| Load |
Успешная загрузка GPX-документа.
|
Наследуемые методы
- Из YMaps.OverlayGroup:
- getMap, getParentContainer
- Из YMaps.Group:
- add, filter, forEach, get, indexOf, length, remove, removeAll, splice
- Из YMaps.IOverlay:
- onAddToMap, onMapUpdate, onRemoveFromMap
- Из YMaps.IGeoObject:
- getBounds, getComputedStyle, getParentGroup, getStyle, onAddToGroup, onRemoveFromGroup, setBounds, setStyle, update
Подробное описание конструктора
Создает объект для работы с GPX-документами.
Примеры: 1. // Загружает GPX-документ и добавляет его на карту.
var gpx = new YMaps.GPX("URL документа");
map.addOverlay(gpx);
2. // Добавляет на карту только объекты типа rte.
var gpx = new YMaps.GPX("URL документа");
YMaps.Events.observe(gpx, gpx.Events.Load, function (gpx) {
var routes = gpx.filter(function (obj) {return obj.metaDataProperty.gpxMetaData.gpxTagName == "rte"});
map.addOverlay(routes);
});
3. // Показывает в балунах меток, соответствующих объектам типа wpt, содержимое поля metaDataProperty.gpxMetaData.sym вместо description (изменяет шаблон содержимого меток).
// Для объектов типа rte и trkseg показывает время в пути и длину маршрута, соответственно.
var gpx = new YMaps.GPX("URL документа");
YMaps.Events.observe(gpx, gpx.Events.Load, function (gpx) {
var styleWpt = {balloonContentStyle: {template: new YMaps.Template("<b>$[name]</b><p>$[metaDataProperty.gpxMetaData.sym]</p>")}},
wayPoints = gpx.filter(function (obj) {return obj.metaDataProperty.gpxMetaData.gpxTagName == "wpt"});
YMaps.jQuery.each(wayPoints, function () { this.setStyle(styleWpt) });
var styleRt = {balloonContentStyle: {template: new YMaps.Template("<b>$[name]</b><p>Проехали $[metaDataProperty.gpxMetaData.gpxDistance] за $[metaDataProperty.gpxMetaData.gpxDuration]</p>")}},
tr = gpx.filter(function (obj) {return obj.metaDataProperty.gpxMetaData.gpxTagName == "rte" || obj.metaDataProperty.gpxMetaData.gpxTagName == "trkseg"});
YMaps.jQuery.each(tr, function () {
this.setStyle(styleRt)
// рассчитывает расстояние и добавляет его значение в metaDataProperty.gpxMetaData
var distance = 0;
for(var pts = this.getPoints(), i = 1, l = pts.length; i < l; i++) {
distance += pts[i].distance(pts[i - 1]);
}
this.metaDataProperty.gpxMetaData.gpxDistance = YMaps.humanDistance(distance);
// рассчитывает время в пути и добавляет его значение в metaDataProperty.gpxMetaData
var startTime = xmlToDate(this.metaDataProperty.gpxMetaData.gpxStartTime),
endTime = xmlToDate(this.metaDataProperty.gpxMetaData.gpxEndTime);
// так как время старта и время финиша вычисляется в миллисекундах,
// а YMaps.humanDuration работает с секундами, разность (endTime - startTime) следует разделить на 1000
this.metaDataProperty.gpxMetaData.gpxDuration = YMaps.humanDuration((endTime - startTime) / 1000);
});
});
// вспомогательная функция: извлекает значение времени из XML-формата (GPX)
function xmlToDate (val) {
var date = new Date();
if(!val)
return date;
date.setFullYear(val.substring(0, 4), (val.substring(5, 7) - 1), val.substring(8, 10));
date.setHours(val.substring(11, 13), val.substring(14, 16), val.substring(17, 19), val.substring(20, 23));
return date;
}
map.addOverlay(gpx);
Параметры:
| Имя |
Тип |
Необязательный |
По умолчанию |
Описание |
| url |
String |
|
|
URL GPX-документа. |
| options |
Object |
 |
|
Опции. |
| options.viewAutoApply |
Boolean |
 |
true |
Автоматически применять настройки отображения, указанные в GPX-документе. |
Подробное описание полей
Events
Список событий, возможных в YMaps.GPX.
view
Настройки отображения GPX-документа.
Объект с единственным полем boundedBy.
- boundedBy {YMaps.GeoBounds} - задает прямоугольную область карты, в пределах которой требуется
отобразить GPX-документ. Значение берется из GPX-тега bounds.
Подробное описание событий
Fault
Ошибка при загрузке GPX-документа.
В callback-функцию передаются два аргумента:
- указатель на GPX-документ;
- строка с описанием ошибки.
Load
Успешная загрузка GPX-документа.
В callback-функцию передается ссылка на объект, для которого был вызван обработчик.
Подробное описание методов
applyView
Применяет настройки отображения GPX-документа, заданные в YMaps.GPX.view.
| |