# immutable-geojson

> Immutable.js Record for GeoJSON

Latest version **0.2.0** (published 2015-09-03) · MIT license · 0 weekly downloads

## Install

```sh
npm install immutable-geojson
pnpm add immutable-geojson
yarn add immutable-geojson
bun add immutable-geojson
```

## Health

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

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.2.0 |
| Published | 2015-09-03 |
| First published | 2015-08-07 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 1 |
| Author | Florian Klampfer |
| Maintainers | qwtel |
| Keywords | immutable, immutablejs, geojson |

## Links

- npm: https://www.npmjs.com/package/immutable-geojson
- Repository: https://github.com/qwtel/immutable-geojson
- Homepage: https://github.com/qwtel/immutable-geojson#readme
- Issues: https://github.com/qwtel/immutable-geojson/issues
- npm.io page: https://npm.io/package/immutable-geojson

## Dependencies (1)

- [immutable-nestable-record](https://npm.io/package/immutable-nestable-record.md) ^0.1.2

## Alternatives

- [@mapbox/jsonlint-lines-primitives](https://npm.io/package/@mapbox/jsonlint-lines-primitives.md) — 5.3M weekly downloads
- [reftools](https://npm.io/package/reftools.md) — 3.5M weekly downloads
- [@hey-api/openapi-ts](https://npm.io/package/@hey-api/openapi-ts.md) — 3.5M weekly downloads
- [@mapbox/geojson-rewind](https://npm.io/package/@mapbox/geojson-rewind.md) — 2.4M weekly downloads
- [turbo-stream](https://npm.io/package/turbo-stream.md) — 1.7M weekly downloads

## Recent versions

- 0.2.0 (latest) — 2015-09-03
- 0.1.2 — 2015-08-07
- 0.1.1 — 2015-08-07
- 0.1.0 — 2015-08-07

## README

# Immutable GeoJSON
Immutable.js Record for GeoJSON

This library defines a [Immutable.js Record][record] for GeoJSON data.
It will handle all the internal nesting of the relevant geometry records,
so that it can almost (see Appendix) be used as a drop-in replacement for regular GeoJSON,
while maintaining all the goodness of immutable data structures.

## Install

`npm install immutable-geojson`

## Usage

```js
import Immutable from 'immutable';
import ImmutableGeoJSON, {Point} from 'immutable-geojson';

const pointA = ImmutableGeoJSON.fromJS({"type": "Point", "coordinates": [100.0, 0.0]});
const type = pointA.type // access to fields via dot syntax thanks to immutable records

const pointB = ImmutableGeoJSON.fromJS({"type": "Point", "coordinates": [100.0, 0.0]});
Immutable.is(pointA, pointB); // true
pointA instanceof Point // true
```

## Caveats

There are two issues that prevent if from being a complete replacement:

### Access to coordinates
Since coordinates are arrays in the GeoJSON spec, they are converted to `Immutable.List`s.
However, immutable lists are not equivalent to arrays.
Most notably their fields can't be accesed via bracket syntax (i.e. `geometry.coordinates[0]`).

However, since `Immutable.List` implements ES6 iterators,
it is possible to access the coordinates via destructuring in ES6:

```js
for (let lineString of geometry.coordinates) {
  for (let [lng, lat] of lineString) {
    // ...
  }
}
```

### Feature properties
Since the structure of the `properties` field of [GeoJSON Features][feature] can't be known in advance,
it uses a generic `Immutable.Map` to store the values as an `Immutable.Collection`
(so that comparisons via `Immutable.is` don't depend on identical references).

If you want to use records for the properties as well, you can provide a `reviver` as second parameter to `fromJS`
(similar to `fromJS` in Immutable.js)


[record]: https://facebook.github.io/immutable-js/docs/#/Record
[feature]: http://geojson.org/geojson-spec.html#feature-objects

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