What is the general goal of the feature?
As a supervisor, I would like to occasionally collect GPS coordinates in the background to provide evidence that data was collected in a particular place.
Currently, users can use required GPS questions, but it's possible to get bad data. For example, if you have a long survey, you can collect GPS in the morning, then go home and fill in the survey data whenever.
Users could also use third party GPS apps to track location, but that's a fragile process. Also, the location doesn't come attached to the submission which isn't ideal.
What are some example use cases for this feature?
There have been related feature requests over the time that suggest that this is a good idea. This feature is a little different because:
- Unlike Auto-gps implementation on ODK Collect (which we still want to do), this will not require the form designer to decide when in the form they want the location captured, it'll be done opportunistically. The data also will not be in the form, it'll be in a audit file. As a side-effect, we won't have to touch too much of the spec or backing libraries so it should be easier to implement and ship.
- The goal isn't to provide a high-fidelity trace of the location like Record a geoline in the background and Parallel collection of Geotrace while collecting other information, but rather to be opportunistic and battery saving while providing some audit capabilities.
How will the feature work
See https://github.com/opendatakit/roadmap/issues/28 for the final spec.
~~Update: We have a rough specification at https://docs.google.com/document/d/1Xw4WOctVgg11ZfYwTnrL6qlTKSYwhn_pTc2GQ1OFaFM~~
We will extend form audit log to add location to the log if an accuracy
or frequency
parameter is set in the audit row of the XLSForm.
accuracy
will be the minimum acceptable accuracy in meters for a location to be recorded.frequency
will be the minimum frequency in seconds that the location will be fetchedage
will be the time in seconds that will location will be valid
When Collect opens the form, we will request location updates from the GPS provider every frequency
seconds (with minDistance=0, for those familiar with the Android API). If the location meets the accuracy
threshold it will be cached.
At the time of the audit event (e.g., view question, form save) occurs, Collect will check the cache for the location. If one is found and age
has not been exceeded, it will write to the log.
Location information will be recorded in three columns: latitude
, longitude
, accuracy
in the audit log that is attached to Collect's submissions.
To ensure enumerators are aware that this sensitive data is being gathered, Collect will show a dialog with This form collects your location in the background
(or something similar) on first load with an OK
and Do not show again
option.
Risks
This feature will touch a number of tools across the ecosystem. It'll require changes to the XForm spec documentation, XLSForm documentation, pyxform to support the new parameters, JavaRosa to pass through those parameters to Collect, and Aggregate to display the new rows.
What can you contribute to making this feature a reality?
Spec and implementation guidance. Also docs.