Data recorded by a GPS app typically consists of standard elements, such as name, description, symbol, type, and entities that contain spatial data. However, when it comes to storing enriched, "meaningful-to-humans", location information based on type, our model needs to be a bit more open-ended.
Our app features an assortment of pre-defined types for different entities. A created waypoint might be a trailhead, a campsite, an obstacle, or a restaurant — to name a few. But what if we want the ability to categorically specify whether a campsite is paid or free, whether it's developed or primitive, or whether a waypoint of type "restaurant" allows pets?
For this, we've created the "Details" tab, which displays a custom form interface based on entity type. There, you can choose to populate your data with these granular points, which in turn, enables you to filter that entity on-or-off your map based on their values.
(ie: Only show restaurants that are pet friendly, or only show campsites in National Parks.)
The screenshot somewhat reveals how the sausage is made. We have JSON definitions for custom fields, and also JSON definitions that serve as the scaffolds for the form itself; so none of the forms or extended fields are hard-coded and can be altered very quickly and easily by anyone on our team.
When you export your data as a GPX file, this rich data is stored in the <extensions> entity using the "mapkind" namespace, and can be ingested back into the app in the same manner as long as the field keys are known!
