Tower: a navigation tool

Tower is a navigation tool for OS Android (>=5.0) for finding user location (by phone cell or GPS),
viewing online maps, creating and storing waypoints and tracks, with minimal permissions and no background activity

Features:

Screenshots

  1. Track and waypoints (imported from a Garmin device) over OpenTopoMap
  2. Main menu unfolded
  3. Creating a new waypoint
  4. A waypoint list (with distances)
  5. Editing a waypoint
  6. Writing a track
  7. The settings page
  8. Viewing a track GPX file
  9. Exporting several waypoints as GPX
  10. The Settings page and a message about a missing key

How to use it

Currently, the following map services are available (select it on the SETTINGS page):

The map position can be set in several ways:

The map data is downloaded from the phone's network connection (4G, 3G, GPRS-EDGE). Offline caching is not available, except for a native cache of WebView. A waypoint/track layer is visible even when no network is available. There is also a "blank map" option, that dismisses the map layer completely. The "Hide/Show" button on the map hides/displays waypoints and tracks (in case you'd like to view an unclattered map).

Resolving of cell data to coordinates is done with free web services, currently available are (select it on the SETTINGS page):

Cell-to-coordinates services may sometimes show only a very general location, be slow, or fail completely, especially on a poor network. On the light side, urban 4G cells are usually resolved very rapidly within 100-300m precision. This app displays the cell data ( MCC - coutry code, MNC - operator code, LAC/TAC - region number, CID - cell number, dBm/RSRP - signal strength in dBm ) and allows to store them even if coords are missing.

A GPS lookup may also be slow or fail, depending on your device and environmental conditions. For example, a cold GPS startup without internet access in a half-closed area (like inside a car) may well take 5-10 min.

Creating a new waypoint is done on the ADD page (screenshot 3) by one of the four ways:

The app assigns a number to each waypoint, and the user can enter a short name (also known as a comment). The number and the comment are shown on a map next to the waypoint mark (the mark size is just a convenience, not an indication of the point's accuracy). The marks on the map are not clickable, to pick up a point use the POINT command or click on the appropriate line on the LIST page. For the gps points usually an altitude and range values are displayed on a POINT page, for the cell points - a range (given by a resolver service) and the cell id. Also a longer description may be entered/edited, that is stored with the point data but not shown on a map.

Some queer devices do not permit access to the app's data folder by default, so attempts to load or save waypoints fail with a "permission denied" message. If you encounter this issue, install a new version (>= 2.8.3), and manually turn on the storage permission in the system settings (settings - apps - tower - permissions - storage).

The app determines a location only when explicitly commanded by the user (CELL, GPS, ADD-Get, TRACK-Start). The absence of background activity is beneficial for battery life :) Regular automatic location updates can be activated by starting track recording (see below).

The waypoint list operates as a ring buffer, the max number of points is set on the SETTINGS page. Upon reaching the limit, creating a new point results in the removal of the oldest stored point; more precisely, the oldest unprotected point, as any waypoint may be marked as protected. If all remaining points are protected, the addition is blocked. The user has to unprotect or/and manually delete some points ( LIST - choose point - Toggle protect, Delete ) or increase the limit. There is a command LIST - Delete all to clear the list and reset numbering.

There is a clever option "save removed points to trash.csv" (in SETTINGS). If it's on, the trash file will be created in the app's data folder on a vitrual card, that contains the default list file current.csv (somewhere like /sdcard/Android/data/truewatcher.tower/files/current.csv), both have the same trivial format and may be retrieved or edited manually.

To adjust the map to display all waypoints, use LIST - Fit to map. Any point may be chosen as a base for measuring distances, which are presented in the point list together with numbers and names (screenshot 4). A stored waypoint may be chosen via LIST - choose point - As center, a new point - by checking As center on the ADD page. When a location is determined by cell/GPS, the location point is automatically set as center, even if it's not a stored waypoint. The point list may be sorted by those distances: LIST - By proximity.

There is also the page LIST-FILE with a few point list file commands:

Commands LIST-FILE-Open and LIST-FILE-New specifically operate with CSV files created by this app. The CSV field structure is trivial and data may be easily edited manually in Notepad. Other commands work also with the GPX format, that is compatible with Garmin navigators, OziExplorer, GPS visualiser and a variety of GPX editors. Open and Load commands both check the expected point count and give an error if it exceeds the current limit. The View track command reads CSV/GPX tracks and displays them along with the current map and waypoints. To adjust the map to loaded tracks use TRACK - Fit to map; there is no command to dismiss a track, all viewed tracks are cleared on the app shutdown. There is no explicit limit on a number of trackpoints or track segments; the involved javascript code is quite advanced and can handle tens of track segments with thousands of trackpoints.

Since v2.6 the app is capable of writing tracks by means of a foreground service. To start a track, open the TRACK screen and press the Start or Start new segment button, a notification must show up (screenshot 6). To stop the writing, press Stop. While writing a track, keep the app window (any of app's screens) maximized on top; if you minimize it, or run another app over it (or, say, get a SMS), the OS may suddenly stop the process after 1-2 minutes (at least on some phones). Shutting the screen by the POWER key is tolerated. The tracking service does not run at startup, nor survives a reboot. There are settings to adjust (a) a minimal distance between trackpoints (our recommended value is 1.5..2 times of a typical GPS accuracy of your device, default 12m), and (b) a minimal point sampling interval in seconds (default 10s). By default, the map is auto centered on each new trackpoint, there is a switch setting for that behaviour. You can also completely hide the current track from the map (and thus probably save some energy while writing it). Trackpoints are immediately stored in the currentTrack.csv file. The current track may be exported as GPX file by the LIST-Export track command. The TRACK - Fit to map adjusts the map to display all tracks (the current and imported). There is also a useful command TRACK - Delete last segment. To clear the current track altogether, you can just remove the currentTrack.csv file.

Summary of page navigation commands:

External materials and API keys

This distribution includes the LeafletJS javascript library code (https://github.com/Leaflet/Leaflet), which has BSD 2-Clause "Simplified" License

This app uses several web APIs and loads data and javascript files, details and references can be found in the LICENSES file accompanying the source code.

Some services (currently Yandex Maps and Yandex Locator), despite being free of charge, require access keys. As these keys are not to be committed to public repositories, this app may appear in two kinds of distributions: full (with keys included in the binary) and pure open (without keys).

The distribution without keys is fully operational, except for the specified services. and always includes slots to enter the user's own keys (found on the SETTINGS page, as shown in screenshot 10; if there is no such option, it's a full distribution). The API keys should be obtainable from https://developer.tech.yandex.com/ and https://yandex.ru/dev/locator/keys/get/ respectively.

Get it

This program is a free software under the GNU GPL 3.0 or later license, distributed as-is, without any warranty.

It does not contain ads, paid offers, statistics/tracking modules, or other malware, and it never reveals your exact coordinates to the internet.

Download APK (full distribution): latest release v2.9.6 Dec 2023, 1.8MB
sha256 4376b4c7a61ac15a0b4afaff593a134b9a771e6ef82a6122b94b4bf19747f273
permissions: ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION, FOREGROUND_SERVICE_LOCATION, ACCESS_NETWORK_STATE, INTERNET, FOREGROUND_SERVICE, READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE

Github: source code, issues

This app is now available from F-Droid (as a "pure open" build without Yandex services' keys).

F-Droid banner

View waypoints and tracks in a browser

Here is our web page to view GPX and CSV files over online maps. It works with any valid GPX files, and also with raw CSV lists and tracks, created by this app. Now you can comfortably recollect your journeys in front of a wide screen of a home desktop. The files are parsed with a client Javascript code wirhout actual uploading. Your can stack up as many files as your browser can process. Refreshing the page clears all its data.

Map your mobile cell IDs and signal strength

We are into a research on cell mapping. There are currently two apps for that:
- a fork of Tower's track facility, called SignalTrackWriter, that writes a csv track with the signal data, and
- an improved Javascript visualiser, capable of displaying info on trackpoints and coloring the signal track according to the strength (screenshot) or cell ID (screenshot).

The SignalTrackWriter also has CELLS screen for real-time monitoring of all cells, visible to the phone's radio module, like the *#*#4636#*#* engineer menu (but nicer: screenshot). Its latest APK is here (v2.4.1 Mar 2024, 1.4MB).

The Javascript visualiser can be simply copied from its Github branch or run online

Contacts

Email to rosc71-AT-hotmail.com