---
metadata:
  - name: generator
    content: Diplodoc Platform v5.37.1
alternate:
  - https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/gpx.md
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.ru/dev/jsapi-v1-1/doc/ru/llms.txt

# YMaps.GPX

Расширяет [YMaps.GeoObjectCollection](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/geoobjectcollection.md).

Класс для работы с 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](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/gpx.md#view).

## Конструктор

Имя | Описание
----- | -----
[YMaps.GPX](gpx.md#constructor)(url, options) | Создает объект для работы с GPX-документами.

## Поля

Имя | Описание
----- | -----
[Events](gpx.md#Events) | Список событий, возможных в YMaps.GPX.
[view](gpx.md#view) | Настройки отображения GPX-документа.

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

Из [YMaps.IGeoObject](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/igeoobject.md): 
: [description](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/igeoobject.md#description), [id](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/igeoobject.md#id), [metaDataProperty](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/igeoobject.md#metaDataProperty), [name](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/igeoobject.md#name)

## События

Имя | Описание
----- | -----
[Fault](gpx.md#event-Fault) | Ошибка при загрузке GPX-документа.
[Load](gpx.md#event-Load) | Успешная загрузка GPX-документа.

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

Из [YMaps.Group](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/group.md): 
:[Add](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/group.md#event-Add), [Remove](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/group.md#event-Remove)

## Методы

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

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

Из [YMaps.OverlayGroup](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/overlaygroup.md): 
: [getMap](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/overlaygroup.md#getMap), [getParentContainer](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/overlaygroup.md#getParentContainer)

Из [YMaps.Group](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/group.md): 
: [add](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/group.md#add), [filter](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/group.md#filter), [forEach](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/group.md#forEach), [get](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/group.md#get), [indexOf](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/group.md#indexOf), [length](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/group.md#length), [remove](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/group.md#remove), [removeAll](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/group.md#removeAll), [splice](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/group.md#splice)

Из [YMaps.IOverlay](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/ioverlay.md): 
: [onAddToMap](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/ioverlay.md#onAddToMap), [onMapUpdate](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/ioverlay.md#onMapUpdate), [onRemoveFromMap](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/ioverlay.md#onRemoveFromMap)

Из [YMaps.IGeoObject](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/igeoobject.md): 
: [getBounds](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/igeoobject.md#getBounds), [getComputedStyle](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/igeoobject.md#getComputedStyle), [getParentGroup](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/igeoobject.md#getParentGroup), [getStyle](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/igeoobject.md#getStyle), [onAddToGroup](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/igeoobject.md#onAddToGroup), [onRemoveFromGroup](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/igeoobject.md#onRemoveFromGroup), [setBounds](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/igeoobject.md#setBounds), [setStyle](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/igeoobject.md#setStyle), [update](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/igeoobject.md#update)

## Подробное описание конструктора {#constructor}

```javascript
YMaps.GPX(url, options)
```
Создает объект для работы с GPX-документами.    	

**Примеры:**

**1.**

```javascript
// Загружает GPX-документ и добавляет его на карту.
var gpx = new YMaps.GPX("URL документа");
map.addOverlay(gpx);
```

**2.**

```javascript
// Добавляет на карту только объекты типа 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.**

```javascript
// Показывает в балунах меток, соответствующих объектам типа 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 | ![](../_images/check.png) |  | Опции.
`options.viewAutoApply` | Boolean | ![](../_images/check.png) | true | Автоматически применять настройки отображения, указанные в GPX-документе.

## Подробное описание полей {#field_detail}

### Events {#Events}

```javascript
Object Events
```

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

```javascript
Object view
```

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

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

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

## Подробное описание событий {#event_detail}

### Fault {#Fault}

```javascript
Fault
```

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

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

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

### Load {#Load}

```javascript
Load
```

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

## Подробное описание методов {#method_detail}


### applyView {#applyView}

```javascript
applyView()
```

Применяет настройки отображения GPX-документа, заданные в [YMaps.GPX.view](https://yandex.ru/dev/jsapi-v1-1/doc/ru/ref/reference/gpx.md#view).
