BLE barometer support for altitude correction

As a feature request, I would like to ask that Locus be developed to accept barometric pressure data from an external Bluetooth Low Energy (BLE) sensor, and to use pressure data from that sensor as an input for Locus altitude calculation.

As discussed in the final paragraph below, this request does not intend that valuable, scarce Locus developer time should be squandered on accommodating large numbers of different sensors for all manner of irrelevant environmental parameters. Instead, this request focuses specifically on providing fundamental satnav device capability (barometer-corrected altitude) for Locus running on rugged Android devices.

Many rugged, enterprise-quality handheld Android devices do not have an integrated air pressure sensor (barometer). The same also is true of many non-ruggedized Android devices. Therefore, users of these devices are unable to benefit from the excellent altitude pressure compensation code that already exists in Locus. Meanwhile, there are several good-quality, commercial BLE external barometric pressure sensor products (e.g., MbientLab, RuuviTag) currently available, sigals from which Locus could use to supplement SRTM data (or simple GPS readings) when calcualting altitude. Having accurate altitude information is critical to many users. And so adding support for an external barometer sensor would be a great asset in Locus.

Long-distance bicycle tourists and adventuresome motorcyclists especially benefit from running Locus on highly ruggedized Android devices that have hot-swap battery capability (for example, Panasonic Toughpad, Winmate, and Juniper products; all of which lack internal barometers). These rugged devices can be clamped on handlebars without requiring external protective cases. They are exposed to all manner of humidity, precipitation, and dust. On dirt-road tours, especially in the mountains and/or in developing countries, bicyclists and motorcyclists subject these devices to harsh weather and tremendous vibration, often sustained daily over periods of months to more than one year. In other words, these people are textbook examples of rugged Android device users. Especially if these off-the-grid (and mostly offline) users did not have the foresight to download SRTM data for an area (often months previous, before leaving home, for a region they might not originally have planned to visit) they need barometric pressure input in order to get the best possible estimates of true altitude. Knowing altitude accurately is particularly important to bicyclists doing difficult, dirt-road climbs in major ranges (Himalaya, Andes, Rockies, etc.). Because ruggedized, hot-swap Android devices often lack internal barometers, allowing Locus to use external BLE barometric pressure sensor data is the answer.

Conveniently, the MbientLab and RuuviTag BLE sensor products also sense temperature, in addition to barometeric pressure. Adding support in Locus for the temperature and pressure signals from one of these sensor products would be a natural way of addressing both this present feature request, and the BLE temperature sensor requests previously submitted by Jordan Nikolov and Daesoo Kim.

One of the tremendous assets of Locus is the variety of devices on which it can run, and thus its platform tailorability to different kinds of users. Different users have different hardware requirements. Adding support in Locus for an external BLE barometric pressure sensor product would expand the appeal of Locus to an even wider user base, using a wider variety of Android hardware.

Adding support for many, many different kinds of sensors would eat up way too much Locus developer time. I would not want to see that to happen. I beleive Locus development should focus on providing key satnav device functionality, and on making a variety of Locus-equipped Android devices equal to, or much better than, commercial devices such as Garmin. When achieving that goal requires supporting a small number of carefully selected external sensors (i.e., BLE temperature and BLE barometer) then those sensor support projects deserve to receive Locus developer time. There is no implication in this feature request that Locus should go down the rabbithole of endlessly developing support for every conceivable external sensor under the sun. That would be a mistake. (Wouldn't it be great to be able to monitor your neighbor's cat's urinary output, in milliliters, in realtime, right in Locus? NO!) But temperature and barometer-corrected altitude are critical, core functionalities of any serious satnav device, including BLE-only rugged Androids, and Locus should provide them.