commit b784e4e8759a08b61f42f58636508c317af10a81
parent b395e15aa42cfe2d2624618c2f2c5618fffc2c3d
Author: myadzel <myadzel@gmail.com>
Date: Thu, 26 Sep 2019 16:57:59 +0300
load tracks from tracedetrail.com #250
Diffstat:
3 files changed, 44 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
@@ -4,6 +4,7 @@ import Gpsies from './gpsies';
import Gpslib from './gpslib';
import Osm from './osm';
import Strava from './strava';
+import Tracedetrail from './tracedetrail';
import {YandexRuler} from './yandex';
import {NakarteTrack, NakarteUrl} from './nakarte';
import {MovescountMove, MovescountRoute} from './movescount';
@@ -17,6 +18,7 @@ export default [
Gpslib,
Osm,
Strava,
+ Tracedetrail,
MovescountMove,
MovescountRoute,
SimpleService
diff --git a/src/lib/leaflet.control.track-list/lib/services/tracedetrail.js b/src/lib/leaflet.control.track-list/lib/services/tracedetrail.js
@@ -0,0 +1,41 @@
+import BaseService from './baseService';
+import urlViaCorsProxy from 'lib/CORSProxy';
+import L from 'leaflet';
+
+class Tracedetrail extends BaseService {
+ urlRe = /^https?:\/\/tracedetrail\.[a-z]{2,}\/[a-z]{2}\/trace\/trace\/([0-9]+)/;
+
+ isOurUrl() {
+ return this.urlRe.test(this.origUrl);
+ }
+
+ requestOptions() {
+ const m = this.urlRe.exec(this.origUrl);
+ const trackId = this.trackId = m[1];
+
+ return [{
+ url: urlViaCorsProxy(`https://tracedetrail.com/en/trace/geomSections/${trackId}`),
+ options: {responseType: 'json'}
+ }]
+ }
+
+ parseResponse(responses) {
+ const response = responses[0];
+ let name = `Tracedetrail track ${this.trackId}`;
+ try {
+ name = response.responseJSON.nom_fr || name;
+ const geometry = JSON.parse(response.responseJSON.geometry);
+ const proj = L.CRS.EPSG3857;
+ const points = geometry.map(item => proj.unproject(L.point(item.lon, item.lat)));
+
+ return [{
+ name,
+ tracks: [points]
+ }];
+ } catch (e) {
+ return [{name, error: 'UNSUPPORTED'}];
+ }
+ }
+}
+
+export default Tracedetrail;
diff --git a/src/lib/leaflet.control.track-list/track-list.js b/src/lib/leaflet.control.track-list/track-list.js
@@ -74,7 +74,7 @@ L.Control.TrackList = L.Control.extend({
<div class="leaflet-control-content">
<div class="header">
<div class="hint"
- title="gpx kml Ozi zip YandexMaps GPSies Strava GPSLib Endomondo Movescount OSM">
+ title="gpx kml Ozi zip YandexMaps GPSies Strava GPSLib Endomondo Movescount OSM Tracedetrail">
gpx kml Ozi zip YandexMaps GPSies Strava
<span class="formats-hint-more">…</span>
</div>