# image-api **Repository Path**: allmyteacher/image-api ## Basic Information - **Project Name**: image-api - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-15 - **Last Updated**: 2025-10-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🛰️ GDAL Node Service 本服务用于对卫星影像(GeoTIFF / XML)进行解析和缩略图生成,支持多种卫星格式(如 SPOT、Landsat 等),并可持续扩展。 --- ## 📦 功能说明 - ✅ **输入**:支持输入 - 单个 `.tif` 文件 - 或包含多个 `.tif` 文件的文件夹 - 🗺️ **坐标解析** - 从 **XML** 或 **GeoTIFF** 文件中读取四角坐标信息 - 返回结果示例: ```json { "topLeft": {"lon": 123.456, "lat": 23.456}, "topRight": {"lon": 124.456, "lat": 23.456}, "bottomLeft": {"lon": 123.456, "lat": 22.456}, "bottomRight": {"lon": 124.456, "lat": 22.456} } ``` - 🧾 **元数据读取** - 从 **XML** 文件或 TIFF header 中提取影像的元数据(metadata) - 包括: - 卫星名称 - Level - 分辨率 - 日期 - 传感器类型 - 返回示例: ```json { "satellite": "SPOT", "level": "L1C", "resolution": {"x": 6.0, "y": 6.0}, "date": "20150906", "sensor": "HRG" } ``` - 🛰️ **多卫星格式兼容** - 已适配:SPOT、Landsat - 可扩展:支持持续添加其他卫星影像类型解析模块 - 🖼️ **缩略图生成** - 使用 **GDAL** 工具生成 `.tif` 文件的缩略图(轻量 PNG) - 返回内容包括: - 缩略图 HTTP 访问地址 - 原始 `.tif` 文件的磁盘路径 - 缩略图生成状态和错误信息(若失败) - 示例: ```json { "preview": "http://192.168.14.237:3030/previews/SPOT_preview.png", "tif": "/data/images/SPOT.tif", "corners": {...}, "cornerSource": "GeoTIFF", "metadata": {...} } ``` - 🧰 **底层依赖** - 使用 [GDAL](https://gdal.org/) 开源工具进行影像解析与缩略图生成 --- ## 🔌 接口说明 ### 1️⃣ 分析 TIFF 文件或文件夹 - **URL**:`GET /analyze` - **参数**: - `folder`:文件夹路径,包含多个 TIFF 文件 - `tif`:单个 TIFF 文件路径 - **返回**:JSON 数组,每个元素包含: - preview:缩略图 URL - tif:原始 TIFF 文件路径 - corners:四角坐标 - cornerSource:坐标来源(GeoTIFF / XML / Unknown) - metadata:影像元数据 + 错误信息(若有) ### 2️⃣ SHP 转 GeoJSON - **URL**:`GET /shp-to-geojson` - **参数**: - `folder`:包含 `.shp` 文件集的文件夹路径 - `mode`:`inline` 返回 JSON 数据,默认返回 HTTP 地址 - **返回**: - inline 模式:直接返回 GeoJSON 内容 - 默认模式:返回 GeoJSON 文件的 HTTP 地址 ### 🧭GeoJSON 转化为单点 接口:`POST /geojson-to-point` 功能:支持多种 GeoJSON 几何类型,将其统一转化为一个点(Point) #### 支持类型 | 类型 | 示例 | 转化逻辑 | |------|------|-----------| | Point | `{ "type": "Point", "coordinates": [116.3, 39.9] }` | 直接返回坐标 | | Polygon | `{ "type": "Polygon", "coordinates": [[[116.2,39.8],[116.5,39.8],[116.5,40.1],[116.2,40.1],[116.2,39.8]]]} ` | 计算所有顶点平均值 | | LineString | `{ "type": "LineString", "coordinates": [[116.2,39.8],[116.5,40.1]] }` | 取中间点或平均点 | | MultiPolygon / MultiLineString / MultiPoint | 自动合并所有点计算质心 | #### 请求示例 ```bash curl -X POST http://localhost:3030/geojson-to-point \ -H "Content-Type: application/json" \ -d '{ "type": "Polygon", "coordinates": [ [ [116.2, 39.8], [116.5, 39.8], [116.5, 40.1], [116.2, 40.1], [116.2, 39.8] ] ] }' --- ## 🚀 启动方式(Docker) ```bash docker stop gdal-node-service docker rm gdal-node-service docker build -t gdal-node-service . docker run -p 3030:3030 -e RESOURCE_PREFIX=http://192.168.14.237:3030 -v D:/z/mount/satellite_images:/data/images -v D:/z/mount/shp_files:/data/shp --name gdal-node-service gdal-node-service ``` ```bash # 如果需要mount另外一台服务器上面的文件夹(这服务器得安装SMB / CIFS 或 NFS),可以先本地挂载远程共享 net use Z: \\192.168.14.50\share\satellite_images /user:username password net use Z: \\192.168.14.50\share\shp_files /user:username password docker run -p 3030:3030 -e RESOURCE_PREFIX=http://192.168.14.237:3030 -v Z:/satellite_images:/data/images -v Z:/shp_files:/data/shp --name gdal-node-service gdal-node-service ``` ### 启动压测脚本: npm install node-fetch@2 node stressTest.js