geojson-polyline
Version:
Convert GeoJSON coordinates to and from encoded polylines. Supports all major GeoJSON types.
170 lines (114 loc) • 4.68 kB
Markdown
# GeoJSON PolyLine
Convert GeoJSON coordinates to and from encoded polylines. Supports [encoding](#encodegeojson-options) or [decoding](#decodepolygeo-options) geometries/coordinates for all 9 standard GeoJSON types. Use it in [Node.js](#install) (optionally as a [transform stream](#stream-api)), in the [browser](#browser-usage), as a [Web Worker](#web-worker), or from the [command line](#command-line-interface-cli).
## Install
```sh
npm install geojson-polyline
```
## Usage
### encode(geoJSON[, options])
Convert a GeoJSON object's coordinates to encoded polylines.
- `geoJSON` : A GeoJSON object (required).
- `options` : An optional Object with the following possible properties:
- `precision`: A Number specifying the number of digits to keep for lat/lon. Default is `5`.
_Aliases: `polyline`, `polyLine`, `toEncoded`, `fromGeoJSON`, `toPolyline`._
#### Example
```js
const encode = require('geojson-polyline').encode
const polygon = {
type: 'Polygon',
coordinates: [
[[-81.63829, 41.48093], [-81.63628, 41.47993], [-81.63625, 41.47931], [-81.63829, 41.48033], [-81.63829, 41.48093]]
]
}
const encoded = encode(polygon)
// => { type: 'Polygon', coordinates: ['yvd|Fh~gqNfEqKzBEkEvKwB?'] }
```
### decode(polyGeo[, options])
Convert a polyline-encoded GeoJSON to standard GeoJSON coordinate arrays.
- `polyGeo` : A GeoJSON object whose coordinates are expressed as polylines (required).
- `options` : An optional Object with the following possible properties:
- `precision`: A Number specifying the precision that the polyline was encoded with. Default is `5`.
_Aliases: `decode`, `geojson`, `geoJson`, `geoJSON`, `fromEncoded`, `toGeoJSON` `fromPolyline`._
#### Example
```js
const decode = require('geojson-polyline').decode
const polygon = {
type: 'Polygon',
coordinates: ['yvd|Fh~gqNfEqKzBEkEvKwB?']
}
const geoJSON = decode(polygon)
// => { type: 'Polygon', coordinates: [[[-81.63829, 41.48093], [-81.63628, 41.47993], [-81.63625, 41.47931], [-81.63829, 41.48033], [-81.63829, 41.48093]]]}
```
## Stream API
Use the streaming API if you have streams instead of objects. Outputs newline-separated JSON.
### Usage
```js
var encode = require('geojson-polyline/stream').encode
// var decode = require('geojson-polyline/stream').decode
fs.createReadStream('./tl_2016_33_place.geojson')
.pipe(encode({precision: 4}))
.pipe(process.stdout)
```
## Browser Usage
Standalone builds are available in [`/dist`](./dist) for in-browser usage, which are ES3 compatible.
```html
<script src="dist/geojson-polyline.min.js"></script>
<script>
var decoded = encoded.map(GeoJSONPolyline.decode);
</script>
```
### Web Worker
If you want to decode polylines using [Web Workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers), that is supported out of the box:
```js
var worker = new Worker('dist/geojson-polyline.min.js')
var decoded = []
encoded.forEach(function(encoded){
worker.postMessage(['decode', encoded])
})
worker.onmessage = function(event) {
decoded.push(event.data)
if(decoded.length === encoded.length) {
// Done!
}
}
```
> Currently, decoding and encoding is faster in the browser without using Web Workers.
## Command Line Interface (CLI)
Convert GeoJSON objects, features, and feature collections from the command line. Works great for `.geojson` files from [ogr2ogr](http://www.gdal.org/ogr2ogr.html) or [shp2json](https://www.npmjs.com/package/shp2json).
### Install
```sh
npm install --global geojson-polyline
```
### Usage
```
Usage:
geojson-polyline <command> (read from stdin)
geojson-polyline <command> -f <file> [<file2>] [...]
geojson-polyline <command> <input>
Convert the coordinates of a GeoJSON object to and from encoded polylines.
In all cases, input should be a valid JSON object or newline-separated JSON.
Command is one of:
encode
decode
geojson
geoJson
geoJSON
polyline
polyLine
toEncoded
fromEncoded
toGeoJSON
fromGeoJSON
toPolyline
fromPolyline
```
### Example
```sh
geojson-polyline encode -f tabblock2010_56_pophu.geojson | mongoimport -c tabblock2010
```
## Additional Information
[Google's encoded polyline algorithm][Polyline Format] provides for very efficient encoding and storage of coordinate data. The [`@mapbox/polyline` library from MapBox][MapBox Polyline] provides an implementation to encode/decode polylines, but only supports GeoJSON "LineString" features, not "Polygons" or "MultiLineStrings".
[MapBox Polyline]: https://github.com/mapbox/polyline#readme
[Polyline Format]: https://developers.google.com/maps/documentation/utilities/polylinealgorithm
## License
ISC