Points
Events
Max mph
Max Over
Double-click: zoom in
Two-finger double-tap: zoom out
Shift+drag: zoom to area

Events

Min. over limit:10 mph
mph over
Color thresholds (mph over):
Playback
--:--:--
--:--:--
Initialising…

Map CSV Columns

Latitude*
Longitude*
Speed
Timestamp
† Speed or Timestamp required. If Speed is omitted it will be calculated from coordinates and timestamps.

Save as Dataset

Speedmap Help

Overview

Speedmap visualises GPS track data on a map, colour-codes your speed relative to road speed limits, and lets you play back the route with a moving car icon. You can pin notable events, cut sections out of a recording, and save trimmed subsets as new datasets.

Loading Data

Click Upload CSV in the header to import a GPS track. Any CSV with at least latitude and longitude columns is supported. A column-mapping dialog opens automatically:

  • Check First row is a header if the CSV has column names — the app auto-detects this and pre-selects the most likely columns.
  • Latitude (required) and Longitude (required). If both coordinates are combined in one column (e.g. 40.7128,-74.0060) select that column for Latitude and choose Combined with Latitude column for Longitude.
  • Speed — optional. Select the unit (mph or km/h). If omitted, speed is calculated from consecutive GPS coordinates and timestamps.
  • Timestamp — optional but recommended for accurate playback timing and event timestamps.

After import the route is snapped to roads via TomTom to retrieve real speed limits. A yellow banner appears if TomTom is unavailable and speed limits are estimated instead.

The Map

The route is drawn colour-coded by how much the recorded speed exceeds the road speed limit at each point:

  • Green — under the first threshold (default: under 1 mph over)
  • Orange — between the two thresholds (default: 1–15 mph over)
  • Red — above the second threshold (default: 15+ mph over)

The thresholds are adjustable in the Events sidebar (the two numbered fields next to the colour swatches).

Navigating the map:

  • Pan — click and drag
  • Zoom in/out — scroll wheel, or the + / buttons (bottom-left)
  • Double-click — zoom in centred on that point
  • Two-finger double-tap (Mac trackpad) — zoom out
  • Shift + drag — draw a box to zoom into that area
  • Reset view — the ↺ button fits the entire route back into view

Map styles — choose Street, Night, Hybrid, or Satellite from the buttons in the top-right corner of the map. The choice is saved between sessions.

Events Sidebar

The right panel lists every GPS point where the recorded speed exceeded the speed limit by at least the Min. over limit threshold.

  • Sort — reorder by most-over-limit, speed high→low, speed low→high, or earliest first.
  • Min. over limit — use the slider or number input to filter out minor infractions. Set to 0 to show every above-limit point. Click reset to return to the default (10 mph over).
  • Hover a row to highlight that point on the map.
  • Click a row to pin or unpin that point. Pinned points appear as coloured dots on the map and are listed in the Pinned Points panel at the bottom of the sidebar.
  • Double-click a row to seek the playhead to just before that event and begin playback.

The sidebar only lists events visible in the current map viewport. Pan or zoom to see more — the count updates automatically.

Pinned Points

Events can be pinned, each assigned a distinct colour. The Pinned Points panel appears at the bottom of the sidebar when at least one point is pinned.

  • Click a pinned entry to pan the map to that location.
  • Double-click a pinned entry to seek to and play from that event.
  • Right-click a dot on the map to unpin it.
  • Click Clear All to remove all pins at once.

Playback Controls

The playback bar sits above the events list in the sidebar. During playback a car icon moves along the route on the map and the events list scrolls to keep the current point in view.

ButtonAction
❰❰ (double-left)Play all segments in reverse — automatically pans between segments with a smooth animation
❰ (single-left)Play current segment in reverse — stops at the segment boundary
▮▮ (pause)Pause playback at the current position
❱ (single-right)Play current segment forward — stops at the segment boundary
❱❱ (double-right)Play all segments forward — automatically pans to the next segment and continues
■ (stop)Stop playback and return to the beginning of the range

The speed selector (10×–100×) controls how fast real time is compressed during playback. The speed is automatically adjusted when you zoom the map — faster speeds at lower zoom levels, slower at street level. You can override this for any zoom level and the preference is saved.

Segments and gaps: If the GPS track has large time gaps (e.g. the tracker was parked and went to sleep), the route is split into segments. In single-play mode (>), playback stops at the end of each segment. In all-play mode (>>), the map smoothly pans to the next segment start and playback continues automatically.

Parking badges: When playback crosses a location where the vehicle was parked (zero speed followed by a data gap), a floating ⏸ stopped Xh Xm badge appears briefly on the map at the parking spot.

Traffic stop compression: At-a-light stops (zero speed with no data gap) are automatically speed-compressed so no single stop takes more than 3 seconds of playback time.

Timeline Bar

The timeline bar runs across the bottom of the screen. It has two rows:

  • Minimap (thin top row) — shows the full route compressed to the bar width. Each segment appears in a distinct colour. Cuts are shown in grey. The white line is the playhead. Click or drag the minimap to jump to any position in the route.
  • Main timeline (taller row) — a zoomed view of the route with tick marks and real-time labels. Segments are colour-coded. Cuts appear as hatched grey overlays. The white line is the playhead.

Seeking: Click anywhere on the main timeline to move the playhead to that time. Click and drag to scrub.

Timeline zoom: Scroll the mouse wheel over the main timeline to zoom in or out, centred on the cursor. Use the + / buttons in the timeline control bar for step zoom. Double-click the timeline to reset to 1×. At zoom > 1× you can also click and drag the timeline to pan it.

Navigation buttons: The ⏮ button jumps to the beginning of the route; ⏭ jumps to the end.

Current time is shown on the left of the control bar (real timestamp of the playhead position). The route end time is shown on the right.

Cut Editor

Cuts mark sections of the route as excluded. Cuts are non-destructive — they hide sections from playback, the events list, and exported data, but the original data is preserved and cuts can be undone at any time.

Creating a cut (range):

  1. Seek the playhead to the start of the section you want to remove.
  2. Press I (or click the I button) to set the In point. An orange marker appears on the timeline.
  3. Seek the playhead to the end of the section.
  4. Press O (or click the O button) to set the Out point. A second orange marker appears, and the selection is highlighted in orange.
  5. Press X (or click the ✂ button) to cut the selected range.

Edge trim (single marker): You can also trim using just one marker. Set only an Out point to remove everything before it (trim the beginning of the track). Set only an In point to remove everything after it (trim the end of the track). Then press X as usual.

The In and Out buttons act as toggles — pressing again (or clicking the active button) clears that marker. If a placement cannot produce any cut (e.g. the markers are too close together or at a dead end of the track), the timeline shows a brief red flash at that position and the marker is not placed.

Selecting and deleting a cut: Click on a hatched grey cut region on the timeline to select it (it becomes darker with lighter hatch lines). Press Del or Backspace to restore the selected cut.

Undo: Ctrl+Z undoes the last cut or restore action.

Clear all cuts: The Clear Cuts button in the timeline control bar removes all cuts after a confirmation prompt.

Save as Dataset

Click Save as Dataset in the timeline control bar to save the current route (with all cuts applied) as a new permanent dataset. A dialog opens with an auto-generated name based on the date and time range. You can edit the name and add optional notes before saving.

The new dataset is immediately activated and added to the dataset selector at the top of the screen. Pinned points that fall within the saved subset are carried over.

Dataset Manager

Click the icon next to the dataset selector to open the Dataset Manager. It lists all stored datasets with their stats (point count, file size, distance, max speed).

  • Rename — click the dataset name to edit it inline.
  • Notes — add free-text notes in the text area below each entry.
  • Export CSV — downloads the dataset as a CSV file (timestamp, latitude, longitude, speed_mph).
  • Delete — permanently removes the dataset after confirmation. If the active dataset is deleted, the next most-recent dataset is loaded automatically.

Switch between datasets using the dropdown selector in the header. The last active dataset is remembered and restored on next load.

Session Persistence

The following state is automatically saved per dataset and restored when you return:

  • Map viewport (zoom level and pan position)
  • Playback position
  • Pinned points
  • All cuts and In/Out markers
  • Playback speed preference per zoom level

Keyboard Shortcuts

KeyAction
SpacePlay / Pause
EscapeStop playback and return to start
Step playhead forward one GPS point
Step playhead backward one GPS point
Shift+Play all segments forward (>>)
Shift+Play all segments in reverse (<<)
ISet / clear In point
OSet / clear Out point
XCut the In→Out selection
Ctrl+ZUndo last cut or restore
Del / BackspaceRestore (delete) the selected cut

Shortcuts are disabled when a text input or dropdown is focused.