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.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.