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-документа.

Наследуемые поля

Из YMaps.IGeoObject:
description, id, metaDataProperty, name

События

Имя Описание
Fault

Ошибка при загрузке GPX-документа.

Load Успешная загрузка GPX-документа.

Наследуемые события

Из YMaps.Group:
Add, Remove

Методы

Имя Описание
applyView() Применяет настройки отображения GPX-документа, заданные в YMaps.GPX.view.

Наследуемые методы

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

Подробное описание конструктора

YMaps.GPX(url, options)
Создает объект для работы с 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

Object Events

Список событий, возможных в YMaps.GPX.

view

Object view

Настройки отображения GPX-документа.

Объект с единственным полем boundedBy.

  • boundedBy {YMaps.GeoBounds} - задает прямоугольную область карты, в пределах которой требуется отобразить GPX-документ. Значение берется из GPX-тега bounds.

Подробное описание событий

Fault

Fault

Ошибка при загрузке GPX-документа.

В callback-функцию передаются два аргумента:

  • указатель на GPX-документ;
  • строка с описанием ошибки.

Load

Load

Успешная загрузка GPX-документа. В callback-функцию передается ссылка на объект, для которого был вызван обработчик.

Подробное описание методов

applyView

applyView()

Применяет настройки отображения GPX-документа, заданные в YMaps.GPX.view.