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.

  4. Do you have maybe a similar app also for an Apple iPhone? Thanks!
    73 44 de HB9TZA Augusto

  5. Great job on the documentation! I came here to save the list of targets.

    It would be useful if the user could also share the target or position to clipboard. Just the coordinates separated with a comma is all. We're hams, we can figure it out from there.

    1. If you make a long press at the bottom of the screen, where your current position is, it will be copied to the clipboard.


  6. Paul Miller, W5RESMay 24, 2020 at 8:02 PM

    Great app. The location information seems very accurate. However, the elevation is typically 20 to 40 meters low here in DM65sb, at a correct elevation of approximately 5910 feet. Is there an issue with the baseline for elevation?

    1. No, there is no issues with elevation. It is just the GPS system, by the way it was designed, is not very precise calculating elevations.

  7. Thank you for the prompt reply. I have two other apps that give accurate elevation based on GPS signals. One is "My Elevation" and the other is "Sportactive". They give elevations usually within 5 feet of the correct value, so there must be some way to get more accuracy from GPS. But your app is great doing what it is designed for.

    1. Maybe those other apps apply corrections to the GPS readings, I don't know. HamGPS shows the data as they come out the GPS, no extra processing at all.

  8. Paul Miller, W5RESMay 26, 2020 at 6:49 PM

    I suspect that those other two apps use corrections from the Wide Area Augmentation System (WAAS), which I believe is generally available in the U.S. We have two controlled airports in my vicinity that probably use WAAS for precision GPS approaches. Your app is great as is.

    1. I agree wholeheartedly. The app is great AS IS!

  9. Elevation data is important for SOTA (Summits on the Air) I love this app but the inaccuracies in elevation data are problematic. Is there any effort to get more accurate elevation data?

    1. Elevation data is just what your GPS says. There is no way to improve it without improve the GPS itself.

      Anyway, GPS is not the best system for calculating elevation just by the way it works

  10. HamGPS is really excellent, and I thank you for making it available. I've got one request / suggestion if you are open to it.. the compass heading switches from magnetic to true, based on GPS lock, but doesn't identify which mode it's in currently. I'm unsure if the API provides that, but a visual indicator would be great.

    1. This behavior is determined by the "Use GPS bearing" option. Try to change it and see if which one of the two settings meets your taste.

  11. Miguel have you ever considered making this compatible with Android Auto.

    1. No, I haven't considered anything except the classic Android used by phones. Sorry.

  12. I just got the latest version 3.8 and I like the menu version of the sun and moon location. I cannot find it. It is a fantastic app. Thank you.

    1. Sun and moon are now under Satellites menu entry. You need at least one GPS fix to see them.

  13. Matthias Hornsteiner, DG4MHMNovember 6, 2023 at 12:22 AM

    The issues with the inaccurate elevation data have to do with the fact that GPS refers to a reference ellipsoid and not to the geoid itself. The difference between both is called geoid undulation and can reach values up to some 100 m. Would it be possible to add a correction term in the app that is considering the geoid undulation? However, the user should select the value by himself because it shows a complicated distribution over the planet and cannot be calculated by a simple equation. I could provide a table containing geoid undulation data for whole Europe (grid spacing 1° x 1° or 10´ x 15´, respectively) in case that it is interesting for the users.

    1. Thank you for the offer, but considering the principal use of HamGPS is the beaming of antennas I do not consider any correction to the GPS measured altitude over sea level in the near future.