dms-conversion

A JavaScript library for converting between decimal degrees and degrees, minutes, and seconds (DMS).

Usage no npm install needed!

<script type="module">
  import dmsConversion from 'https://cdn.skypack.dev/dms-conversion';
</script>

README

dms.js

Build Status

A JavaScript library for converting between decimal degrees and degrees, minutes, and seconds (DMS).

Installation

$ npm install dms-conversion

or

$ yarn add dms-conversion

Example

TypeScript example (from Jasmine test)

import DmsCoordinates, { parseDms } from "../dms";

describe("DmsCoordinates", () => {
    const long = -122.902336120571;
    const lat = 46.9845854731319;

    it(`(${lat}, ${long}) coordinates should be ~ 46°59′5″ N, 122°54′8″ W`, () => {
        const dmsCoords = new DmsCoordinates(lat, long);
        expect(dmsCoords instanceof DmsCoordinates).toBe(true);

        const {longitude, latitude} = dmsCoords.dmsArrays;

        let [d, m, s, nsew] = longitude;
        expect(d).toBe(122);
        expect(m).toBe(54);
        expect(Math.round(s)).toBe(8);
        expect(nsew).toBe("W");

        [d, m, s, nsew] = latitude;

        expect(d).toBe(46);
        expect(m).toBe(59);
        expect(Math.round(s)).toBe(5);
        expect(nsew).toBe("N");

        expect(dmsCoords.toString()).toMatch(/46°59′4.\d+″ N, 122°54′8.\d+″ W/i);
    });

    it("Regexp should work", () => {
        const v = ["46°59′5″ N", "122°54′8″ W"];
        v.forEach((s) =>
            expect(s.match(DmsCoordinates.dmsRe)).toBeTruthy(true)
        );
        const [x, y] = v.map(parseDms);
        expect(typeof x).toEqual("number");
        expect(typeof y).toEqual("number");
    });

    it("Invalid numbers should throw exception", () => {
        const x = parseDms("");
        expect(isNaN(x)).toBe(true);
        expect(() => {
            const dmsc = new DmsCoordinates(lat, x);
        }).toThrowError(RangeError);
        expect(() => {
            const dmsc = new DmsCoordinates("this should fail" as any, long);
        }).toThrowError(TypeError);

    });
});

Alternatives

nerik/formatcoords