commit 6a8ff60923d4b95b8a057d7cef622dc655da658c
parent f633f4b271798911efe2a85702b9cba774bf7741
Author: Nikolay Korotkiy <sikmir@gmail.com>
Date: Tue, 4 Aug 2020 08:18:50 +0300
tracks: load tracks from openstreetmap.ru
Diffstat:
3 files changed, 36 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
@@ -11,6 +11,7 @@ import {NakarteTrack, NakarteUrl} from './nakarte';
import {MovescountMove, MovescountRoute} from './movescount';
import {GarminActivity, GarminRoute} from './garmin';
import {SportsTrackerActivity} from './sportstracker';
+import OpenStreetMapRu from './openstreetmapRu';
export default [
YandexRuler,
@@ -28,5 +29,6 @@ export default [
GarminActivity,
GarminRoute,
SportsTrackerActivity,
+ OpenStreetMapRu,
SimpleService
];
diff --git a/src/lib/leaflet.control.track-list/lib/services/openstreetmapRu.js b/src/lib/leaflet.control.track-list/lib/services/openstreetmapRu.js
@@ -0,0 +1,33 @@
+import urlViaCorsProxy from '~/lib/CORSProxy';
+import BaseService from './baseService';
+import parseGpx from '../parsers/gpx';
+
+class OpenStreetMapRu extends BaseService {
+ urlRe = /^https?:\/\/(?:www\.)?openstreetmap\.ru\/\?mapid=(\d+)/u;
+
+ 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://openstreetmap.ru/mymap.php?id=${trackId}&format=gpx`),
+ options: {responseType: 'binarystring'}
+ }];
+ }
+
+ parseResponse(responses) {
+ const trackId = this.getTrackId();
+ const response = responses[0];
+ return parseGpx(response.responseBinaryText, `PersonalMap ${trackId}`, true) ||
+ [{name: name, error: 'UNSUPPORTED'}];
+ }
+}
+
+export default OpenStreetMapRu;
diff --git a/src/lib/leaflet.control.track-list/track-list.js b/src/lib/leaflet.control.track-list/track-list.js
@@ -109,7 +109,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 Etomesto Movescount GarminConnect SportsTracker OSM Tracedetrail">
+ title="gpx kml Ozi zip YandexMaps GPSies Strava GPSLib Endomondo Etomesto Movescount GarminConnect SportsTracker OSM Tracedetrail OpenStreetMap.ru">
gpx kml Ozi zip YandexMaps GPSies Strava
<span class="formats-hint-more">…</span>
</div>