nakarte

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

commit 776a0f1ec3dead7a3fb44e660ea873f36be816e4
parent c24a60f41b0354dd1fed17929b6c574b2d6bbafe
Author: Sergej Orlov <wladimirych@gmail.com>
Date:   Fri, 23 Nov 2018 08:28:42 +0100

Merge branch 'gpslib-tracks' of git://github.com/sikmir/nakarte into sikmir-gpslib-tracks

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'; @@ -624,6 +625,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>