SimplestGPS is a geolocation and chart displaying app for iPhone and other iOS-compatible devices. Available at App Store and open source.
The basic idea of SimplestGPS is to offer the simplest interface possible for orientation in field. Show only what is necessary, make it easy to read and interpret in a glance. It is modeled after my own needs in navigation.
SimplestGPS shows the basic information made available by geolocation: coordinates, altitude, heading and speed. It shows the distance and direction of "targets" that the user may add. The only configuration in Settings is the unit (metric or imperial).
The main user interface items are the four touch sensitive parts at four corners of the screen:
MOD: select Mode. There are 2 basic modes: Compass (rose is static, red needle moves) and Heading (rose rotates, red needle is static). When maps are uploaded, there are more modes (more about this in a moment).
PIN: access to second screen where "targets" or waypoints can be added or edited.
TGT: if there are targets in target list, TGT changes selection to the next target. Long-pressing TGT deselects any target.
THF: toogles how the heading of secondary targets are shown on rose: name/distance or a small green triangle. In map mode (without rose), THF toggles crosshairs blinking.
The target list screen is a straightforward list, with touch-sensitive buttons "Back", "Help" and "New" in the bottom.
The "Help" button opens this Web page.
Press "New" to add a new target. Touch any existing target on the list to edit or delete it. Touch "Back" to go back to compass.
When adding a new target, the current coordinates are the default:
The coordinates should be typed in the specified format: degrees, minutes, seconds and cents, separated by points. Negative values (South or West) can be indicated by a minus sign. If the coordinates are not precise e.g. just degrees and minutes without seconds or cents, just omit them.
Then maps or charts have been uploaded to the map (see next section to learn how to do that), there are additional features and modes available. The MOD button selects between six modes instead of two:
The modes that show a map accept a number of gestures:
In map modes, the current location is shown by a red crosshairs, and the targets' location are shown as green crosshairs. Blinking of crosshairs can be turned on/off by the THF button. The crosshairs rotate to indicate the heading (red crosshairs) or the bearing (green crosshairs).
The red crosshairs is hidden when a) the screen center is locked to current position, and b) the mode also shows a compass rose. In this case, the center of the rose is also the current location. If the user drags the map, the lock disappears and the red crosshairs is shown again, to make clear that location is off-center.
When a target is active, SimplestGPS emits some sounds or beeps to indicate proximity. These sounds can be turned off at Settings.
Since the version 2.0, the app can paint maps or charts on a screen, as well as current position, target positions, etc. The main advantage is offline orientation, in places where there is no Internet connection, so no Map and no Google Earth. Also, in some situations it is desirable to see position over a proper chart instead of satellite images.
The maps should be supplied as image files, in standard formats like JPEG or PNG. The charts should not be much bigger than 3000x3000, otherwise there is a risk that the app won't load them, and iOS might even terminate the app. Newest iPhones with more RAM can handle bigger files.
In order to upload them to SimplestGPS:
SimplestGPS "knows" the position and size of a map based on its name. To be recognized by the app, the files must be named as follows:
abc+def+gh+ij.extension --- OR --- abc+def+gh+ij+k+l.extension Example: 2600s+4900w+15+15.jpg for a map that covers the area 26º00'S-26º15'S, 49º00'W-48º45'W Example: 2600s+4900w+15+15+-67+4.jpg for the same map with specified SAD69-to-WGS84 correction a: latitude in degrees (mandatory, 2 or 3 digits) b: latitude minutes (mandatory, 2 digits) c: "n" for North, "s" for South d: longitude in degrees (mandatory, 2 or 3 digits) e: longitude minutes (mandatory, 2 digits) f: "e" for East, "w" for West g: height of the map, in degrees (optional) h: height of the map, in minutes (2 digits, mandatory) i: width of the map, in degrees (optional) j: width of the map, in minutes (2 digits, mandatory) k: DX correction, in meters, to WGS84 ("GPS/NAVSTAR") datum l: DY correction, in meters, to WGS84 ("GPS/NAVSTAR") datum
The latitude and longitude of the map points to the top left (northwest) of the map. The width extends to East, and the height extends to South. The image should contain only the map itself, without any kind of border. The map files should be Mercator — the latitude and longitude are constant throughout the edges of the image — since the projection on screen assumes that longitude width is constant from top to bottom.
Make sure that uploaded charts are straight i.e. they are not slanted, tilted, or affected by barrel or pincushion distortions. These distortions may affect the precision i.e. the location points will be slightly "off" on the chart. On the other hand, aspect ratio distortions are tolerated: the app will stretch or compress the image to correct scale. If you used Photoshop, GIMP, Affinity Photo or similar software to correct tilted or rotated maps, you don't need to worry whether the operation changed the aspect ratio. Just make sure that the image is rectangular along the edges and you're good to go.
The screen is painted using a UTM projection, with true scale at center. The Mercator distortion is negligible since since the scale on-screen is limited to 1º of latitude. The map does not go above 88º of latitude (positive or negative) to avoid the Mercator singularity at the poles.
You may upload multiple maps that cover the same area. For example, you may have a 1:250,000 map for a region, and a 1:50,000 map that covers a specific city of that region. The app will display the maps in the expected fashion (the more detailed map is put "in front of" the others). The app always considers that "smaller" maps (that cover less latitude) are more detailed. The actual resolution of the map is not taken into consideration. This algorithm might fail for a complex patchwork of maps, but it works well for reasonable sets of charts.
The optional datum correction is specified in meters. For example, I have lots of charts in SAD69 datum. Since GPS coordinates are WGS84, the chart takes a translation of roughly 50 meters each. That is: the chart needs to be moved about 50m West and 50m North, and the location (that does not change) will seem to be moved 50m SE.
A hint that your chart needs a correction, is when location and targets are consistently a bit off on the chart, and the deviation is consistent on different charts of the same type (different cities etc.) so the possibility of a distortion on the chart image itself is ruled out. Upon estimation of deviation on multiple charts, you can even calculate DX and DY yourself. Note that DX comes first but it is related to longitude.
If location hasn't been exercised by any app for a long while, GPS data may not be available immediately. The app shows a "Wait" message until GPS is ready.
The iPhone location works fast, and normally there is no wait at all. In the other hand, the initial location estimation tends to have low accuracy, particularly the altitude takes a while to stabilize.
When the app is first run, it asks for permission to access location. If you don't give this permission, SimplestGPS will show the "Permission denied" message.
To fix this, go to iPhone Settings -> Privacy -> Location, and turn on the permission for SimplestGPS (every app that wants access to location is listed in this Settings screen.). Another option is to go to the app's settings, that has a shortcut to set location permission.
The app is offered "as is". There are no guarantees of precision, exactness, or aplicability to any given purpose. The developer has no responsability for any damages incurring from usage of this software.
The full source code can be found in GitHub.
Leave a comment comment in this page, or contact me by e-mail if you have any issues or feedback.