# geojson-validation

> A GeoJSON Validation Library

Latest version **1.0.2** (published 2020-07-14) · LGPL-3 license · 0 weekly downloads

## Install

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

Provides the command `gjv`.

## Health

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

Positive: has types package; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.2 |
| Published | 2020-07-14 |
| First published | 2013-07-10 |
| Weekly downloads | 0 |
| License | LGPL-3 |
| TypeScript types | separate (@types/geojson-validation) |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 80.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | mjbecze |
| Maintainers | null_radix |
| Keywords | GeoJSON, Validation, Geo, cli |

## Links

- npm: https://www.npmjs.com/package/geojson-validation
- Repository: https://gitlab.com/mjbecze/GeoJSON-Validation
- Issues: https://gitlab.com/mjbecze/GeoJSON-Validation/issues
- npm.io page: https://npm.io/package/geojson-validation

## Alternatives

- [@salesforce/cli](https://npm.io/package/@salesforce/cli.md) — 389.7K weekly downloads
- [@mintlify/cli](https://npm.io/package/@mintlify/cli.md) — 208.9K weekly downloads
- [@grafana/e2e-selectors](https://npm.io/package/@grafana/e2e-selectors.md) — 128.7K weekly downloads
- [mintlify](https://npm.io/package/mintlify.md) — 112.0K weekly downloads
- [@intlayer/cli](https://npm.io/package/@intlayer/cli.md) — 22.8K weekly downloads

## Recent versions

- 1.0.2 (latest) — 2020-07-14
- 1.0.1 — 2020-04-20
- 1.0.0 — 2020-04-20
- 0.2.1 — 2018-05-11
- 0.2.0 — 2017-11-21
- 0.1.6 — 2015-08-25
- 0.1.5 — 2014-05-26
- 0.1.4 — 2013-11-11
- 0.1.3 — 2013-07-23
- 0.1.2 — 2013-07-23
- 0.1.1 — 2013-07-10
- 0.1.0 — 2013-07-10

## README

GeoJSON-Validation
==================

**A GeoJSON Validation Library**  
Check JSON objects to see whether or not they are valid GeoJSON. Validation is based off of the [GeoJSON Format Specification revision 1.0](http://geojson.org/geojson-spec.html#geojson-objects)

- [Installation](#installation)
- [Usage](#usage)
- [Cli usage](#cli-usage)
- [Api](#api)
- [Testing](#testing)
- [Cavets](#cavets)

## Installation
`npm install geojson-validation`

## usage
```javascript
const gjv = require("geojson-validation");

const validFeatureCollection = {
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "geometry": {"type": "Point", "coordinates": [102.0, 0.5]},
            "properties": {"prop0": "value0"}
        },
        {
            "type": "Feature",
            "geometry": {
                "type": "LineString",
                "coordinates": [
                    [102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]
                ]
            },
            "properties": {
                "prop0": "value0",
                "prop1": 0.0
            }
        }
    ]
};

//simple test
if(gjv.valid(validFeatureCollection)){
    console.log("this is valid GeoJSON!");
}

const invalidFeature =  {
    "type": "feature",
    "geometry": {
        "type": "LineString",
        "coordinates": [
            [102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]
        ]
    },
    "properties": {
        "prop0": "value0",
        "prop1": 0.0
    }
};

//test to see if `invalidFeature` is valid and return a "trace" which contains the error
const trace = gjv.isFeature(invalidFeature, true)
console.log(trace)
```

## CLI usage
first install gobally   
`npm install geojson-validation -g`   
Then you can use `gjv` to validate file such as   
`gjv file1 file2..`   
Or you can stream files to it
`cat file | gjv`  
`gjv` will either return a list of error or a `valid` if the files are indeed valid.

## API
All Function return a `boolean` and take a JSON object that will be evalatued to see if it is a GeoJSON object, with the exception of [define](#definetype-function).  

**Arguments**  
* geoJSON - a JSON object that is tested to see if it is a valid GeoJSON object
* trace - `boolean` is whether or not to return an array of validation errors for an invalid JSON object. If trace is false then the a Boolean will be returned depending on the validity of the object.

### Define(type, function)
Define a Custom Validation for the give `type`. `type` can be "Feature", "FeatureCollection", "Point", "MultiPoint", "LineString", "MultiLineString", "Polygon", "MultiPolygon", "GeometryCollection", "Bbox", "Position", "GeoJSON" or "GeometryObject". 

The `function` is passed the `object` being validated and should return a `string` or an `array` of  strings representing errors. If there are no errors then the function should not return anything or an empty array. See the [example](#define-example) for more.

### [Full Documention](./docs/index.md)

--------------------------------------------------------

## Define Example
Thanks to [@VitoLau](https://github.com/VitoLau>) for the code for this example.
```javascript
const gjv = require("geojson-validation");

gjv.define("Position", (position) => {
    //the postion must be valid point on the earth, x between -180 and 180
    errors = [];
    if(position[0] < -180 || position[0] > 180){
        errors.push("the x must be between -180 and 180");
    }
    if(position[1] < -90 || position[1] > 90){
        errors.push("the y must be between -90 and 90");
    }
    return errors;

});

const gj = {type: "Point", coordinates: [-200,3]};
//returns false
gjv.isPoint(gj);
```

## Testing
To run tests `npm test`   
Test use mocha

## Cavets
* Does not check ordering of Bouding Box coordinates
* Does not check Coordinate Reference System Objects
* Does not check order of rings for polygons with multiple rings

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