# standardize-geolocation

> takes geolocations of different formats and outputs a standardized version

Latest version **4.0.1** (published 2021-11-11) · MIT license · 0 weekly downloads

## Install

```sh
npm install standardize-geolocation
pnpm add standardize-geolocation
yarn add standardize-geolocation
bun add standardize-geolocation
```

## Health

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

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 4.0.1 |
| Published | 2021-11-11 |
| First published | 2016-12-08 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=4.0.0 |
| Dependencies | 0 |
| Unpacked size | 35.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 2 |
| Author | Blake Knight |
| Maintainers | blakek |
| Keywords | geolocation, standardize, clean, longitude, latitude, lat, long, lon, tested |

## Links

- npm: https://www.npmjs.com/package/standardize-geolocation
- Repository: https://github.com/blakek/standardize-geolocation
- npm.io page: https://npm.io/package/standardize-geolocation

## Alternatives

- [messageformat](https://npm.io/package/messageformat.md) — 329.7K weekly downloads
- [@mintlify/scraping](https://npm.io/package/@mintlify/scraping.md) — 294.8K weekly downloads
- [@mintlify/previewing](https://npm.io/package/@mintlify/previewing.md) — 209.5K weekly downloads
- [@mintlify/prebuild](https://npm.io/package/@mintlify/prebuild.md) — 209.5K weekly downloads
- [@mintlify/link-rot](https://npm.io/package/@mintlify/link-rot.md) — 206.3K weekly downloads

## Recent versions

- 4.0.1 (latest) — 2021-11-11
- 4.0.0 — 2021-11-11
- 3.0.1 — 2021-11-11
- 3.0.0 — 2020-06-15
- 2.0.2 — 2017-03-19
- 2.0.1 — 2016-12-09
- 1.0.0 — 2016-12-08

## README

# standardize-geolocation

> takes geolocations of different formats and outputs a standardized version

There are several ways of representing geolocations:

- latitude and longitude
- latitude, longitude, and elevation
- `longitude` vs. `lon` vs. `long` vs. `lng`
- [GeoJSON](https://tools.ietf.org/html/rfc7946)
- ...and more

This module just takes in a geolocation and tries to parse it to a standardized
format everyone can use and rely on: an object with keys of `latitude`, `longitude`,
and `elevation`.

## Install

Using [Yarn]:

```bash
$ yarn add standardize-geolocation
```

…or using [npm]:

```bash
$ npm i --save standardize-geolocation
```

## Usage

```js
import { standardizeGeolocation } from 'standardize-geolocation';

const location = standardizeGeolocation({
  lat: 12.3456,
  lng: -65.4321
});
//» { latitude: 12.3456, longitude: -65.4321, elevation: undefined }

const points = [
  { lat: 85.238749, lng: 12.923587, elevation: 982 },
  { lat: 85.238749, lng: 12.923587, elevation: 982 },
  { lat: 85.238749, lng: 12.923587, elevation: 982 },
  [85.238749, 12.923587, 982],
  { lat: 85.238749, lng: 12.923587 }
];

const locations = points.map(standardizeGeolocation);
// [
//   { elevation: 982, latitude: 85.238749, longitude: 12.923587 },
//   { elevation: 982, latitude: 85.238749, longitude: 12.923587 },
//   { elevation: 982, latitude: 85.238749, longitude: 12.923587 },
//   { elevation: 982, latitude: 85.238749, longitude: 12.923587 },
//   { elevation: undefined, latitude: 85.238749, longitude: 12.923587 }
// ]
```

## API

### `standardizeGeolocation`

```ts
function standardizeGeolocation(
  point: GeolocationInput
): StandardizedGeolocation;
```

Attempts to create an object in this format from any known format:

```ts
{
  elevation: number | undefined;
  latitude: number;
  longitude: number;
}
```

Here's a (non-exhaustive) list of formats this will standardize:

**Arrays:**

- `[latitude, longitude]`
- `[latitude, longitude, elevation]`

If an array is detected to be in a GeoJSON object, latitude and longitude will be reversed:

`{ coordinates: [longitude, latitude]; }`

**Objects:**

Latitude keys:

- `lat`
- `latitude`

Longitude keys:

- `lng`
- `lon`
- `long`
- `longitude`

Elevation keys:

- `alt`
- `altitude`
- `elev`
- `elevation`

**Nested objects:**

If the passed object has one of these properties at the top level, it will attempt to convert it to a geolocation:

- `geometry`
- `location`
- `position`

## Contributing

[Node.js] and [Yarn] are required to work with this project.

To install all dependencies, run:

```bash
yarn
```

### Useful Commands

|                     |                                                 |
| ------------------- | ----------------------------------------------- |
| `yarn build`        | Builds the project to `./dist`                  |
| `yarn format`       | Format the source following the Prettier styles |
| `yarn test`         | Run project tests                               |
| `yarn test --watch` | Run project tests, watching for file changes    |

## See Also

- [`blakek/geo2zip`](https://github.com/blakek/geo2zip) - translates latitude / longitude geolocations to the nearest corresponding U.S. zip code
- [`blakek/us-zips`](https://github.com/blakek/us-zips) - a list of US ZIP codes and their geolocations

## License

MIT

[node.js]: https://nodejs.org/
[yarn]: https://yarnpkg.com/

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