{"_id":"@deepinnet/geojson-to-mvt","_rev":"2-a242acb83e26e827f1002235e43dfa49","name":"@deepinnet/geojson-to-mvt","dist-tags":{"latest":"0.0.1"},"versions":{"0.0.1":{"name":"@deepinnet/geojson-to-mvt","version":"0.0.1","author":"","license":"ISC","_id":"@deepinnet/geojson-to-mvt@0.0.1","maintainers":[{"name":"weiwei2020","email":"1032159552@qq.com"},{"name":"shenduzhilian","email":"shenduzhilian@gmail.com"}],"dist":{"shasum":"9f933e7a7011b7d5980ad3c86294baa544c082ea","tarball":"https://registry.npmjs.org/@deepinnet/geojson-to-mvt/-/geojson-to-mvt-0.0.1.tgz","fileCount":20,"integrity":"sha512-I+ihJtxauL2lUGgFUFzygNvvjxBqzZzXlKEcZEv5UKiPl6Ye4aJm88Rsw7nk2C/tDOGyYSju9B5Jp5rI9C9IZQ==","signatures":[{"sig":"MEQCIA5mKM6wtdUrALY7Up6e2yp+K683lQLIEDH+xHioN2qFAiBLBZR4S5MkBl+vqp4K3/zWWZ2heT9Ff1Zy4OrbfTBcxg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99417},"main":"./index.js","type":"module","exports":{".":"./index.js","./3d-codec":"./src/3d/index.js"},"gitHead":"d8908de13b4274a1567c3cbb6f90d7c3e2245404","scripts":{"generate-tiles:2d":"node index.2d.js","generate-tiles:3d":"node index.3d.js"},"_npmUser":{"name":"shenduzhilian","email":"shenduzhilian@gmail.com"},"_npmVersion":"10.9.2","description":"Convert GeoJSON FeatureCollection data to 2D MVT or custom 3D protobuf tiles","directories":{},"_nodeVersion":"22.14.0","dependencies":{"vt-pbf":"^3.1.3","geojson-vt":"^4.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.3","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/geojson-to-mvt_0.0.1_1776844445628_0.45319434274874815","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-04-22T07:54:05.551Z","modified":"2026-04-24T10:02:30.594Z","0.0.1":"2026-04-22T07:54:05.763Z"},"license":"ISC","description":"Convert GeoJSON FeatureCollection data to 2D MVT or custom 3D protobuf tiles","maintainers":[{"email":"1032159552@qq.com","name":"weiwei2020"},{"email":"346775171@qq.com","name":"wxg-james"},{"email":"shenduzhilian@gmail.com","name":"shenduzhilian"}],"readme":"# geoJsonToMvt\n\n将 `input/airspaceData.json` 中的 GeoJSON `FeatureCollection` 分别生成：\n\n- 标准二维 MVT\n- 自定义三维 PBF tile\n\n## 当前结构\n\n- 二维入口：`./index.2d.js`\n- 三维入口：`./index.3d.js`\n- 二维源码：`./src/2d`\n- 三维源码：`./src/3d`\n- 二维输出：`./output/2d/tiles/{z}/{x}/{y}.pbf`\n- 三维输出：`./output/3d/tiles/{z}/{x}/{y}.pbf`\n\n## 安装\n\n```bash\npnpm install\n```\n\n## 使用\n\n生成二维标准 MVT：\n\n```bash\nnpm run generate-tiles:2d\n```\n\n或：\n\n```bash\nnode index.2d.js\n```\n\n生成三维自定义 PBF：\n\n```bash\nnpm run generate-tiles:3d\n```\n\n或：\n\n```bash\nnode index.3d.js\n```\n\n兼容旧脚本：\n\n```bash\nnpm run generate-tiles\n```\n\n默认仍指向三维入口。\n\n## npm 包导出\n\n当前包除了 CLI，还对外公开三维自定义 PBF codec API。\n\n### 包根入口\n\n```js\nimport {\n  decodeTile,\n  encodeTile,\n  GEOMETRY_TYPE_IDS,\n  GEOMETRY_TYPE_NAMES\n} from 'geojsontomvt';\n```\n\n### 子路径入口\n\n```js\nimport { decodeTile } from 'geojsontomvt/3d-codec';\n```\n\n### 使用示例\n\n```js\nimport fs from 'node:fs';\nimport { decodeTile } from 'geojsontomvt';\n\nconst buffer = fs.readFileSync('./output/3d/tiles/15/26780/14259.pbf');\nconst tile = decodeTile(buffer);\n\nconsole.log(tile.z, tile.x, tile.y, tile.features.length);\n```\n\n### 当前公开 API\n\n- `decodeTile(bufferLike)`\n- `encodeTile(tile)`\n- `GEOMETRY_TYPE_IDS`\n- `GEOMETRY_TYPE_NAMES`\n\n以下内容仍视为内部实现，不承诺作为稳定公共 API：\n\n- `ProtoReader`\n- `ProtoWriter`\n- 三维 tile builder / clipper\n- 预览页逻辑\n- 二维 MVT 生成逻辑\n\n## 输入格式约束\n\n输入文件固定为：\n\n```text\n./input/airspaceData.json\n```\n\n输入必须是 `FeatureCollection`，支持：\n\n- `Point`\n- `MultiPoint`\n- `LineString`\n- `MultiLineString`\n- `Polygon`\n- `MultiPolygon`\n\n单个坐标允许：\n\n- `[lng, lat]`\n- `[lng, lat, alt]`\n\n同一 `Feature` 内所有坐标维度必须一致。\n\n## 二维链路\n\n二维链路使用以下库：\n\n- `geojson-vt@^4.0.2`\n- `vt-pbf@^3.1.3`\n\n### 二维处理规则\n\n- 输出格式是标准二维 MVT\n- `source-layer` 固定为 `data`\n- 几何只保留前两维 `[lng, lat]`\n- 如果输入里包含第三维，会在二维链路中被忽略\n- 不会新增 `properties.altitude`\n- `properties` 只保留源业务字段\n- `properties` 中的对象、数组、`null` 会转成 JSON 字符串，以适配 MVT 标量属性约束\n\n### 二维输出目录\n\n```text\noutput/\n└── 2d/\n    └── tiles/\n        ├── 15/\n        ├── 16/\n        └── 17/\n```\n\n## 三维链路\n\n三维链路保留当前自定义 PBF 方案。\n\n### 三维处理规则\n\n- 输出格式是自定义 protobuf tile，不是标准 MVT\n- 保留第三维坐标 `[lng, lat, alt]`\n- 保留原始 `properties`\n- 支持线面裁剪与三维坐标插值\n- 生成 `manifest.json`\n\n### 三维输出目录\n\n```text\noutput/\n└── 3d/\n    └── tiles/\n        ├── 15/\n        ├── 16/\n        ├── 17/\n        └── manifest.json\n```\n\n## 预览\n\n项目根目录提供了 `preview.html`，当前只服务二维场景。\n\n预览页直接使用 MapLibre 的标准 `vector source` 加载：\n\n```text\nhttp://localhost:7778/mvt/2d/{z}/{x}/{y}.pbf\n```\n\n### 使用方式\n\n1. 先运行二维生成脚本\n2. 确保本地 tile 服务提供 `http://localhost:7778/mvt/2d/{z}/{x}/{y}.pbf`\n3. 在项目根目录启动静态服务，例如：\n\n```bash\npython3 -m http.server 8080\n```\n\n4. 打开：\n\n```text\nhttp://localhost:8080/preview.html\n```\n\n### 预览说明\n\n- 预览页只展示二维点渲染\n- 不再处理第三维\n- 不再生成 `7 × 7 × 7` 米立方体\n- 不再使用三维自定义协议或 worker 解码链路\n\n如果 `preview.html` 由 `http://localhost:8080` 提供，而 tile 服务在 `http://localhost:7778`，则 7778 服务需要返回允许 `http://localhost:8080` 的 CORS 响应头。\n\n## 失败条件\n\n以下情况会直接报错并终止：\n\n- 输入不是 `FeatureCollection`\n- `features` 不是数组\n- 存在非法 `Feature`\n- 存在不支持的几何类型\n- 坐标不是 `[lng, lat]` 或 `[lng, lat, alt]`\n- 同一要素内坐标维度不一致\n- 经度、纬度或高度不是数字\n- `properties` 不是对象或 `null`\n\n## 技术栈\n\n- 二维：`geojson-vt`、`vt-pbf`\n- 三维：自定义 protobuf 编解码、自定义裁剪\n- 预览：MapLibre\n\n## 许可证\n\nISC\n","readmeFilename":"README.md"}