S2JSON is a format for encoding a variety of geographic data structures that simplifies the GeoJSON spec and builds ontop of it to include S2 Geometry.
Notable features of S2JSON are:
S2Feature and S2FeatureCollection types based upon the S2 Geometry spherical projection.GeometryCollection.FeatureCollection or S2FeatureCollection// GeoJSON example
{
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [125.6, 10.1]
  },
  "properties": {
    "name": "Dinagat Islands"
  }
}
// GeoJSON Vector example
{
  "type": "VectorFeature",
  "geometry": {
    "type": "Point",
    "coordinates": { x: 125.6, y: 10.1 }
  },
  "properties": {
    "name": "Dinagat Islands"
  }
}
// S2JSON example
{
  "type": "S2Feature",
  "face": 0,
  "geometry": {
    "type": "Point",
    "coordinates": { x: 0.5, y: 0.5 }
  },
  "properties": {
    "name": "Null Island"
  }
}
# bun
bun add -D s2json-spec
# pnpm
pnpm add -D s2json-spec
# yarn
yarn add -D s2json-spec
# npm
npm install -D s2json-spec
# cargo
cargo install s2json
grammars/highlighting for VSCode are available for install.
Unsafe code is forbidden by a #![forbid(unsafe_code)] attribute in the root of the rust library.
You need the tool tarpaulin to generate the coverage report. Install it using the following command:
cargo install cargo-tarpaulin
The bacon coverage tool is used to generate the coverage report. To utilize the pycobertura package for a prettier coverage report, install it using the following command:
pip install pycobertura
Note: Be sure to set
resolveJsonModule: truein yourtsconfig.jsonto ensure json may be loaded as a module.
import Ajv from 'ajv';
import * as schema from 's2json-spec/s2json.schema.json'; // Path to the schema
import type { Feature } from 's2json-spec';
const ajv = new Ajv();
const validate = ajv.compile(schema);
const feature: Feature = {
  type: 'Feature',
  geometry: {
    type: 'Point',
    coordinates: [125.6, 10.1]
  },
  properties: {
    name: 'Dinagat Islands'
  },
};
validate(feature); // true
To run the tests, use the following command:
# TYPESCRIPT
## basic test
bun run test
## live testing
bun run test:dev
# RUST
## basic test
cargo test
# live testing
bacon test
To generate the coverage report, use the following command:
cargo tarpaulin
# bacon
bacon coverage # or type `l` inside the tool