Skip to main content

Mobile App

The FastGIS mobile app is an Expo / React Native client for field capture, route planning, offline curvy-road discovery, and real-time elevation profiling. It connects to the same FastGIS server as the browser UI.

Tabs

TabPurpose
NavigateFull-screen MapLibre map — route planning, circular-route generator, POI search, curvy-road discovery, offline tile queries, turn-by-turn navigation
CaptureGPS field capture — track recording, waypoint photos/audio/notes, sync to server
MapStatic map viewer and overlay manager
ProfileElevation transect tool — draw a line on the map, run GRASS r.profile against any loaded DEM, inspect the chart
ConnectionServer connection, environment management, saved analyses, app settings

Navigate is the default tab when the app opens.


Connecting to a server

Open Connection → Server and enter:

  • Server URL — e.g. https://fastgis.example.com
  • API key — issued in the server's admin panel

The app auto-reconnects on relaunch using credentials stored in the device's SecureStore.


The Navigate tab is a full-screen MapLibre map with floating controls and a set of bottom sheets.

Floating controls

ButtonAction
GPS follow — tap to re-centre the map on your position and lock the camera to follow you. Tap again (or pan the map) to unlock.
+ / Zoom in / out
2D / 3DToggle perspective tilt
Open the POI category tray (see below)
Map settings and basemap selector
Routing wizard — the entry point for all route planning

In portrait these stack as a single right-side column. In landscape the same buttons sit in a horizontal bottom row, with the central Route pill flanked by zoom/perspective controls on the left and POI / GPS / nav-toggle on the right.

The Map tab mirrors this exact layout: same button sizes, same gaps, same right-column-portrait / bottom-row-landscape pattern (Map's primary action — the Capture FAB — sits in the visual centre slot equivalent to Navigate's Route pill).

Routing wizard

Tap to open the ride wizard. Four options are available:

OptionDescription
📍→📍 Plan a routeA-to-B route with waypoints, vehicle type, and routing preferences
Create a loopCircular tour from your GPS position or map centre
Find curvy roadsDiscover scenic and twisty roads from the curvature database
Record RideStart a GPS field session — track, waypoints, photos, audio, notes

POI chip bar

Tap to reveal the POI category tray. Selecting a chip overlays the corresponding points of interest on the map.

ChipCategory
Saved places
📦Field captures (from the Capture tab)
🏛Attractions
Curvy roads (runs a quick curvature query)
Mountain passes
📍Meeting points
Gas stations
🍴Food & restaurants
Camping
🏨Biker-friendly hotels
🅿Motorcycle parking
🍦Ice cream

Tap a chip again to hide its layer. Tap the map or close the tray to collapse the bar.

Map overlays

Tap to open map settings. The Overlays section lists four toggleable data layers:

OverlayDescription
📷 Speed camerasFixed speed camera locations sourced from OpenStreetMap. Requires a server connection.
Gas stationsFuel stops in the current map area. Requires a server connection.
🚧 Road worksActive construction and closures (NVDB data). Works offline.
🌧 Rain radarLive precipitation tiles via RainViewer. Works offline (pulls directly from RainViewer).

Each overlay is toggled independently. Overlays stay active when you switch between sheets or tabs.


Standard route planner

Open via ⊞ → Plan a route.

  1. Search for a start and destination, or use Use my location for GPS origin.
  2. Add optional via-points (intermediate stops) — drag to reorder, tap to remove.
  3. Choose a vehicle type:
IconVehicleRouting costing
🏍MotoMotorcycle — full costing options
🚗CarAuto — ferry, toll, highway avoidance
🚲BikeBicycle — ferry avoidance
🚶WalkPedestrian — ferry avoidance
  1. Tap Calculate route — the route appears on the map and the summary shows distance and ETA.
  2. Tap ▶ Navigate to begin turn-by-turn guidance.
  3. Tap ⛰ Elevation profile in the route summary to fetch and render the elevation chart.

Once the planner panel slides down you'll see a compact route summary chip floating over the map (route label + distance + ETA). The chip has three actions:

  • ▶ (green) — start turn-by-turn directly without re-opening the planner sheet.
  • ✕ Clear — discard the route.
  • The replan icon (📍→📍) on the left of the chip reopens the planner if you want to edit waypoints or options.

Once turn-by-turn is running the ▶ Start and ✕ Clear buttons are replaced with a ◎ Hide / ◉ Show toggle that turns the background-map route line on/off without interrupting navigation.

Motorcycle options

Expand ▶ Advanced in the route planner to access fine-grained Valhalla costing sliders (highways, hills, trails, bad surfaces, ferry, tolls, top speed, wind screen) and the shortest-distance toggle.

Waypoint injection

While turn-by-turn navigation is active, open a curvy-road detail card and tap Inject stop or Inject full segment — the waypoint is smart-inserted at the lowest-detour position in the current route and navigation restarts automatically on the updated route.

Off-route handling

While turn-by-turn is running, the app continuously projects your GPS position onto the active route polyline. If you stray further than the off-route threshold for several consecutive GPS ticks (defaults: 150 m / 3 ticks for motor, 90 m / 6 ticks for bicycle, 52 m / 9 ticks for walking), one of two things happens:

  • Motorcycle, car, bicycle — the route is recalculated automatically from your current position to the destination. You hear "Off route. Recalculating." and the new route line replaces the old one on the map. No tap needed; your hands stay on the bars/wheel.
  • Walking — the app surfaces a Tap to recalculate prompt instead. Pedestrians can safely stop and confirm, and the prompt also avoids triggering an expensive reroute every time you legitimately cut across a plaza.

You can tune the sensitivity in Settings → Safety alerts → Off-route detection:

  • Off-route threshold (50–400 m, default 150) — the motor-vehicle baseline. Bicycle uses ×0.6 of this, walking ×0.35.
  • Off-route strikes (2–8, default 3) — consecutive bad fixes before triggering. Bicycle uses ×2 of this, walking ×3.

The per-vehicle multipliers are not user-editable; the rationale is that slower / less-road-constrained costings need a narrower threshold but more strikes so shoulder positioning doesn't false-alarm.

Verbal voice cues by vehicle

TTS announcements ride on top of Valhalla's verbal_pre_* / verbal_transition_alert_* strings when populated. For costings that emit empty strings (notably bicycle, which can leave all verbal fields plus the visible instruction empty), the app synthesizes a fallback line from the maneuver type and street name — e.g. "Turn left onto Bergstien" — so the rider isn't dropped into silence even when the routing service skips the prose.

Reset to defaults

Tap ↺ Reset to defaults at the bottom of the planner to restore all routing options to their factory settings (vehicle, avoid flags, all moto sliders). Locations and waypoints are preserved; the computed route is cleared.


Circular route planner

The circular route planner generates a loop that starts and ends at the same point. Open it from the Navigate tab via Routing → Circular route.

Start point

Tap the Start point row to toggle between two sources:

IconSourceNotes
🛰 GPS positionDevice GPSRequires a GPS fix. Greyed out with "No GPS signal" when unavailable.
🗺 Map centerCurrent map centreAlways available. Pan the map before tapping Generate (or Recompute in the preview panel) to start from any point in the world.

Ride profile (motorcycle only)

The ride profile translates directly into Valhalla costing weights sent to the routing engine. Each setting is a value between 0 and 1 — higher means the engine prefers that characteristic more strongly.

ProfileHighwaysHillsAvoid bad surfacesScenic trailsCharacter
Balanced0.350.500.75Comfortable all-round motorcycle route
Curvy0.200.800.80Maximises curves and elevation change, avoids fast roads
Scenic0.150.650.600.05Prioritises landscape and viewpoints; light trail use allowed
Fast0.750.350.90Faster roads, minimal climbing, smooth surface preferred
Road bike safe0.400.451.00Strictly avoids unpaved and gravel surfaces
CustomsliderslidersliderSet your own percentages via the Advanced tuning panel

Ferry and toll avoidance settings from the Route Planner (standard routing sheet) are always blended in on top of these weights.

Choosing a profile also pre-sets the Avg speed used for ETA estimates (Curvy → 45 km/h, Fast → 75 km/h, etc.) — you can override this in Advanced settings.

Advanced settings

Expand ▶ Advanced settings (motorcycle and car only) to tune:

SettingRangeEffect
Avg speed15–120 km/hETA estimate only; does not cap actual routing speed
Waypoints2–12More waypoints → more varied loop shape and less chance of out-and-back detours
Reach depth0.30–1.00How far out waypoints are placed. 0.30 = tight radius; 1.00 = pushed to the furthest reachable edge. Lower values work better in fjord/valley terrain to avoid dead-end roads.
Avoid backtrackingtoggleMarks waypoints as Valhalla through stops — the engine passes through without U-turning, reducing same-road overlap
Force departure headingtoggleAdds a directional heading constraint so the route departs in the chosen compass direction (±45°). Disabled when direction is set to Random.

Tour direction

Tap Tour direction to open a compass rose and pick the preferred outbound heading: N, NE, E, SE, S, SW, W, NW, or R (Random). The engine biases waypoint placement in that direction but does not guarantee a straight outbound leg.

After generating

Once the route preview appears:

  • The panel shows actual distance and estimated duration.
  • Tap ▶ Start navigation to begin turn-by-turn guidance immediately.
  • Tap ↺ Recompute to regenerate with the same settings — if you have panned the map and the start source is set to Map center, the recompute uses the current map centre, not the one when the panel first opened.
  • Tap 💾 Save to store the route.
  • Tap ⛰ Show elevation profile to fetch and display the elevation chart for the generated loop.

Curvy-road discovery

Tap 〰 Find Curvy Roads in the Navigate tab (via the Routing button → wizard).

  1. Scoring method — choose Total (default), Density, or Radius. Each algorithm measures curvature differently; see Curvy Roads Algorithms for a full explanation.
  2. Preset — Twisty, Scenic, or Mixed sets the baseline curvature threshold for the selected algorithm.
  3. Search radius — 25–200 km around your GPS position or the current map centre.
  4. Tap Find roads near me → (or Search here → after panning the map).
  5. Results appear as a ranked list and coloured line segments on the map.
  6. Tap any road to expand its detail card:
    • Stats: curvature score, length, distance from you, elevation range, elevation gain, water proximity.
    • ⛰ Show elevation profile — fetches and renders the full elevation chart inline. Tap a point on the chart to highlight that position on the map.
    • Route actions: Start here, Add stop, Route to it, Add full segment.

Tap ▶ Advanced in the sheet to access fine-grained filters: road class, surface type, min sinuosity, population density, scenic-only, near-water, and elevation change thresholds.

Elevation data comes from the best available national DEM for the road's location (see API Reference).


Field capture

Switch to the Capture tab.

Starting a session

  1. Select or create a GRASS environment (e.g. a project area) from the More → Connection sheet.
  2. Tap Start Recording — the big green CTA on the idle screen — to begin a new GPS session with a default timestamped title.
  3. Use the floating action buttons (or the bottom action bar once the session is recording) to add samples: photo, video, audio, waypoint, note, track point.
  4. Tap the red ■ End in the recording header when finished. The session and all its samples upload automatically when a server connection is available.

Browsing past sessions

The idle screen lists your Recent sessions below the Start CTA. Each row shows the session title, status (recording / paused / ready / completed) and the timestamp of the last save.

  • Tap a row to open a dedicated session detail view. The view replaces the list and shows: session title and status header, publish-target metadata, and a samples list where each card expands on tap to show its media preview (photo, video thumbnail, audio waveform, note text). Tap the ‹ Back button at the top-left to return to the list.

  • Swipe a row left to reveal two row actions:

    • Push (teal) — uploads any pending samples for that session to the configured FastGIS server.
    • Delete (red) — removes the session and all its samples from this device. A confirmation dialog appears first so a stray swipe doesn't destroy work.

    Both actions are disabled while another publish / delete operation is already in flight.

Where past sessions go after upload

Once a session has been pushed and there's nothing pending, it stays in the local list as a "synced" record so you can still browse the samples on-device. To free up storage, swipe-delete it. To re-sync (e.g. after a server reset), use the More → Sync sheet which exposes "Push all" and granular controls.


Elevation profile tab

The Profile tab is a dedicated transect tool for detailed elevation analysis against server-side rasters.

  1. Load a GRASS environment that contains a DEM raster (More → Environment).
  2. On the Profile tab, choose the raster from the pill selector.
  3. Tap Start Transect Draw, then tap start and end points on the map.
  4. Tap Run Profile — the server executes r.profile and the chart renders.
  5. Tap Save Profile to Analyses to persist the result as an artifact.

This is different from the route/road inline chart: it uses the full-resolution server-side DEM rather than the automatic online elevation service.


Riding together — live sharing, voice, and group rides

FastGIS has a full social riding layer built on your friends and groups (More → Live sharing). All of it is opt-in and self-hosted — your location and voice never touch a third-party service.

Live location sharing

Share your live position with all friends, specific friends, and/or groups for a chosen duration (15 m up to "until I turn it off"). Friends appear on the Navigate map as avatars with a moving / stopped / stale status ring. You can also mint an expiring public link that anyone can open in a browser — no app or account needed.

Group voice — push-to-talk

Pick a group as your voice channel and talk walkie-talkie style. Riding-safe triggers: an on-map tap button (Navigate, turn-by-turn, and Active Ride), and a Bluetooth helmet media button. Only your active channel is audible, and a banner shows who is talking.

Live calls

Full-duplex calls — everyone talks at once, like a phone call:

  • 1:1 calls to a mutual friend, and group calls for a whole group.
  • While your call rings you hear the familiar ringback tone; if nobody picks up within about 45 seconds the call ends itself with a "No answer" notice.
  • Join anytime: an ongoing group call shows a "call in progress — join" banner; one tap joins it. Calls persist while at least one person is in them.
  • Background ringing: incoming calls ring on the lock screen with the native iOS call UI, even when the app is in the background.
  • Calls list (More → Calls): every call in both directions — ↘ incoming (missed / answered / declined) and ↗ outgoing (including "No answer"); a missed group call that is still ongoing can be joined straight from the list.
  • During a call, spoken navigation pauses (call > push-to-talk > nav voice); the repeat button on the nav HUD still speaks on demand.

Group Ride — convoy navigation

One rider (the leader) shares a planned route with a group; everyone rides the same road geometry, so the convoy stays together:

  1. Plan a route in Navigate, then open More → Live sharing → Group ride and tap Start ride on a group. Every member gets an invite.
  2. Accepting is a single consent: it joins the ride, shares your live location with the group, and selects the group as your voice channel. A green "In the convoy" strip stays visible with an instant Leave.
  3. The route heals itself. If the leader takes a detour or reroutes, the new route is pushed to every member automatically. If you drift off, the app quietly routes you back to a point ahead on the group's route — it never replans your own route to the destination.
  4. Leadership is handable. The leader can promote another member (Make leader). If the leader disconnects, the longest-connected member is promoted automatically (they can decline); with no leader the group simply keeps following the last shared route.
  5. Late joiners and reconnecting phones always receive the current route.

Settings and data reset

Open Connection → ⚙ Settings → Data → Reset offline data to erase all downloaded tiles, the curvature database, POI databases, and cached routes.

What is kept: server credentials, app preferences, field captures, bookmarks.

After tapping Reset, restart the app. Then use the Offline Packs sheet to re-download fresh tiles.

See also: Offline Data Tiles.