Overland

Overland tracks your location and sends your data to a server of your choosing. The app will save data while you're offline, and send it to the server later in batches.

Highly configurable tracking settings for optimal control. Choose between getting highly detailed track logs (and using tons of battery in the process), or tracking only significant movements allowing you to conserve battery life.

Track bike rides, runs, walks, car trips, train trips and more.

How does it work?

Overland uses the iOS CoreLocation API to collect location data from the phone. There are many limitations around handling location data on iOS, and this app tries to do the best it can to continue running as long as possible in the background.

Due to the specifics of how iOS handles location and backgrounding, it is not possible to configure the app to collect and send data at a given interval. Instead, the best you can do is "suggest" what you want from the phone, and take what you get.

For example, you can request to receive one point every 100 meters moved, and the app may or may not get data when the user has moved that much. Sometimes you'll get more, sometimes less.

You can read more about the settings available to you in the readme.

Servers

The app sends data to an HTTP endpoint of a server of your choosing. You can use an existing backend or build your own. The app works with the following servers out of the box:

If you've written a backend that others can use, either hosted as a service or something they can install, please let me know and I can list it here!

API

Once you add a server endpoint in the settings, the app will begin sending you data. The requests it makes will look like the below, a JSON post body with a list of GeoJSON points in a "locations" key.

{
  "locations": [
    {
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [
          -122.030581, 37.331800
        ]
      },
      "properties": {
        "timestamp": "2015-10-01T08:00:00-0700",
        "altitude": 0,
        "speed": 4,
        "horizontal_accuracy": 30,
        "vertical_accuracy": -1,
        "motion": ["driving","stationary"],
        "pauses": false,
        "activity": "other_navigation",
        "desired_accuracy": 100,
        "deferred": 1000,
        "significant_change": "disabled",
        "locations_in_payload": 1,
        "device_id": "",
        "wifi": "launchpad",
        "battery_state": "charging",
        "battery_level": 0.89
      }
    }
  ]
}

Please see the README for full details on the request and other aspects of the API.

Source Code

This app is open source! You can download the source code on GitHub.

Who Made This?

This app was developed by Aaron Parecki.

If you've found this app useful, you can buy Aaron a beer!