Basic GPS with extended Locator for Ham radio use

This program permits to you to know your current Maidenhead Locator with the aid of your GPS enabled Android device. It also show you the bearing and distance to a target, who can be set using a locator or using latitude / longitude. This function is useful to beam antennas to a distant location for example with a microwave station during a sked while portable.

It uses no network connection or fancy maps, so it can work even in remote locations.

You can get HamGPS at Google Play Store for free: HamGPS in Google Play Store.


Using HamGPS

Main screen

Just open the application and wait until your GPS gets position. Then, you will see something like this:

HamGPS main screen

There are four main areas in the main screen.

The first area is the text line at the top. It displays the current UTC or GPS datetime and the number of satellites used vs. the total number of satellites received.

The second area is the map area. This map mimics a compass. You can find text at its four corners. Current GPS error estimation at upper left corner. Current speed at lower left corner. Current bearing at lower right corner. In the upper right corner you can find some symbols: A white star (☆) means HamGPS is configured to keep the screen always on. A crossed circle (⊕) means compass rotation is disabled.

The third area is the signals bars area, displaying relative SNR received for each satellite.

The fourth area is the locator button. Displays your current location.

A touch over the map area will switch between 3D and flat view compass. A long press will enable the signals bars if there is enough room for the map. This is useful for small screen devices in landscape orientation.

Pressing over the locator button will cycle the format it shows your current location. A long press on it will copy your current location to the clipboard.

There is a menu in the main screen with these options:

Set target: Used to enter the coordinates of your target location, this is, the remote location you want to compute the bearing from your actual position.

Clear target: Clears the current target if any.

Add current target: Use this option to add the current target (the previously added with the Set target option) to your own personal list. A name for the target will be needed.

Add current position: Use this option to add your current position to your own personal list. A name for the current location will be needed.

Select target: Opens a new screen with all targets you have entered in your personal list so you can recover them in a easy and fast way. For more details see the Target list screen section.

Share position: Share your current position with other geographical apps.

Camera view: Opens a new screen with your camera view overlayed with targets, satellites, etc... For more details see the Camera view screen section.

Show astro data: Opens a new screen with current Sun, Moon and satellite information.

Show sensors: Opens a new screen with an overview of your device's sensors.

Settings: Opens a new screen with the application settings.

About: Displays the installed version of the application.

Target list

This screen is accessed from the menu in the main screen, under the Select target option. It contains a list of all the places you have stored using the options Add current target and Add current position in the main screen.

Just touch over an item to set as new target. A long press over the item will bring a menu with options to edit or delete the entry.

This screen has a menu with four options:

Export to file: Export the current list to the device's storage, usually the internal storage. The list will be saved with the name HamGPS-yyyy-mm-dd-hh-mm-ss.txt at the root directory, this is HamGPS-year-month-day-hour-minute-second dot txt.

Import from file: Imports the content of the selected file. This action will delete previous list contents.

Merge from file: The same as Import from file, but it does not delete the previous content; it will be merged with the file content. No duplicate checking will be preformed.

If your device runs Android 4.0, 4.1, 4.2 or 4.3 all these three actions will be performed with the file HamGPS.txt in the root of internal storage: no file chooser will appear.

In the list of saved targets, each target has its own context menu, accessed with a long press over it. The menu options are:

Share target: Share target's position to other geographical apps.

Edit name: Edit the name of the target

Edit locator: Edit the location of the target.

Delete entry: Remove entry from list.

Camera view

This screen is accessed from the menu in the main screen, under the Camera view option.

It displays live video from your camera with an overlay, displaying various things, like the satellites received by your GPS, your targets, cardinal points, a crosshair with information about where you are pointing at, and a helping arrow.

This screen is intended for precise pointing using visual references. All displayed items are configurable in the Settings screen.

Astro data

This screen is accessed from the menu in the main screen, under the Show astro data option.

It displays current azimuth and elevation for Sun, Moon, and all received satellites by your GPS, including the signal / noise ratio (SNR) and the kind of satellite:

    - GPS
    - EGNOS
    - WAAS
    - Beidou
    - etc


This screen is accessed from the menu in the main screen, under the Show sensors option. Displays the current values reported by your device sensor's and associated information, like manufacturer or current reading accuracy (if any). Current monitorized sensors are:

    - Battery
    - Accelerometer
    - Magnetometer
    - Luxometer
    - Barometer
    - Thermometer
    - Hygrometer


This screen is accessed from the menu in the main screen, under the Settings option. Contains different setting to suit HamGPS to your needs or taste. The options are:

HamGPS Settings

Keep screen on: Activate to keep the screen always on when you are using HamGPS.

Disable map bearing: Activate to disable the map bearing, this is, the map will be drawn flat with north always up.

Use GPS bearing: Use to draw the map according to GPS bearing instead compass bearing. You need to be on movement for this option works properly. Useful if compass readings are erratic, like for example inside a car. Enabling this option is mandatory if your device does not have accelerometer and / or magnetometer (compass).

Display GPS time instead of UTC: Display time from the GPS readings instead yours device's clock.

Display target name: Display target name instead of target locator in map and camera view.

Display all cardinal points: Display all cardinal points (N,S,E,W) in the map. Disable to display only north. Useful to reduce clutter on map.

Display GPS satellites: Display GPS satellites on map and camera view.

Display sun and moon: Display Sun and Moon on map and camera view.

Draw with day/night colors: Select the colors used to draw the map. Day colors (normal), night colors (dark), or automatic selection if Sun is above / below horizon at your location.

Share using standard Geo URI Schemes: Activate this option if sharing data with other applications does not work as expected. By default, data is exchanged using Google Maps own format, which woks on almost all applications, but not all of them. Try this option when sharing data with those other applications does not work.

Sensors settings

Magnetometer (compass) smoothness: slide to adjust compass movement to your taste.

Accelerometer smoothness: slide to adjust the accelerometer response to your taste.

Camera view settings

Display crosshair: Display a crosshair at the center of the camera view.

Display crosshair coordinates: If crosshair is enabled, display also where the crosshair (camera) is pointing at.

Display helping arrow: In the camera view, if a target is selected, displays a small green arrow to help you locate your target quickly.

Display all targets: In camera view, if no target is selected displays all items in your personal target list.

Units settings

Distance and speed units: Select units for speed and distance.

Altitude unit: Select units for altitude.

Temperature unit: Select units for temperature.

Compass considerations

HamGPS's weak point is your device's compass. It is as precise as your compass is. And your device's compass is easily influenced by external factors. So if you think the compass is acting erratically you should preform a compass calibration.

There are many different ways to calibrate your compass. Some of them works better than others in some devices so you need to find the one which works better for you.

 The official way according to Google to calibrate your compass is this one:

Doing this a few times should work. Another option is this one:

Usually you need to do that movement also few times, and should work fine. Every time the compass accuracy changes HamGPS will display a brief message on screen telling you the new accuracy. You can also use the Sensors screen to check your current compass accuracy and / or preform calibration.

But sometimes even after compass calibration and compass reporting high accuracy, it points wrong:

In this example you can see  how the Sun is a few degrees east of the point calculated by HamGPS. This happens when the compass is affected by nearby metallic objects. Even when the reported accuracy is high. Why? Because Android devices does not have a real compass. They have a magnetometer, and this magnetometer can read accurately distortions of the earths magnetic field, even the magnetic field created by other objects.

So, How to know if the compass bearing is really accurate?

As shown in the previous image you can check compass accuracy using the Sun or Moon in the camera view screen, but beware:

pointing your device to the Sun may damage the camera!

Better use the Moon. Alternatively you can also check the intensity of the magnetic field in the Sensors screen:

Natural magnetic field strength over earth surface varies from point to point around the globe, but it is approximately between 25 and 65 microteslas. So, if your reading is well above 65 microteslas your compass is being influenced by a nearby magnetic field and it is not reliable. Even if it reports high accuracy!.

Best results are obtained on the outside of buildings, in the middle of the field, far away from objects, like cars, fences, houses, windmills, etc, and of course avoid phone / tablet cases with magnetic closures!

Known issues

- On some devices the GPS never gets fix, showing an endless "Waiting for GPS fix" message. This problem has been solved in version 3.3

Privacy policy

HamGPS does not recollect or send any kind of data, but it need to access to some privileged features in the Android platform to work. These features are:

1. GPS

HamGPS needs to access the GPS to get your actual position so it can show your locator and bearing and distances to other points. No other use of your GPS position is done.

2. Camera

HamGPS only uses your camera to display an augmented reality based environment, showing you your targets, satellites, sun and moon around you for easy pointing. No images are stored or sent to anywhere.

3. SD Card

HamGPS writes a single text file named HamGPS + creation datetime in the root directory of your device\'s storage to save a list of your favorite targets only if user wants it. No other use of the device storage is done.

Finally, HamGPS does not use any network service or connection, neither has or asks permission for that, so HamGPS has no means to leak any of your precious data.

Miguel A. Vallejo, EA4EOZ


  1. Bonjour Miguel et bravo pour ce développement. C'est génial et très utile pour la recherche de radio sondes. Cordiales 73's Jean-Luc F1GPA

  2. Great app.
    Could you add geo:URI intent to make possible share waypoint/destination from other app (ie APRS DROID)?

    73! Tom SP9UOB.

  3. Hi Miguel

    Is the time display in HamGPS obtained from GPS time or on the phone's time (from the cellular network) ?

    Steve VE3SMA

    1. Currently it uses phone's clock. Will be switchable in a next release.