npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@zwaarcontrast/ol-graticule-mgrs

v2.1.2

Published

Military Grid Reference System (MGRS / NATO grid) for ol-graticule.

Downloads

310

Readme

@zwaarcontrast/ol-graticule-mgrs

Military Grid Reference System (MGRS / NATO grid) for @zwaarcontrast/ol-graticule.

Renders Grid Zone Designators (e.g. 32U) and 100 km squares (e.g. WL) worldwide, with cursor readout of the full MGRS reference. Handles the Norway and Svalbard zone exceptions and falls back to UPS (Universal Polar Stereographic) above 84°N and below 80°S.

MGRS grid zones over western Europe

Live demo: https://zwaarcontrast.nl/ol-graticule/ol-graticule-mgrs/

Install

npm install \
  @zwaarcontrast/ol-graticule \
  @zwaarcontrast/ol-graticule-projected \
  @zwaarcontrast/ol-graticule-mgrs \
  ol proj4

Peers: ol ^10, proj4 ^2.9, @zwaarcontrast/ol-graticule, @zwaarcontrast/ol-graticule-projected.

Usage

import { UniversalGraticule, CursorPositionControl } from '@zwaarcontrast/ol-graticule';
import { MgrsGridSystem } from '@zwaarcontrast/ol-graticule-mgrs';

const gridSystem = new MgrsGridSystem();

map.addLayer(new UniversalGraticule({ gridSystem, style: { edgeLabel: true } }));
map.addControl(new CursorPositionControl({ gridSystem }));

What you'll see:

  • Grid Zone Designators at low zoom, the 6° × 8° UTM zones with their letter band suffix (32U, 33T, etc.).
  • 100 km squares as you zoom in (WL, XM, …), with the column-letter set rotating per zone per the MGRS spec.
  • Norway / Svalbard exceptions drawn correctly (zone 32V is widened to cover western Norway; zones 31X / 33X / 35X / 37X cover Svalbard while 32X / 34X / 36X are absent).
  • UPS regions above 84°N and below 80°S, with their A/B/Y/Z grid letters and 100 km squares.

The CursorPositionControl reads out a full MGRS reference like 32U LB 12345 67890 (variable precision based on zoom).

Options

| Option | Type | Default | What it does | |---|---|---|---| | targetScreenPx | number | 100 | Desired minimum spacing (px) between major lines. Drives interval selection. | | densificationPoints | number | 100 | Points per grid line for curved rendering. |

Coordinate conversion helpers

For non-rendering use (e.g. showing an MGRS string in a popup), the package re-exports its low-level conversion utilities:

import { lonLatToMgrs, formatMgrs } from '@zwaarcontrast/ol-graticule-mgrs';

const ref = lonLatToMgrs([7.0, 48.5], 5);  // -> "32U LB 12345 67890"
formatMgrs(ref);                           // -> "32U LB 12345 67890"

Precision is the number of digits per axis: 0 (GZD only) through 5 (1 m precision).

Exports

Grid system

  • MgrsGridSystem, MgrsGridSystemOptions, plug into UniversalGraticule / CursorPositionControl.
  • MgrsIntervals, the spacing strategy used internally (re-export).

Coordinate conversion

  • lonLatToMgrs(lonLat, precision), [lon, lat] → MGRS string.
  • lonLatToMgrsParts(lonLat), structured parts ({ zone, band, square, easting, northing }).
  • formatMgrs(ref, options?), pretty-print with spaces between groups.
  • lonLatToUtm, utmToLonLat, lonLatToUps, upsToLonLat, round-trip helpers between geographic and UTM/UPS coordinates.

Zone / band / square helpers

  • UTM: bandLetterFromLatitude, bandLatBounds, zoneBandLonBounds, zoneNumberFromLonLat, utmCrsCode, utmProj4, BAND_LETTERS.
  • 100 km squares: columnLetter, columnSetForZone, rowLetter, rowOffsetForZone, squareLetters.
  • UPS: upsColumnLetter, upsRowLetter, upsSquareLetters, upsZoneLetter, upsZoneLonLatBounds, upsCrsCode, upsProj4, upsIsNorth.
  • Iteration: iterateVisibleGzds, Gzd.

License

MIT.