Expose navigation target to expressions / API for dynamic field navigation
J
James Hosmer
Summary
QField already includes a useful navigation tool that can guide a field worker to a selected feature. However, the navigation target cannot currently be controlled programmatically from expressions or project logic.
For many field workflows, especially ecological surveys, the navigation target needs to be selected dynamically based on spatial context rather than manually choosing a feature.
Providing a way to set the navigation target via expressions or a small API would greatly improve QField’s usefulness for guided survey workflows.
Example Use Case
I am developing a QField system for managing wildlife reserves (UK). We maintain ~160 bird boxes across several reserves.
During a work party, volunteers need to:
Select a reserve
Select a work scope within that reserve
Navigate to the nearest unprocessed bird box
As each box is inspected and marked processed, the system should automatically guide the worker to the next nearest unprocessed box.
Currently this can be implemented partially using expressions (distance, bearing, etc.), but the built-in QField navigation tool cannot be driven by these results.
This results in awkward workflows where the worker must repeatedly select features manually.
Desired Capability
Expose a way for expressions or project logic to control the navigation target.
Examples:
Expression variable
@navigation_target
Expression function
set_navigation_target(geometry)
set_navigation_target(feature)
clear_navigation_target()
Or project-level setting
Allow the navigation target to be defined by an expression such as:
navigation_target = nearest_unprocessed_feature()
Benefits
This would enable QField projects to implement workflows like:
ecological surveys (nearest observation target)
infrastructure inspection (next asset to inspect)
trail or fence inspections
agricultural sampling grids
forestry plot navigation
The navigation UI already exists; exposing the target would simply allow projects to drive it dynamically.
Current Workaround
The current workaround is to implement custom navigation logic using expressions and symbology:
compute nearest feature
compute distance and bearing
display this in the form
render arrows or guidance lines
This works but is much less intuitive than using the built-in navigation tool.
Why this matters
QField is already an excellent field data collection platform. Enabling dynamic navigation targets would allow it to function as a guided survey tool, which is a very common requirement in conservation, agriculture, and infrastructure inspection.
Additional Context
Our system already uses:
QGIS + QField
RTK GNSS positioning
GeoPackage data store
QFieldCloud synchronization
Dynamic navigation would integrate naturally with these workflows.
I would be happy to help test or prototype this functionality if needed.
J
James Hosmer
Just to emphasize the importance of this feature request, here's a bit more information. We currently have about 150 bird boxes distributed across three of our seven fields. Our plan is to double this number over the next two years. A primary challenge that we face two or three times a year is simply finding the boxes to process them in what can be a somewhat hostile environment. I have created a QField application that supports inspection of boxes the nests (if any) and tracks box repairs. In order to avoid duplication of effort, I flag boxes as "processed", "unprocessed" or "missing". My goal was to create a dynamic locator that would permit the inspection team to identify the nearest unprocessed boxes within their assigned work scope. The work scopes are polygons that account for ease of accessibility for the team. This is not always along a path, hence the polygon approach. From any given position within a work scope, the locator can identify the nearest set of boxes with distance and direction to the nearest box. What I cannot do is find any way to dynamically have the locator follow along with the team. The QField navigation feature does exactly that, but I cannot cause its target to change with the output from my locator, which would be the best approach. Neither have i found a way to even manually stimulate my locator to update with team movement because action buttons have not worked and QField does not dynamically expose navigation location to expressions or geometry generators. So....catch-22, there is no workaround for what is a critically needed feature. Once working, the locator has broad applicability to most of our workflows for feature inspections. So, once working, almost every workflow that I am building will be able to take advantage of the capability.