Range rings
Geodesic circles at one or more distances around a point, drawn true on the ellipsoid, with their areas, and a GeoJSON file cut correctly at the antimeridian and around a pole.
Planning and education aid. Not for primary navigation. Full disclaimer
A published result changed on 2026-09-23: Promoting this tool to stable removed EXPERIMENTAL_TOOL from its warnings, which moved POLE_ENCLOSED from index 1 to index 0 and broke v008, which pinned the index. Nothing computed changed. v008 is superseded by v018, which names the warning by its code with the meta.warnings.*.code form the runner supports, so no warning sorting above it can shift it again -- the same fix time.scale.gps-week v007 took. Changelog
Drew 3 rings around the point, each true on the ellipsoid.
| Radius | Area inside | Pole inside | Crosses the antimeridian |
|---|---|---|---|
| 10.000 NM | 1077.1788 km2 | none | no |
| 25.000 NM | 6732.3426 km2 | none | no |
| 50.000 NM | 26929.016 km2 | none | no |
- File name
Provenance
- Computed by
- navigation.route.range-rings 1.0.1, core 0.1.0
- Model
- Each ring's points by the geodesic direct problem at equal azimuth steps from the center (Karney 2013), counterclockwise; area by Karney's geodesic polygon area. The GeoJSON splits a ring that crosses the antimeridian into a MultiPolygon, and turns a ring around a pole into a polygon that runs along ±180° to the pole, as RFC 7946 §3.1.9 asks
- Accuracy
- Points exact to the geodesic; with the default count each chord sags under 0.025% of the radius (or 0.125 m), inside the 0.1% canvas rule
- Notes
- None
- Cites
- Karney, C. F. F., Journal of Geodesy, Algorithms for geodesics; IETF RFC 7946, The GeoJSON Format
Something look off?
How we got thisFormula, worked example, sources, and proof
Model: Each ring's points by the geodesic direct problem at equal azimuth steps from the center (Karney 2013), counterclockwise; area by Karney's geodesic polygon area. The GeoJSON splits a ring that crosses the antimeridian into a MultiPolygon, and turns a ring around a pole into a polygon that runs along ±180° to the pole, as RFC 7946 §3.1.9 asks
Accuracy: Points exact to the geodesic; with the default count each chord sags under 0.025% of the radius (or 0.125 m), inside the 0.1% canvas rule
When to use this: Use this to draw circles of true ground distance around a point -- a fuel radius, a radio horizon, a search area, a buffer zone -- as GeoJSON you can put straight on a map. Every vertex is exactly the distance you asked for, at any latitude.
Limitations: A ring of constant ground distance is not a circle on a map, and drawing one as a map circle is the error this replaces: at high latitude the two are wildly different. The ring is a polygon, so the boundary between vertices is a chord rather than an arc, sagging 0.024% of the radius below the true circle at the default point count and giving an area slightly under the true one; more points reduce it as one over n squared. A ring that encloses a pole or crosses the antimeridian says so in a warning, because both need care in whatever draws them next.
Worked example: 10, 25, and 50 NM around Denver International. Source: add-navigation-and-geometry range rings.
You enter
- Center latitude
- 39.8617 deg
- Center longitude
- -104.6731 deg
- Radii
- 10 NM 25 NM 50 NM
You get
- Rings
- 3
- File name
- range-rings.geojson
- Media type
- application/geo+json
- GeoJSON
- {"type":"FeatureCollection","features":[{"type":"Feature","properties":{"radius_m":18520,"center":[-104.6731,39.8617]},"geometry":{"type":"Polygon","coordinates":[[[-104.6731,40.0284964],[-104.6827652,40.0283304],[-104.692411,40.0278328],[-104.7020183,40.0270046],[-104.7115677,40.0258474],[-104.7210402,40.0243635],[-104.7304168,40.0225559],[-104.7396788,40.0204283],[-104.7488078,40.0179848],[-104.7577854,40.0152304],[-104.7665937,40.0121705],[-104.7752151,40.0088113],[-104.7836326,40.0051596],[-104.7918292,40.0012225],[-104.7997886,39.9970079],[-104.807495,39.9925243],[-104.8149331,39.9877807],[-104.822088,39.9827864],[-104.8289456,39.9775515],[-104.8354922,39.9720864],[-104.8417148,39.966402],[-104.8476011,39.9605097],[-104.8531394,39.9544211],[-104.8583189,39.9481485],[-104.8631292,39.9417043],[-104.867561,39.9351015],[-104.8716054,39.928353],[-104.8752546,39.9214724],[-104.8785013,39.9144734],[-104.8813394,39.9073699],[-104.8837631,39.900176],[-104.885768,39.892906],[-104.88735,39.8855744],[-104.8885062,39.8781958],[-104.8892344,39.8707849],[-104.8895334,39.8633563],[-104.8894026,39.8559247],[-104.8888425,39.8485051],[-104.8878543,39.841112],[-104.8864401,39.8337602],[-104.8846029,39.8264642],[-104.8823464,39.8192385],[-104.8796752,39.8120974],[-104.8765948,39.805055],[-104.8731114,39.7981254],[-104.8692319,39.7913223],[-104.8649643,39.784659],[-104.860317,39.7781488],[-104.8552993,39.7718046],[-104.8499213,39.765639],[-104.8441938,39.759664],[-104.838128,39.7538916],[-104.8317361,39.7483331],[-104.8250308,39.7429995],[-104.8180254,39.7379014],[-104.8107339,39.7330488],[-104.8031706,39.7284513],[-104.7953505,39.724118],[-104.7872892,39.7200575],[-104.7790025,39.7162777],[-104.7705069,39.7127861],[-104.7618192,39.7095896],[-104.7529565,39.7066945],[-104.7439363,39.7041065],[-104.7347764,39.7018308],[-104.7254949,39.6998717],[-104.7161102,39.6982333],[-104.7066406,39.6969186],[-104.6971049,39.6959303],[-104.6875219,39.6952704],[-104.6779105,39.6949401],[-104.6682895,39.6949401],[-104.6586781,39.6952704],[-104.6490951,39.6959303],[-104.6395594,39.6969186],[-104.6300898,39.6982333],[-104.6207051,39.6998717],[-104.6114236,39.7018308],[-104.6022637,39.7041065],[-104.5932435,39.7066945],[-104.5843808,39.7095896],[-104.5756931,39.7127861],[-104.5671975,39.7162777],[-104.5589108,39.7200575],[-104.5508495,39.724118],[-104.5430294,39.7284513],[-104.5354661,39.7330488],[-104.5281746,39.7379014],[-104.5211692,39.7429995],[-104.5144639,39.7483331],[-104.508072,39.7538916],[-104.5020062,39.759664],[-104.4962787,39.765639],[-104.4909007,39.7718046],[-104.485883,39.7781488],[-104.4812357,39.784659],[-104.4769681,39.7913223],[-104.4730886,39.7981254],[-104.4696052,39.805055],[-104.4665248,39.8120974],[-104.4638536,39.8192385],[-104.4615971,39.8264642],[-104.4597599,39.8337602],[-104.4583457,39.841112],[-104.4573575,39.8485051],[-104.4567974,39.8559247],[-104.4566666,39.8633563],[-104.4569656,39.8707849],[-104.4576938,39.8781958],[-104.45885,39.8855744],[-104.460432,39.892906],[-104.4624369,39.900176],[-104.4648606,39.9073699],[-104.4676987,39.9144734],[-104.4709454,39.9214724],[-104.4745946,39.928353],[-104.478639,39.9351015],[-104.4830708,39.9417043],[-104.4878811,39.9481485],[-104.4930606,39.9544211],[-104.4985989,39.9605097],[-104.5044852,39.966402],[-104.5107078,39.9720864],[-104.5172544,39.9775515],[-104.524112,39.9827864],[-104.5312669,39.9877807],[-104.538705,39.9925243],[-104.5464114,39.9970079],[-104.5543708,40.0012225],[-104.5625674,40.0051596],[-104.5709849,40.0088113],[-104.5796063,40.0121705],[-104.5884146,40.0152304],[-104.5973922,40.0179848],[-104.6065212,40.0204283],[-104.6157832,40.0225559],[-104.6251598,40.0243635],[-104.6346323,40.0258474],[-104.6441817,40.0270046],[-104.653789,40.0278328],[-104.6634348,40.0283304],[-104.6731,40.0284964]]]}},{"type":"Feature","properties":{"radius_m":46300,"center":[-104.6731,39.8617]},"geometry":{"type":"Polygon","coordinates":[[[-104.6731,40.2786819],[-104.6973515,40.2782655],[-104.721554,40.277017],[-104.7456586,40.2749389],[-104.7696164,40.2720355],[-104.7933791,40.2683127],[-104.8168988,40.2637779],[-104.8401279,40.2584403],[-104.8630195,40.2523107],[-104.8855276,40.2454016],[-104.9076068,40.2377267],[-104.9292126,40.2293017],[-104.9503018,40.2201434],[-104.9708318,40.2102705],[-104.9907617,40.1997028],[-105.0100516,40.1884616],[-105.0286628,40.1765695],[-105.0465583,40.1640505],[-105.0637025,40.1509297],[-105.0800614,40.1372336],[-105.0956025,40.1229897],[-105.1102952,40.1082266],[-105.1241105,40.0929739],[-105.1370214,40.0772621],[-105.1490025,40.061123],[-105.1600306,40.0445886],[-105.1700842,40.0276922],[-105.1791439,40.0104675],[-105.1871926,39.992949],[-105.1942147,39.9751716],[-105.2001971,39.9571708],[-105.2051288,39.9389826],[-105.2090007,39.9206431],[-105.211806,39.902189],[-105.2135399,39.8836568],[-105.2141998,39.8650834],[-105.2137854,39.8465058],[-105.2122983,39.8279608],[-105.2097423,39.8094851],[-105.2061234,39.7911154],[-105.2014495,39.7728881],[-105.1957307,39.7548392],[-105.1889792,39.7370044],[-105.1812091,39.719419],[-105.1724364,39.7021175],[-105.1626793,39.6851343],[-105.1519576,39.6685026],[-105.1402932,39.6522554],[-105.1277097,39.6364246],[-105.1142324,39.6210412],[-105.0998884,39.6061356],[-105.0847064,39.5917371],[-105.0687168,39.5778738],[-105.0519513,39.5645731],[-105.0344433,39.5518609],[-105.0162275,39.5397622],[-104.9973399,39.5283007],[-104.9778178,39.5174989],[-104.9576996,39.5073778],[-104.937025,39.4979572],[-104.9158346,39.4892557],[-104.89417,39.4812901],[-104.8720736,39.4740761],[-104.8495888,39.4676278],[-104.8267594,39.4619576],[-104.8036303,39.4570768],[-104.7802464,39.4529949],[-104.7566536,39.4497197],[-104.7328978,39.4472577],[-104.7090254,39.4456137],[-104.6850829,39.4447909],[-104.6611171,39.4447909],[-104.6371746,39.4456137],[-104.6133022,39.4472577],[-104.5895464,39.4497197],[-104.5659536,39.4529949],[-104.5425697,39.4570768],[-104.5194406,39.4619576],[-104.4966112,39.4676278],[-104.4741264,39.4740761],[-104.45203,39.4812901],[-104.4303654,39.4892557],[-104.409175,39.4979572],[-104.3885004,39.5073778],[-104.3683822,39.5174989],[-104.3488601,39.5283007],[-104.3299725,39.5397622],[-104.3117567,39.5518609],[-104.2942487,39.5645731],[-104.2774832,39.5778738],[-104.2614936,39.5917371],[-104.2463116,39.6061356],[-104.2319676,39.6210412],[-104.2184903,39.6364246],[-104.2059068,39.6522554],[-104.1942424,39.6685026],[-104.1835207,39.6851343],[-104.1737636,39.7021175],[-104.1649909,39.719419],[-104.1572208,39.7370044],[-104.1504693,39.7548392],[-104.1447505,39.7728881],[-104.1400766,39.7911154],[-104.1364577,39.8094851],[-104.1339017,39.8279608],[-104.1324146,39.8465058],[-104.1320002,39.8650834],[-104.1326601,39.8836568],[-104.134394,39.902189],[-104.1371993,39.9206431],[-104.1410712,39.9389826],[-104.1460029,39.9571708],[-104.1519853,39.9751716],[-104.1590074,39.992949],[-104.1670561,40.0104675],[-104.1761158,40.0276922],[-104.1861694,40.0445886],[-104.1971975,40.061123],[-104.2091786,40.0772621],[-104.2220895,40.0929739],[-104.2359048,40.1082266],[-104.2505975,40.1229897],[-104.2661386,40.1372336],[-104.2824975,40.1509297],[-104.2996417,40.1640505],[-104.3175372,40.1765695],[-104.3361484,40.1884616],[-104.3554383,40.1997028],[-104.3753682,40.2102705],[-104.3958982,40.2201434],[-104.4169874,40.2293017],[-104.4385932,40.2377267],[-104.4606724,40.2454016],[-104.4831805,40.2523107],[-104.5060721,40.2584403],[-104.5293012,40.2637779],[-104.5528209,40.2683127],[-104.5765836,40.2720355],[-104.6005414,40.2749389],[-104.624646,40.277017],[-104.6488485,40.2782655],[-104.6731,40.2786819]]]}},{"type":"Feature","properties":{"radius_m":92600,"center":[-104.6731,39.8617]},"geometry":{"type":"Polygon","coordinates":[[[-104.6731,40.6956337],[-104.7219026,40.6947958],[-104.7706046,40.6922835],[-104.8191058,40.6881022],[-104.8673064,40.6822604],[-104.9151072,40.6747702],[-104.96241,40.665647],[-105.0091177,40.6549095],[-105.0551345,40.6425798],[-105.1003663,40.6286833],[-105.1447207,40.6132485],[-105.1881072,40.5963071],[-105.2304378,40.5778938],[-105.2716264,40.5580464],[-105.3115898,40.5368055],[-105.3502475,40.5142146],[-105.3875218,40.4903198],[-105.4233381,40.4651699],[-105.4576251,40.4388163],[-105.4903148,40.4113125],[-105.5213426,40.3827145],[-105.5506476,40.3530805],[-105.5781728,40.3224706],[-105.6038648,40.2909468],[-105.6276742,40.2585729],[-105.6495556,40.2254143],[-105.6694677,40.1915379],[-105.6873733,40.157012],[-105.7032397,40.1219061],[-105.7170379,40.0862906],[-105.7287437,40.050237],[-105.7383369,40.0138174],[-105.7458018,39.9771048],[-105.7511268,39.9401724],[-105.7543048,39.9030937],[-105.755333,39.8659425],[-105.7542127,39.8287928],[-105.7509498,39.791718],[-105.745554,39.7547917],[-105.7380395,39.7180869],[-105.7284245,39.6816759],[-105.7167311,39.6456306],[-105.7029856,39.610022],[-105.6872181,39.5749199],[-105.6694625,39.5403932],[-105.6497567,39.5065096],[-105.6281418,39.4733354],[-105.6046628,39.4409354],[-105.579368,39.4093727],[-105.5523091,39.378709],[-105.5235409,39.3490037],[-105.4931216,39.3203148],[-105.4611121,39.2926979],[-105.4275761,39.2662064],[-105.3925805,39.2408918],[-105.3561942,39.2168029],[-105.318489,39.1939865],[-105.2795389,39.1724864],[-105.2394201,39.1523442],[-105.1982108,39.1335987],[-105.1559911,39.116286],[-105.112843,39.1004395],[-105.06885,39.0860896],[-105.024097,39.0732639],[-104.9786703,39.061987],[-104.9326575,39.0522806],[-104.886147,39.0441633],[-104.8392281,39.0376507],[-104.7919908,39.0327554],[-104.7445257,39.0294865],[-104.6969238,39.0278506],[-104.6492762,39.0278506],[-104.6016743,39.0294865],[-104.5542092,39.0327554],[-104.5069719,39.0376507],[-104.460053,39.0441633],[-104.4135425,39.0522806],[-104.3675297,39.061987],[-104.322103,39.0732639],[-104.27735,39.0860896],[-104.233357,39.1004395],[-104.1902089,39.116286],[-104.1479892,39.1335987],[-104.1067799,39.1523442],[-104.0666611,39.1724864],[-104.027711,39.1939865],[-103.9900058,39.2168029],[-103.9536195,39.2408918],[-103.9186239,39.2662064],[-103.8850879,39.2926979],[-103.8530784,39.3203148],[-103.8226591,39.3490037],[-103.7938909,39.378709],[-103.766832,39.4093727],[-103.7415372,39.4409354],[-103.7180582,39.4733354],[-103.6964433,39.5065096],[-103.6767375,39.5403932],[-103.6589819,39.5749199],[-103.6432144,39.610022],[-103.6294689,39.6456306],[-103.6177755,39.6816759],[-103.6081605,39.7180869],[-103.600646,39.7547917],[-103.5952502,39.791718],[-103.5919873,39.8287928],[-103.590867,39.8659425],[-103.5918952,39.9030937],[-103.5950732,39.9401724],[-103.6003982,39.9771048],[-103.6078631,40.0138174],[-103.6174563,40.050237],[-103.6291621,40.0862906],[-103.6429603,40.1219061],[-103.6588267,40.157012],[-103.6767323,40.1915379],[-103.6966444,40.2254143],[-103.7185258,40.2585729],[-103.7423352,40.2909468],[-103.7680272,40.3224706],[-103.7955524,40.3530805],[-103.8248574,40.3827145],[-103.8558852,40.4113125],[-103.8885749,40.4388163],[-103.9228619,40.4651699],[-103.9586782,40.4903198],[-103.9959525,40.5142146],[-104.0346102,40.5368055],[-104.0745736,40.5580464],[-104.1157622,40.5778938],[-104.1580928,40.5963071],[-104.2014793,40.6132485],[-104.2458337,40.6286833],[-104.2910655,40.6425798],[-104.3370823,40.6549095],[-104.38379,40.665647],[-104.4310928,40.6747702],[-104.4788936,40.6822604],[-104.5270942,40.6881022],[-104.5755954,40.6922835],[-104.6242974,40.6947958],[-104.6731,40.6956337]]]}}]}
Review: Not yet independently reviewed by a geodesist.
Last verified: 2026-09-18, when a maintainer last confirmed this tool's sources at the issuer. See the sources ledger.
Status: version 1.0.1, core 0.1.0. See this tool in the verification report.
Changes
- 2026-09-23, fixed: Short distances lost their meaning: a 0.859 m geodesic showed as 0.001 km. Distances in the navigation tools (version 1.0.1) still show to the meter in kilometers, but a short one now keeps three significant digits, down to the millimeter, so it shows as 0.000859 km. Differences such as the rhumb line's extra distance keep fixed decimals. Values are unchanged. Changelog
- 2026-09-23, result change: Promoting this tool to stable removed EXPERIMENTAL_TOOL from its warnings, which moved POLE_ENCLOSED from index 1 to index 0 and broke v008, which pinned the index. Nothing computed changed. v008 is superseded by v018, which names the warning by its code with the meta.warnings.*.code form the runner supports, so no warning sorting above it can shift it again -- the same fix time.scale.gps-week v007 took. Changelog
Checked against: 21 golden test vectors (download the test vectors, each with its source and tolerance). See how results are checked and every source.
Sources
- Algorithms for geodesics, Karney, C. F. F., Journal of Geodesy, Vol. 87, No. 1. pp. 43-55 (the direct problem; area of geodesic polygons, section 6).
- The GeoJSON Format, IETF RFC 7946, RFC 7946. Sections 3.1.6 (polygon rings counterclockwise) and 3.1.9 (cutting at the antimeridian).