#gis #json-format #earcut #low-cost-code

无std s2-tilejson

描述s2地图瓦片集的后向兼容JSON格式

6个版本 (破坏性更新)

0.5.0 2024年8月7日
0.4.0 2024年7月29日
0.3.0 2024年7月27日
0.2.1 2024年7月26日
0.1.0 2024年6月4日

#220 in 算法

Download history 121/week @ 2024-06-03 3/week @ 2024-06-10 325/week @ 2024-07-22 207/week @ 2024-07-29 140/week @ 2024-08-05

672 每月下载量
用于 s2-pmtiles

MIT 许可证

69KB
962 代码行

s2-tilejson

GitHub Actions Workflow Status npm crate downloads bundle docs-ts docs-rust doc-coverage code-coverage Discord

关于

TileJSON是一个主要向后兼容的用于表示地图瓦片元数据的开放标准。

安装

# NPM
npm install s2-tilejson
# PNPM
pnpm add s2-tilejson
# Yarn
yarn add s2-tilejson
# Bun
bun add s2-tilejson

使用方法

import { MetadataBuilder } from 's2-tilejson'
import type { Metadata, Shape, LayerMetaData, BBox } from 's2-tilejson'

const metaBuilder = new MetadataBuilder()

// on initial use be sure to update basic metadata:
metaBuilder.setName('OSM')
metaBuilder.setDescription('A free editable map of the whole world.')
metaBuilder.setVersion('1.0.0')
metaBuilder.setScheme('fzxy') // 'fzxy' | 'tfzxy' | 'xyz' | 'txyz' | 'tms'
metaBuilder.setType('vector') // 'vector' | 'json' | 'raster' | 'raster-dem' | 'sensor' | 'markers'
metaBuilder.setEncoding('none') // 'gz' | 'br' | 'none'
metaBuilder.addAttribution('OpenStreetMap', 'https://www.openstreetmap.org/copyright/')

// Vector Specific: add layers based on how you want to parse data from a source:

metaBuilder.addLayer('water_lines', {
    minzoom: 0,
    maxzoom: 13,
    drawTypes: [2],
    shape: {
        class: 'string',
        offset: 'f64',
        info: {
            name: 'string',
            value: 'i64'
        }
    } as Shape,
    m_shape: null
} as LayerMetaData)

// as you build tiles, add the tiles metadata:
const lonLatBoundsForTile: BBox = [-180, -90, 180, 90]
// WM:
metaBuilder.addTileWM(zoom, x, y, lonLatBoundsForTile)
// S2:
metaBuilder.addTileS2(face, zoom, x, y, lonLatBoundsForTile)

// finally to get the resulting metadata:
const metadata: Metadata = metaBuilder.commit()

创建和验证你的形状

形状定义了可以在矢量瓦片中存储的数据类型。它们在规范中有解释。

如果你想验证形状,请自由使用Ajv库。

import Ajv from 'ajv';
import { ShapeSchema } from 's2-tilejson'; // Path to the schema

import type { Shape } from 's2-tilejson';

const ajv = new Ajv();
const validate = ajv.compile(ShapeSchema);

const shape: Shape = {
  a: 'i64',
  b: ['string'],
  c: {
    d: 'f64',
    e: 'bool',
    f: 'null',
    g: 'f32',
    h: {
      i: 'u64',
    },
  },
};

validate(shape); // true

开发

要求

对于Typescript,通过bun安装

bun i

如果你需要安装bun,请参阅bun安装指南

你需要工具tarpaulin来生成覆盖率报告。使用以下命令安装它

cargo install cargo-tarpaulin

bacon coverage工具用于生成覆盖率报告。要使用pycobertura包生成更漂亮的覆盖率报告,请使用以下命令安装它

pip install pycobertura

运行测试

要运行测试,请使用以下命令

# TYPESCRIPT
## basic test
bun run test
## live testing
bun run test:dev

# RUST
## basic test
cargo test
# live testing
bacon test

生成覆盖率报告

要生成覆盖率报告,请使用以下命令

cargo tarpaulin
# bacon
bacon coverage # or type `l` inside the tool

依赖关系

~0.7–1.6MB
~35K SLoC