# latlon-formatter

> A set of functions to format latitude and longitude angles

Latest version **0.3.0** (published 2017-12-14) · MIT license · 0 weekly downloads

## Install

```sh
npm install latlon-formatter
pnpm add latlon-formatter
yarn add latlon-formatter
bun add latlon-formatter
```

## Health

**Score 20/100 (F)** — status: abandoned.

Positive: esm support; no vulnerabilities.

Warnings: low downloads; no types; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.3.0 |
| Published | 2017-12-14 |
| First published | 2017-03-03 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | ESM + CommonJS |
| Dependencies | 1 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 1 |
| Author | Dmitriy Pushkov |
| Maintainers | ezze |
| Keywords | latitude, longitude, angle, format, formatter |

## Links

- npm: https://www.npmjs.com/package/latlon-formatter
- Repository: https://github.com/solarpatrol/latlon-formatter
- Homepage: https://github.com/solarpatrol/latlon-formatter#readme
- Issues: https://github.com/solarpatrol/latlon-formatter/issues
- npm.io page: https://npm.io/package/latlon-formatter

## Dependencies (1)

- [object-assign](https://npm.io/package/object-assign.md) ^4.1.1

## Alternatives

- [mobx-react](https://npm.io/package/mobx-react.md) — 2.8M weekly downloads
- [rc-tree](https://npm.io/package/rc-tree.md) — 2.6M weekly downloads
- [@react-oauth/google](https://npm.io/package/@react-oauth/google.md) — 1.3M weekly downloads
- [@wagmi/connectors](https://npm.io/package/@wagmi/connectors.md) — 877.0K weekly downloads
- [vee-validate](https://npm.io/package/vee-validate.md) — 836.4K weekly downloads

## Recent versions

- 0.3.0 (latest) — 2017-12-14
- 0.2.1 — 2017-03-03
- 0.2.0 — 2017-03-03
- 0.1.0 — 2017-03-03

## README

# latlon-formatter

[![NPM Version](https://badge.fury.io/js/latlon-formatter.svg)](https://badge.fury.io/js/latlon-formatter.svg)
[![Build Status](https://travis-ci.org/solarpatrol/latlon-formatter.svg?branch=develop)](https://travis-ci.org/solarpatrol/latlon-formatter)
[![Coverage Status](https://coveralls.io/repos/github/solarpatrol/latlon-formatter/badge.svg?branch=develop)](https://coveralls.io/github/solarpatrol/latlon-formatter?branch=develop)
[![Downloads/month](https://img.shields.io/npm/dm/latlon-formatter.svg?maxAge=86400)](https://www.npmjs.com/package/latlon-formatter)
[![Greenkeeper badge](https://badges.greenkeeper.io/solarpatrol/latlon-formatter.svg)](https://greenkeeper.io/)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)

A set of functions to format latitude and longitude angles.

## Installation

```bash
npm install latlon-formatter --save
```
    
## Usage

- ES6:

    ```javascript
    import { formatLatitude, formatLongitude } from 'latlon-formatter';
    const latitude = formatLatitude(Math.PI / 3); // => 60° 00′ 00″ N 
    const longitude = formatLongitude(-33.4, {
        degrees: true
    });   // => 034° 24′ 00″ W 
    ```

- require with Node.js:

    ```javascript
    var formatter = require('latlon-formatter');
    var latitude = formatter.latitude(Math.PI / 3); // => 60° 00′ 00″ N 
    var longitude = formatter.longitude(-33.4, {
        degrees: true
    });   // => 034° 24′ 00″ W
    ```

- in browser include `dist/latlon-formatter.js` or `dist/latlon-formatter.min.js` script:

    ```javascript
    var formatter = window.latlonFormatter;
    var latitude = formatter.latitude(Math.PI / 3); // => 60° 00′ 00″ N 
    var longitude = formatter.longitude(-33.4, {
        degrees: true
    });   // => 034° 24′ 00″ W
    ```
    
## Methods

- `latitude` or `formatLatitude` — format latitude angle.

    Arguments:
    
    - `value` — angle's value;
    - `options`:
        - `template` — custom template (optional, default — `{degree}° {prime}′ {doublePrime}″ {direction}`);
        - `degrees` — specifies whether `value` is in degrees or in radians (optional, default — `false`);
        - `fixedCount` — count of precision digits (optional, default — `null` leaving precision as is).

    Examples:

    ```javascript
    formatter.latitude(33.4); // => 34° 24′ 00″ N
    ```
    
    ```javascript
    formatter.latitude(-14.75, { degrees: true }); // => 14° 45′ 00″ S
    ```
    
    ```javascript
    formatter.latitude(-14.75, {
        template: '{negativeSign}{value}°',
        degrees: true,
        fixedCount: 1
    }); // => —14.8°
    ```
    
- `longitude` or `formatLongitude` — format longitude angle.

    Arguments:
    
    - `value` — angle's value;
    - `options`:
        - `template` — custom template (optional, default — `{degree}° {prime}′ {doublePrime}″ {direction}`);
        - `degrees` — specifies whether `value` is in degrees or in radians (optional, default — `false`);
        - `fixedCount` — count of precision digits (optional, default — `null` leaving precision as is).

    Examples:

    ```javascript
    formatter.longitude(33.4); // => 034° 24′ 00″ E
    ```
    
    ```javascript
    formatter.longitude(-14.75, { degrees: true }); // => 014° 45′ 00″ W
    ```
    
    ```javascript
    formatter.longitude(-14.75, {
        template: '{negativeSign}{value}°',
        degrees: true,
        fixedCount: 1
    }); // => —14.8°
    ```
    
- `angle` or `formatAngle` — format any custom angle.

    Arguments:
    
    - `value` — angle's value;
    - `options`:
        - `template` — custom template (optional, default — `{negativeSign}{value}°`);
        - `degrees` — specifies whether `value` is in degrees or in radians (optional, default — `false`);
        - `fixedCount` — count of precision digits (optional, default — `null` leaving precision as is);
        - `customTokens` — an object or a function returning an object of additional custom tokens used in `template`.
         
    Examples:
    
    ```javascript
    formatter.angle(3.4, {
        template: '{degree}° {prime}′ {doublePrime}″ {direction}',
        customTokens: f => {
            return {
                degree: (f.degrees < 10 ? '0' : '') + f.degree,
                direction: f.sign >= 0 ? 'N' : 'S'
            };
        }
    }); // => 03° 24′ 00″ N
    ```
        
## Template tokens
        
All three format methods (`latitude`, `longitude` and `angle`) have the following predefined template tokens:

- `value` — angle's absolute value with optional precision specified by `fixedCount` option;
- `degree` — absolute (two-digits and three-digits for `latitude` and `longitude` respectively) degree value;
- `prime` — absolute two-digits prime value;
- `doublePrime` — absolute two-digits double prime value;
- `sign` — value's sign:
    - `+` — positive value;
    - `—` — negative value;
    - empty — zero value;
- `negativeSign` — the same as `sign` except that it's empty for both zero and positive values.

`latitude` and `longitude` methods additionally have `direction` token:
- `N` — non-negative latitude;
- `S` — negative latitude;
- `E` — non-negative longitude;
- `W` — negative longitude.

Any custom additional tokens can be specified by `customTokens` option of `angle` method. 
                                        
## Building

In order to build library run:
                                          
    npm run build
    
## Testing
    
Run unit tests:
    
    npm test
    
Run tests with coverage:

    npm run test:coverage
    
In order to run tests with [Coveralls](http://coveralls.io) locally you have to provide `COVERALLS_REPO_TOKEN`:
        
    COVERALLS_REPO_TOKEN=<token> npm run test:coveralls
    
## Contributing
    
Before making a pull request, please, be sure that you start from `develop` branch.

## License

[MIT](LICENSE)

---
_Source: https://npm.io/package/latlon-formatter · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
