Fix a severe GPX parse slowdown and add route (<rte>) support
GPX tracks were silently failing to render for large real-world files: point_extensions used REXML's "extensions//*" XPath, and the // descendant axis costs low-single-digit milliseconds per call regardless of subtree size. Run once per point, that's negligible on small files but ~30s on a real 8000-point track — long enough to hit a proxy timeout in production, so the file just never appeared with no error. Replaced with plain recursive child traversal (~40x faster on the same file, confirmed 29.9s -> 3.16s); test_parsing_many_points_with_extensions_stays_fast guards against reintroducing it. Also adds support for <rte> routes (not just <trk> tracks and <wpt> waypoints), sharing the track/route conversion logic via a new line_feature helper. Routes get their own "route" kind and a dashed ROUTE_ICON in the file tree so the type is visible at a glance.
This commit is contained in:
1 parent
0394befdec
commit
708c08259b
6 files changed
+149
-19
No files matched your search
+4
-1
@@ -1,5 +1,5 @@
|
||||
import { Popup } from "/vendor/maplibre-gl/maplibre-gl.mjs";
|
||||
import { GPX_ICON, NEW_FOLDER_ICON, UPLOAD_ICON, WAYPOINT_ICON, TRACK_ICON } from "/js/icons.js";
|
||||
import { GPX_ICON, NEW_FOLDER_ICON, UPLOAD_ICON, WAYPOINT_ICON, TRACK_ICON, ROUTE_ICON } from "/js/icons.js";
|
||||
import { notifySidePanelOpen, onlyOneSidePanelOpen } from "/js/panels.js";
|
||||
import { formatActivityType } from "/js/track_profile.js";
|
||||
|
||||
@@ -226,6 +226,9 @@ export class GpxPanelControl {
|
||||
if (kind === "waypoint") {
|
||||
icon.innerHTML = WAYPOINT_ICON;
|
||||
icon.title = "Has waypoints";
|
||||
} else if (kind === "route") {
|
||||
icon.innerHTML = ROUTE_ICON;
|
||||
icon.title = "Has a route";
|
||||
} else {
|
||||
icon.innerHTML = TRACK_ICON;
|
||||
icon.title = "Has a track";
|
||||
|
||||
Reference in new issue
Block a user