departure point can be null
This commit is contained in:
parent
7ea79b6f44
commit
1fdd4e71b5
@ -17,8 +17,8 @@ let gpxTrack = null;
|
||||
*/
|
||||
function toWGS84(point) {
|
||||
// convert LV95 into the civilian system
|
||||
let y_aux = (point[0] - 2600000) / 1000000;
|
||||
let x_aux = (point[1] - 1200000) / 1000000;
|
||||
const y_aux = (point[0] - 2600000) / 1000000;
|
||||
const x_aux = (point[1] - 1200000) / 1000000;
|
||||
|
||||
// calculate longitude and latitude in the unit 10000"
|
||||
let lat = 16.9023892 +
|
||||
@ -26,7 +26,7 @@ function toWGS84(point) {
|
||||
0.270978 * Math.pow(y_aux, 2) -
|
||||
0.002528 * Math.pow(x_aux, 2) -
|
||||
0.0447 * Math.pow(y_aux, 2) * x_aux -
|
||||
0.0140 * Math.pow(x_aux, 3);
|
||||
0.014 * Math.pow(x_aux, 3);
|
||||
|
||||
let lon = 2.6779094 +
|
||||
4.728982 * y_aux +
|
||||
@ -35,8 +35,8 @@ function toWGS84(point) {
|
||||
0.0436 * Math.pow(y_aux, 3);
|
||||
|
||||
// unit 10000" to 1" and seconds to degrees (dec)
|
||||
lat = lat * 100 / 36;
|
||||
lon = lon * 100 / 36;
|
||||
lat = (lat * 100) / 36;
|
||||
lon = (lon * 100) / 36;
|
||||
|
||||
return { lat: lat, lon: lon };
|
||||
}
|
||||
@ -48,7 +48,7 @@ function toWGS84(point) {
|
||||
* @returns Track point xml node for gpx.
|
||||
*/
|
||||
function toTrackPoint(point) {
|
||||
let wgs84Point = toWGS84(point);
|
||||
const wgs84Point = toWGS84(point);
|
||||
return `<trkpt lat="${wgs84Point.lat}" lon="${wgs84Point.lon}"/>`;
|
||||
}
|
||||
|
||||
@ -58,7 +58,7 @@ function toTrackPoint(point) {
|
||||
* @returns Way point xml node for gpx.
|
||||
*/
|
||||
function toWayPoint(point) {
|
||||
let wgs84Point = toWGS84(point.geom.coordinates);
|
||||
const wgs84Point = toWGS84(point.geom.coordinates);
|
||||
return `
|
||||
<wpt lat="${wgs84Point.lat}" lon="${wgs84Point.lon}">
|
||||
<ele>${point.altitude}</ele>
|
||||
@ -73,7 +73,6 @@ function toWayPoint(point) {
|
||||
* @returns Combined route number, id and route title.
|
||||
*/
|
||||
function trackTitle(geoJson) {
|
||||
const route = geoJson.segments[0];
|
||||
const book = geoJson.book_route_number
|
||||
? `${geoJson.book_route_number} - `
|
||||
: "";
|
||||
@ -88,18 +87,25 @@ function trackTitle(geoJson) {
|
||||
* @returns Simple gpx string.
|
||||
*/
|
||||
function toGpx(geoJson) {
|
||||
let trackSegments = geoJson.segments.map((segment) => {
|
||||
const trackSegments = geoJson.segments
|
||||
.map((segment) => {
|
||||
if (segment.geom == null) return "";
|
||||
return `<trkseg>
|
||||
${segment.geom.coordinates.map(toTrackPoint).join("")}
|
||||
</trkseg>`;
|
||||
}).join("");
|
||||
})
|
||||
.join("");
|
||||
|
||||
let endPoint = geoJson.end_point ? toWayPoint(geoJson.end_point) : "";
|
||||
let waypoints = geoJson.waypoints
|
||||
? geoJson.waypoints.map((wp) => {
|
||||
const departurePoint = geoJson.departure_point
|
||||
? toWayPoint(geoJson.departure_point)
|
||||
: "";
|
||||
const endPoint = geoJson.end_point ? toWayPoint(geoJson.end_point) : "";
|
||||
const waypoints = geoJson.waypoints
|
||||
? geoJson.waypoints
|
||||
.map((wp) => {
|
||||
return toWayPoint(wp.reference_poi);
|
||||
}).join("")
|
||||
})
|
||||
.join("")
|
||||
: "";
|
||||
|
||||
const routeTitle = trackTitle(geoJson);
|
||||
@ -111,7 +117,7 @@ function toGpx(geoJson) {
|
||||
xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd"
|
||||
version="1.0"
|
||||
creator="SAC-Tourenportal GPX Downloader">
|
||||
${toWayPoint(geoJson.departure_point)}
|
||||
${departurePoint}
|
||||
${toWayPoint(geoJson.destination_poi)}
|
||||
${waypoints}
|
||||
${endPoint}
|
||||
@ -123,7 +129,7 @@ function toGpx(geoJson) {
|
||||
`;
|
||||
|
||||
const parser = new DOMParser();
|
||||
let xmlDoc = parser.parseFromString(xmlString, "text/xml");
|
||||
const xmlDoc = parser.parseFromString(xmlString, "text/xml");
|
||||
|
||||
return new XMLSerializer().serializeToString(xmlDoc.documentElement);
|
||||
}
|
||||
@ -132,26 +138,26 @@ function toGpx(geoJson) {
|
||||
* Intercept the download of GeoJSON data and save it for the background script.
|
||||
*/
|
||||
function listener(details) {
|
||||
let filter = browser.webRequest.filterResponseData(details.requestId);
|
||||
let decoder = new TextDecoder("utf-8");
|
||||
let encoder = new TextEncoder();
|
||||
const filter = browser.webRequest.filterResponseData(details.requestId);
|
||||
const decoder = new TextDecoder("utf-8");
|
||||
const encoder = new TextEncoder();
|
||||
|
||||
let data = [];
|
||||
const data = [];
|
||||
filter.ondata = (event) => {
|
||||
data.push(event.data);
|
||||
};
|
||||
|
||||
filter.onstop = async (event) => {
|
||||
let blob = new Blob(data, { type: "text/html" });
|
||||
let buffer = await blob.arrayBuffer();
|
||||
let str = decoder.decode(buffer);
|
||||
filter.onstop = async (_event) => {
|
||||
const blob = new Blob(data, { type: "text/html" });
|
||||
const buffer = await blob.arrayBuffer();
|
||||
const str = decoder.decode(buffer);
|
||||
|
||||
updateActiveTab(browser.tabs);
|
||||
|
||||
filter.write(encoder.encode(str));
|
||||
filter.close();
|
||||
|
||||
let geoJson = JSON.parse(str);
|
||||
const geoJson = JSON.parse(str);
|
||||
const routeTitle = trackTitle(geoJson);
|
||||
gpxTrack = { title: routeTitle, data: toGpx(geoJson) };
|
||||
};
|
||||
@ -182,10 +188,10 @@ function handleClick(tab) {
|
||||
return;
|
||||
}
|
||||
|
||||
let blob = new Blob([gpxTrack.data], { type: "application/gpx+xml" });
|
||||
let objectURL = URL.createObjectURL(blob);
|
||||
const blob = new Blob([gpxTrack.data], { type: "application/gpx+xml" });
|
||||
const objectURL = URL.createObjectURL(blob);
|
||||
|
||||
let downloading = browser.downloads.download({
|
||||
const downloading = browser.downloads.download({
|
||||
url: objectURL,
|
||||
filename: `${gpxTrack.title}.gpx`,
|
||||
saveAs: true,
|
||||
@ -202,14 +208,14 @@ function handleClick(tab) {
|
||||
/**
|
||||
* Update the download icon and text.
|
||||
*/
|
||||
function updateActiveTab(tabs) {
|
||||
function updateActiveTab(_tabs) {
|
||||
function updateTab(tabs) {
|
||||
if (tabs[0]) {
|
||||
updateIcon(tabs[0]);
|
||||
}
|
||||
}
|
||||
|
||||
let gettingActiveTab = browser.tabs.query({
|
||||
const gettingActiveTab = browser.tabs.query({
|
||||
active: true,
|
||||
currentWindow: true,
|
||||
});
|
||||
|
@ -1,19 +1,15 @@
|
||||
{
|
||||
|
||||
"manifest_version": 2,
|
||||
"name": "SAC Route Portal GPX Downloader",
|
||||
"version": "0.7",
|
||||
"version": "0.8",
|
||||
"developer": {
|
||||
"name": "Sebastian Hugentobler",
|
||||
"url": "https://code.vanwa.ch/sebastian/sac-route-portal-gpx-fx"
|
||||
},
|
||||
|
||||
"description": "Download gpx tracks from the sac route portal.",
|
||||
|
||||
"icons": {
|
||||
"48": "icons/map.png"
|
||||
},
|
||||
|
||||
"permissions": [
|
||||
"activeTab",
|
||||
"downloads",
|
||||
@ -21,11 +17,11 @@
|
||||
"webRequestBlocking",
|
||||
"https://www.sac-cas.ch/*"
|
||||
],
|
||||
|
||||
"background": {
|
||||
"scripts": ["background.js"]
|
||||
"scripts": [
|
||||
"background.js"
|
||||
]
|
||||
},
|
||||
|
||||
"browser_action": {
|
||||
"default_icon": "icons/map.png",
|
||||
"default_title": "To GPX"
|
||||
|
Loading…
Reference in New Issue
Block a user