commit 22241ebc703e2a71ce60ce061db03a416e7d6512
parent 646149ea30acf746535bcee513c0ace1e4826688
Author: Nikolay Korotkiy <sikmir@gmail.com>
Date: Sat, 24 Nov 2018 19:53:19 +0300
[tracks] load tracks from osm url #181
Diffstat:
3 files changed, 35 insertions(+), 1 deletion(-)
diff --git a/src/lib/leaflet.control.track-list/lib/services/index.js b/src/lib/leaflet.control.track-list/lib/services/index.js
@@ -2,6 +2,7 @@ import SimpleService from './simpleService'
import Endomondo from './endomondo';
import Gpsies from './gpsies';
import Gpslib from './gpslib';
+import Osm from './osm';
import Strava from './strava';
import {YandexRuler} from './yandex';
import {NakarteTrack, NakarteNktk, NakarteNktl} from './nakarte';
@@ -14,6 +15,7 @@ export default [
Endomondo,
Gpsies,
Gpslib,
+ Osm,
Strava,
SimpleService
]
\ No newline at end of file
diff --git a/src/lib/leaflet.control.track-list/lib/services/osm.js b/src/lib/leaflet.control.track-list/lib/services/osm.js
@@ -0,0 +1,32 @@
+import urlViaCorsProxy from 'lib/CORSProxy';
+import BaseService from './baseService';
+import parseGpx from '../parsers/gpx';
+
+class Osm extends BaseService {
+ urlRe = /^https?:\/\/www\.openstreetmap\.org\/user\/(?:.*)\/traces\/(\d+)/;
+
+ getTrackId() {
+ const m = this.urlRe.exec(this.origUrl);
+ return m[1];
+ }
+
+ isOurUrl() {
+ return this.urlRe.test(this.origUrl);
+ }
+
+ requestOptions() {
+ const trackId = this.getTrackId();
+ return [{
+ url: urlViaCorsProxy(`https://www.openstreetmap.org/trace/${trackId}/data`),
+ options: {responseType: 'binarystring'}
+ }]
+ }
+
+ parseResponse(responses) {
+ const trackId = this.getTrackId();
+ const response = responses[0];
+ return parseGpx(response.responseBinaryText, `OSM track ${trackId}`, true);
+ }
+}
+
+export default Osm;
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 GPSLib Strava endomondo
+ gpx kml Ozi zip YandexMaps GPSies GPSLib OSM Strava endomondo
</div>
<div class="button-minimize" data-bind="click: setMinimized"></div>
</div>