Multiuser Virtual Field Trips & Training
The Virtual Field Trip (VFT) system lets several people share a single VRGS scene in real time — walking the same outcrop, looking at the same models, and collaborating through pointers, annotations, chat, and shared waypoints. It is designed for teaching, guided field trips, and training, where one instructor (the leader) drives a session that students or trainees join.
A live session is called a trip. One person hosts it; everyone else joins with an invite code and is admitted through a waiting room. While the trip runs, participants see each other's avatars and viewpoints, the leader can recall everyone to a location, presenters can drop annotations and waypoints, and the whole session can be recorded for later replay and debrief.
System at a glance
The system has three parts:
| Component | What it is | Who uses it |
|---|---|---|
| VRGS client | The desktop / VR application. The VFT panel (a dockable side panel) is the control surface for hosting and joining. | Instructors, students, trainees |
| geotour-server | A standalone networking backend (a Go WebSocket server). It hosts trips, manages rosters and waiting rooms, relays movement/chat/annotations, and stores history. | Runs in the background / on a server; operators configure it |
| Admin dashboard | A web app for monitoring live trips, users, recordings, audit history, and analytics. | Administrators / instructors reviewing sessions |
The VRGS client connects to the server over a WebSocket
(ws://<host>:<port>/ws) and authenticates with a sign-in token. The server
keeps the authoritative state — who is in which trip, what role they hold, and
the shared annotations/waypoints — and broadcasts changes to everyone in the
trip.
The networking backend is a separate program (geotour-server). VRGS does not
embed it; an instructor (or your organisation's IT) runs one server that many
clients connect to. See Running the server.
Key concepts
- Trip — a live collaborative session. It has a name, an optional password, a participant cap, a leader, and a roster of everyone currently in it. A trip is active (running now) or scheduled (set to start at a future time).
- Invite code — a short code (derived from the trip's id) the host shares so others can join.
- Waiting room — when someone asks to join, they wait here until the leader or a TA approves them. This keeps uninvited people out of a class.
- Roles — every member holds one role that decides what they can do (see the permissions matrix).
- Presence / roster — the live list of who is in the trip right now, shown in the VFT panel.
- Recall & control — the leader can pull participants to their location ("recall"), or hand a participant temporary control of the shared view.
- Annotations & waypoints — shared spatial markers. Annotations are free notes pinned in 3D; waypoints are ordered stops (with optional dip/azimuth) that define a route through the scene.
- Chat & resource sharing — text messages and shared links/resources, either to the whole trip or as a direct message.
- Recording & replay — the leader can record a session; the server samples everyone's positions over time so the trip can be replayed afterwards for debrief.
- Analytics — from recorded movement the system builds position trails and an attention heatmap (where people looked), viewable in the dashboard.
Roles & permissions
There are five roles. The host of a trip is automatically the Leader; everyone admitted from the waiting room starts as a Participant. The leader can promote anyone to another role.
| Capability | Observer | Participant | Presenter | TA | Leader |
|---|---|---|---|---|---|
| See the shared scene | ✓ | ✓ | ✓ | ✓ | ✓ |
| Broadcast their own avatar / movement | — |