nakarte

Source code of https://map.sikmir.ru (fork)
git clone git://git.sikmir.ru/nakarte
Log | Files | Refs | LICENSE

commit 1a62c5b3297283f6404fa1fb538eda9d7e33732e
parent 664f44a437e5384d1298741e49044c443421e5fb
Author: Nikolay Korotkiy <sikmir@gmail.com>
Date:   Wed, 21 Nov 2018 09:59:52 +0300

[tracks] load tracks from gpslib url #177

Diffstat:
Msrc/lib/leaflet.control.track-list/lib/geo_file_formats.js | 4++++
Asrc/lib/leaflet.control.track-list/lib/gpslib.js | 31+++++++++++++++++++++++++++++++
Msrc/lib/leaflet.control.track-list/track-list.js | 2+-
3 files changed, 36 insertions(+), 1 deletion(-)

diff --git a/src/lib/leaflet.control.track-list/lib/geo_file_formats.js b/src/lib/leaflet.control.track-list/lib/geo_file_formats.js @@ -6,6 +6,7 @@ import {decode as utf8_decode} from 'utf8'; import {fetch} from 'lib/xhr-promise'; import urlViaCorsProxy from 'lib/CORSProxy'; import {isGpsiesUrl, gpsiesRequestOptions, gpsiesParser} from './gpsies'; +import {isGpslibUrl, gpslibRequestOptions, gpslibParser} from './gpslib'; import {isStravaUrl, stravaRequestOptions, stravaParser} from './strava'; import {isEndomondoUrl, endomondoRequestOptions, endomondoParser} from './endomondo'; import {parseTrackUrlData, parseNakarteUrl, isNakarteLinkUrl, nakarteLinkRequestOptions, nakarteLinkParser} from './nktk'; @@ -623,6 +624,9 @@ async function loadFromUrl(url) { if (isGpsiesUrl(url)) { requestOptionsGetter = gpsiesRequestOptions; parser = gpsiesParser; + } else if (isGpslibUrl(url)) { + requestOptionsGetter = gpslibRequestOptions; + parser = gpslibParser; } else if (isEndomondoUrl(url)) { requestOptionsGetter = endomondoRequestOptions; parser = endomondoParser; diff --git a/src/lib/leaflet.control.track-list/lib/gpslib.js b/src/lib/leaflet.control.track-list/lib/gpslib.js @@ -0,0 +1,31 @@ +import urlViaCorsProxy from 'lib/CORSProxy'; +import {parseGpx} from './geo_file_formats' + +const re = /^https?:\/\/(?:.*\.)?gpslib\.[^.]+\/tracks\/info\/(\d+)/; + +function isGpslibUrl(url) { + return re.test(url); +} + +function gpslibRequestOptions(url) { + const m = re.exec(url); + if (!m) { + throw new Error('Invalid gpslib url'); + } + const trackId = m[1]; + const requestOptions = [ + { + url: urlViaCorsProxy(`https://www.gpslib.ru/tracks/download/${trackId}.gpx`), + options: {responseType: 'binarystring'} + }]; + return {requestOptions}; +} + +function gpslibParser(name, responses) { + if (responses.length !== 1) { + throw new Error(`Invalid responses array length ${responses.length}`); + } + return parseGpx(responses[0].responseBinaryText, name, true); +} + +export {gpslibRequestOptions, isGpslibUrl, gpslibParser} diff --git a/src/lib/leaflet.control.track-list/track-list.js b/src/lib/leaflet.control.track-list/track-list.js @@ -71,7 +71,7 @@ L.Control.TrackList = L.Control.extend({ <div class="leaflet-control-content"> <div class="header"> <div class="hint"> - gpx kml Ozi zip YandexMaps GPSies Strava endomondo + gpx kml Ozi zip YandexMaps GPSies GPSLib Strava endomondo </div> <div class="button-minimize" data-bind="click: setMinimized"></div> </div>