Add split export: Export Route vs Export Plan
Split button with default "Export GPX" (track only) and dropdown: - Export Route: clean track for use in any app - Export Plan: track + waypoints + no-go areas in GPX extensions (trails:planning namespace) for reimporting into the planner Also: - Add no-go area serialization to generateGpx (GPX extensions) - Parse no-go areas from GPX extensions on import - Initialize no-go areas in Yjs session from imported GPX - Save to Journal now exports track only (consistent with Export Route) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
237660db5e
commit
4b711abaec
11 changed files with 172 additions and 60 deletions
|
|
@ -4,15 +4,23 @@ import type { TrackPoint } from "./types.ts";
|
|||
/**
|
||||
* Generate a GPX XML string from waypoints and track points.
|
||||
*/
|
||||
export interface NoGoArea {
|
||||
points: Array<{ lat: number; lon: number }>;
|
||||
}
|
||||
|
||||
export function generateGpx(options: {
|
||||
name?: string;
|
||||
waypoints?: Waypoint[];
|
||||
tracks?: TrackPoint[][];
|
||||
noGoAreas?: NoGoArea[];
|
||||
}): string {
|
||||
const hasExtensions = options.noGoAreas && options.noGoAreas.length > 0;
|
||||
const lines: string[] = [
|
||||
'<?xml version="1.0" encoding="UTF-8"?>',
|
||||
'<gpx version="1.1" creator="trails.cool"',
|
||||
' xmlns="http://www.topografix.com/GPX/1/1">',
|
||||
' xmlns="http://www.topografix.com/GPX/1/1"' +
|
||||
(hasExtensions ? '\n xmlns:trails="https://trails.cool/gpx/1"' : "") +
|
||||
">",
|
||||
];
|
||||
|
||||
if (options.name) {
|
||||
|
|
@ -46,6 +54,18 @@ export function generateGpx(options: {
|
|||
}
|
||||
}
|
||||
|
||||
if (options.noGoAreas && options.noGoAreas.length > 0) {
|
||||
lines.push(" <extensions>", " <trails:planning>");
|
||||
for (const area of options.noGoAreas) {
|
||||
lines.push(" <trails:nogo>");
|
||||
for (const pt of area.points) {
|
||||
lines.push(` <trails:point lat="${pt.lat}" lon="${pt.lon}"/>`);
|
||||
}
|
||||
lines.push(" </trails:nogo>");
|
||||
}
|
||||
lines.push(" </trails:planning>", " </extensions>");
|
||||
}
|
||||
|
||||
lines.push("</gpx>");
|
||||
return lines.join("\n");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue