geoprimsField-grade geospatial math

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

3

Drew 3 rings around the point, each true on the ellipsoid.

Each ring
RadiusArea insidePole insideCrosses the antimeridian
10.000 NM1077.1788 km2noneno
25.000 NM6732.3426 km2noneno
50.000 NM26929.016 km2noneno
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?

Your values

Showing an example. Change anything.
More options 1
Run many at once from a CSV

Loading…

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

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