Azimuthal Projections Info

Example azimuthal map
Azimuthal projection from ARRL headquarters

This all started when I was interested in calculating the distance and bearing between amateur radio stations. I found this reference on calculating the great circle distance and bearing. Ultimately, this interest led to a web form for producing azimuthal maps.

For those who never heard of an azimuthal map, it is a special kind of map that prioritizes correctly showing the great circle distance and bearing from the center reference point. Azimuthal maps are particularly useful for ham radio operators with a directional antenna. For example, if you’re in Connecticut and you want to talk with someone in Cameroon (Africa), the azimuthal map will tell you to point your antenna to a bearing of 90° on a compass (technically you also much adjust for the difference between magnetic north and true north).

It occurred to me that this the bearing and distance calculation was the fundamental tool for making an azimuthal projection. All I needed was a database of land and political boundaries expressed in latitude/longitude pairs.

The azimuthal project is always made from a particular reference point on the globe, and I can convert the points in the  land and political boundary database into bearing and distance using the great circle calculations. This gives me a collection of points in polar coordinates (r, Θ) which is what I need for the azimuthal projection.

For the land and political boundary information, I used the database from the CIA World Databank II; however, it required some massaging. First it was too detailed, and I had to filter the data to an appropriate resolution. Next, I wanted land masses and water bodies to be represented by closed paths. The CIA World Databank II is a collection of unconnected paths, so I had to write a program to patch them together and reorder the points to be clockwise. Having closed paths of points ordered in clockwise orders is necessary to have water and land colored differently. Lastly, I had to identify which closed paths represent land and which represent water. Unfortunately, this work is incomplete. You’ll notice some lakes that aren’t colored blue.

Initially, my Ruby program was generating raw PostScript. However, I recognized that it would be easier for people to use if it generated a PDF.  Rather than using a Postscript to PDF convertor, I changed to generating PDFs directly using the Ruby PDF::Writer. By using PostScript or PDF, I get vector graphic output that is scalable from small to very large sizes without having to make a huge raster graphic files.  There is a limit to the resolution of the continent & political outline data, so at very large sizes, the outlines may not appear smooth.

Ultimately, I used the great circle distance formula from Wikipedia. According the article, it’s accurate for both long and short distances.

The hardest part of the whole project was getting the water blue. There are still some maps where the program gets it wrong, and you’ll see weird coloring. Things tend to go wrong when the reference point is inside a particular small region of land or water. In these cases, the floating  point accuracy seems to cause the colors approach to fail.

My plans for future improvements include:

  • add small tables of bearing & distance for important world cities around the margins
  • add US and world cities to the map (particularly for area map)
  • adjusting political boundaries and labels to be more accurate
  • adding more views to allow people to report lakes that aren’t colored correctly

355 thoughts on “Azimuthal Projections Info”

  1. Hoping to make a map centered on my location, but apparently your server cannot be found… It is 1/3/2021

  2. Hi Tom…
    I tried several times using this string: 33° 41′ 14″ N, 117° 49′ 33″ W
    Kept getting “Internal Server Error”. Also tried different sizes, with the same result.
    Thanks for providing such a nice service.

    Jon KA6MOK

      1. Ah, that works. I guess you can’t use N/S or E/W to indicate + or – anymore? Good to see it’s working otherwise.

        Thanks again!

      2. Oops.. re read the instructions, and it was probably my formatting, the page won’t parse the degree, minute, second characters. right? Anyway, yet another lesson in RTFM… 😉

  3. This is an excellent resource! Something I wish it had was an option to fill in Maidenhead grid squares with either two or four places (e.g. CM or CM86, depending on map resolution)

  4. Thank you for this! I needed to calculate the angle between two locations when drawn on a polar azimuthal equidistant map, and your tool allowed me to calculate it real easy.
    One question: would you have similar software for maps in other polar azimuthal projections like stereographic and gnomonic?

  5. HI,
    can You add the equator line the see the part of the other hemisphere and choose it with a flag ?
    Anyway great app.
    73 de ik8udd, Ermanno

  6. Hi,
    Many thanks for this great tool.

    If I understood it correctly , here is the place to report bugs etc 🙂

    I have a remark/bug and a little wish 🙂

    Remark:
    When I generate a map with for example 1500km from JN39 I have all continental Europes countrys in blue and the U.K. & Ireland in white. So it takes in count Brexit 😉

    little wish: Ability to generate Great circle maps with 4 char locators written on it for VHF / UHF work 🙂

    Many thanks

    Regards

    Felix

    1. I never found a bullet proof way to see if the center was enclosed in land or not. In most cases, I was able to fix the blue by using a nearby location or different distance. You can also turn off the blue.

  7. Hi Tom,

    I really enjoy using your Azimuthal maps and find it helpful. I was wondering for a future feature if you could plot “real time” MUF as seen at https://prop.kc2g.com/ but overlaid onto the Azimuthal data for a selected location. It would let you see in real time if propagation is likely open between the selected location and any place in the world easily.

    Thanks again!
    NT6H

  8. Bug report: When I use the parameter: Center: 22°18’0″N 114°0’0″E Radius: 10000 km to generate the map, the part from France to Greenland become bugged with national and land boundary broken.

  9. In addition to the previous reported problem, Fiji is also bugged in multiple map different maps that show it, including the map of Center: 22°18’0″N 114°0’0″E Radius: 10000 km

    1. Yes, bad things happen when there is a small island on the other side of the world from the center. Small islands are defined by very few points, and some of the approximate methods used in the map generation fail. You can often resolve the problem by moving your center a little.

      1. I think the problem with Fiji is not merely because of small island. Instead, it seems to me there are some islands near Fiji that crosses the 180 degree longitude, and isn’t handled correctly, causing and abnormal white quadishape around the area.

  10. In addition, there are problem with map data, like the map didn’t show the name of Hong Kong when click showing city name, but instead show “Xianggangdao”, and it displayed “Macao, China” as country name instead, while it didn’t display the name of Taiwan, and for the Taiwan city of Taipei and Kaohsiung, it also spelled their name as Taibei and Gaosyong using less common way of transliteration
    The map have also missed the boundary between Koreas and the boundary between Russia and Kazakhstan, Ukraine, Belarus, Baltic countries, Greogia, Armenia, and Azerbaijan, as well as border between Israel, Jordan, Lebanon, Egypt. The map also missed border between Saudi Arabia, UAE, Oman, Yemen, and Bahrain, with Yemen’s label also disappeared. Border between Somalia and Ethiopia is also partially missing. And there is a strange gap between the border of Iraq and Saudi Arabia, near Kuwait.
    The map also missed the label for “Pyongyang” and other North Korean cities, with Nampo being name of the only one being shown. The map also missed any city in Laos.
    The map labelled Northern Mariana but missed Guam. It also shortened the name of Federation of Micronesia into Micronesia which IMO shouldn’t happen because Micronesia is also the name of the bigger region it’s in.
    It displayed Australian capital as “Canberra-Queanbeyan (ACT-NSW)” which I am not sure what it mean. The map also missed New Zealand capital.
    South Sudan is missing from the map together with their cities.
    National label for Singapore is also missing.
    Anchorage in Alaska is being shown as “Anchorage municipality which is quite redundant.

    1. The sources used for land and country borders are old. It has many flaws are you point out.

      I have a new program based on another more recent database, but I haven’t had time to make it robust enough for deployment via WWW.

    1. Load PDF in Inkscape, use the export PNG feature to make a PNG bitmap at the desired resolution. The GIMP, can convert the PNG into a JPEG if that’s desired. On Linux, there are lots of other tools that can convert a PDF to JPEG.

  11. Feature Request: It would be nice, if instead of generating the map on a single A0/A2/A4 paper, it can also generate the map and cut it up into 2×2/3×3/4×4 pieces of A4 paper in the PDF, with an additional index page showing their order.

  12. Another feature request: Add blue marble satellite photo, or topographical map, as optional map layer to the generation product, similar to gcmap dot com’s option

  13. Hi Tom,
    this is a great, very useful tool. I generated a map for VHF/UHF contest use around my locator using radius 1.200 or 1.600km. Would it be possible, not to have only Maidenhead greater fields but also squares (00..99) ? E.g. with thin red lines and numbers ?
    I would really apriciate such a feature.
    vy 73 de Rolf

    1. If you would like to edit the program to add this capability, I can give you access to the code and provide the outline data.

  14. How do I send you an azimuthal map that shows the center of a circle that just touches 3 extreme points on the coasts of the Lower 48, the smallest circle that surrounds all territory of the Lower 48?

Leave a Reply to Steve Cancel reply

Your email address will not be published. Required fields are marked *