UNPKG

standardize-geolocation

Version:

takes geolocations of different formats and outputs a standardized version

150 lines (104 loc) 3.42 kB
# 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/