# data-processing **Repository Path**: xuepengq/data-processing ## Basic Information - **Project Name**: data-processing - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-25 - **Last Updated**: 2026-06-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GIS 数据处理工具 基于 **Vue 3 + TypeScript + Vite** 的纯前端 GIS 数据处理工具集。所有处理均在浏览器本地完成,**数据不上传服务器**。 ## 已实现功能 | 工具 | 说明 | | --- | --- | | 🧭 坐标系转换 | 导入 GeoJSON,在 WGS-84、GCJ-02(火星坐标 / 高德·腾讯)、BD-09(百度)之间互转。常用于将「火星坐标」还原为 WGS-84。支持任意几何类型(点、线、面、Multi*、GeometryCollection)。 | | ✂️ 要素拆分 | 导入包含多个要素的 GeoJSON,拆分为「一个要素一个文件」,可按属性字段命名,并打包成 zip 一次性下载。 | | 🏢 获取建筑轮廓 | 输入城市或区域名称(如:深圳福田区),一键下载该区域内的所有建筑物轮廓并导出为 GeoJSON。支持双数据源:**Overture Maps**(全量高精度,依赖本地服务)和 **OpenStreetMap**(基于 Overpass API,纯前端)。 | | 🗺️ 获取行政边界 | 从阿里云 DataV 获取全国各省、市、区县的行政区划边界数据,导出为 GeoJSON。支持按省/市/区县逐级选择,并支持选择是否包含子级行政区划边界。 | ## 获取建筑轮廓数据 本项目现已提供**可视化界面工具**,支持通过文本搜索快速拉取任意区域(如“深圳市福田区”)的建筑数据。 - **数据源一:Overture Maps (推荐)**:数据覆盖极其全面,但因为需要解析托管在 S3 上的分区 GeoParquet,需借由本地的 Vite 代理接口(`/api/overture`)调用后台的 DuckDB 进行处理。 - **数据源二:OpenStreetMap (OSM)**:纯前端方案,直接请求 Overpass API。无需本地 DuckDB 依赖,但数据在国内较稀疏。 ### 命令行方式提取 Overture 建筑 除了图形界面,您依然可以使用 `scripts/fetch-overture-buildings.mjs` 命令行脚本从官方公共数据集拉取建筑轮廓。 > **为什么是命令行而非浏览器内?** Overture 官方数据是托管在 S3 上的分区 GeoParquet, > 浏览器端的 DuckDB-WASM 不带 `httpfs` 扩展、无法对 S3 桶做目录通配,因此无法在纯前端里 > 对任意区域开箱即用地直查官方完整发布。该脚本走本机 DuckDB CLI(官方推荐方式),靠 `bbox` > 列谓词下推,**只通过 HTTP Range 下载命中区域的数据块**,而不是整份发布(数十 GB)。 **前置依赖**:本机安装 [DuckDB CLI](https://duckdb.org/docs/installation/) (Windows 可 `winget install DuckDB.cli`,或下载 `duckdb.exe` 放进 PATH;也可用环境变量 `DUCKDB_BIN` 指定可执行文件路径)。 ```bash # 用内置预设拉取深圳市福田区建筑(输出到 samples/futian-buildings.geojson) npm run fetch:buildings -- --region futian # 自定义边界框(顺序:西,南,东,北 / minLng,minLat,maxLng,maxLat),并指定输出 npm run fetch:buildings -- --bbox 113.91,22.49,114.07,22.59 --out samples/福田区建筑.geojson # 指定 Overture 发布版本;只看将执行的 SQL 而不实际拉取 npm run fetch:buildings -- --region nanshan --release 2025-04-23.0 npm run fetch:buildings -- --region futian --dry-run # 查看全部参数与内置预设 npm run fetch:buildings -- --help ``` 内置预设:`futian`(福田区)、`luohu`(罗湖区)、`nanshan`(南山区)、`shenzhen`(全市)。 产出的 GeoJSON(WGS-84)可直接导入上面的「坐标系转换 / 要素拆分」工具继续处理。 ## 开发 ```bash npm install npm run dev # 启动开发服务器 (http://localhost:5180) npm run build # 类型检查 + 生产构建 npm run type-check # 仅类型检查 ``` `samples/sample.geojson` 提供了一份测试数据。 ## 目录结构 ```text src/ ├─ main.ts 应用入口 ├─ App.vue 布局 + 侧边栏导航(由工具注册表驱动) ├─ components/ │ ├─ FileDropZone.vue 通用文件拖拽/选择组件 │ └─ ResultPanel.vue 通用状态提示组件 ├─ tools/ │ ├─ index.ts ★ 工具注册表(新增功能在此登记) │ ├─ CoordConvertTool.vue 坐标系转换 │ ├─ SplitFeaturesTool.vue 要素拆分 │ └─ FetchBuildingsTool.vue 获取建筑轮廓 ├─ utils/ │ ├─ coordtransform.ts 坐标系转换算法 │ ├─ geojson.ts GeoJSON 解析 / 遍历 / 拆分 │ └─ download.ts 文件下载 / zip 打包 └─ types/geojson.ts GeoJSON 类型定义 scripts/ └─ fetch-overture-buildings.mjs 从 Overture 拉取指定区域建筑轮廓(命令行) ``` ## 如何新增一个功能 本项目采用「工具注册表」架构,扩展非常简单: 1. 在 `src/tools/` 下新建一个工具组件(参考 `SplitFeaturesTool.vue`)。 2. 在 `src/tools/index.ts` 的 `tools` 数组中追加一项: ```ts { id: 'my-tool', name: '我的工具', icon: '🛠️', description: '一句话描述', component: MyTool, } ``` 3. 侧边栏导航会自动出现新工具,无需改动其它代码。 可复用的能力(坐标转换、GeoJSON 遍历、下载/打包)都已抽离到 `utils/`,新工具直接调用即可。 ## 坐标系说明 - **WGS-84**:国际标准,GPS / 大多数海外地图所用。 - **GCJ-02(火星坐标)**:中国国测局加密坐标,高德、腾讯地图所用。 - **BD-09**:百度在 GCJ-02 基础上二次加密的坐标。 > 转换算法为业内通用的公开近似算法,中国大陆境内精度约几米;境外坐标自动跳过转换。