An open API service indexing awesome lists of open source software.

https://github.com/zhyt1985/gcoord_skill

A Claude Code skill for converting geographic coordinates between Chinese map coordinate systems (WGS84/GCJ02/BD09/BD09MC/WebMercator)
https://github.com/zhyt1985/gcoord_skill

bd09 chinese-maps claude-code cli-tool coordinate-system gcj02 skill skills wgs84

Last synced: 2 months ago
JSON representation

A Claude Code skill for converting geographic coordinates between Chinese map coordinate systems (WGS84/GCJ02/BD09/BD09MC/WebMercator)

Awesome Lists containing this project

README

          

# Gcoord Skill

一个用于 Claude Code 的地理坐标系转换工具,专门处理中国地图坐标系互转问题。

## 致谢

本项目基于 [hujiulong/gcoord](https://github.com/hujiulong/gcoord) 开发,向原作者 **hujiulong** 致敬!感谢他提供了优秀的坐标转换核心算法库,让处理坐标系问题变得简单。

## 开发工具

本项目使用以下工具开发:

- **Claude Code** - Anthropic 的 AI 命令行工具
- **GLM 4.7** - 智谱 AI 提供的大语言模型

---

## 功能特性

- 🔄 **多坐标系支持**:WGS84 / GCJ02 / BD09 / BD09MC / WebMercator
- 📄 **文件操作**:支持读取 GeoJSON 文件并进行批量转换
- 🚀 **大文件处理**:自动使用流式处理,支持超过 10MB 的大型文件
- 📊 **进度显示**:实时显示转换进度,便于监控大批量数据处理
- 💬 **自然语言**:支持中英文自然语言指令调用
- 🌏 **坐标系别名**:支持 `高德`、`百度`、`GPS` 等中文别名

## 支持的坐标系

| 代码 | 中文名称 | 适用平台 | 别名 |
|------|----------|----------|------|
| WGS84 | 地球坐标系 | GPS 原始坐标 | `gps`, `地球坐标` |
| GCJ02 | 火星坐标系 | 高德、腾讯地图 | `高德`, `amap`, `腾讯`, `火星坐标` |
| BD09 | 百度坐标系 | 百度地图 | `百度`, `baidu`, `bmap` |
| BD09MC | 百度米制坐标 | 百度地图米制 | `百度米制` |
| WebMercator | 墨卡托投影 | Web 地图 | `墨卡托`, `epsg3857` |

## 安装

将此 skill 安装到 `~/.claude/skills/gcoord/` 目录:

```bash
git clone https://github.com/zhyt1985/gcoord_skill.git ~/.claude/skills/gcoord_skill
cd ~/.claude/skills/gcoord_skill/gcoord
npm install
```

---

## 在 Claude Code 中使用

安装 skill 后,在 Claude Code 中可以直接使用 `/gcoord` 命令或自然语言调用:

### 方式一:使用 /gcoord 命令

```
/gcoord 116.403988,39.914266 --from wgs84 --to gcj02
```

### 方式二:自然语言调用

```
# 单点坐标转换
帮我把 116.403988,39.914266 转成高德坐标

# 文件转换
把 @data.geojson 转成百度坐标系

# 坐标系互转
WGS84 转 GCJ02: [116.403988, 39.914266]

# 转换并指定输出文件
把 data.geojson 转成高德坐标,输出为 result.geojson
```

### 支持的自然语言模式

| 模式 | 示例 |
|------|------|
| "转成/转换为/转到" | 转成高德坐标 |
| "在...地图显示" | 在百度地图上显示 |
| "...坐标转..." | GPS坐标转百度 |
| "帮我转换/帮我转" | 帮我转换成火星坐标 |

### 交互式坐标系选择

当您未指定坐标系参数时,Claude Code 会智能提示您选择:

#### 使用场景

**场景 1: 未指定任何坐标系**
```
帮我转换 116.403988,39.914266

# Claude 会提示选择坐标系
```

**场景 2: 从上下文推断**
```
把 116.403988,39.914266 在百度地图上显示
# Claude 只会询问源坐标系(目标已明确为百度)
```

**场景 3: 明确指定参数**
```
/gcoord 116.403988,39.914266 --from WGS84 --to GCJ02
# 不会提示,直接转换
```

---

## 命令行使用

### 基本用法

```bash
# 单点坐标转换
node index.js --input "116.403988,39.914266" --from WGS84 --to GCJ02

# GeoJSON 字符串转换
node index.js --input '{"type":"Point","coordinates":[116.403988,39.914266]}' --from WGS84 --to BD09

# 文件转换
node index.js --file data.geojson --from WGS84 --to GCJ02 --output result.geojson

# 原地转换(覆盖原文件)
node index.js --file data.geojson --from WGS84 --to GCJ02 --in-place

# 大文件流式处理
node index.js --file large-data.geojson --from WGS84 --to GCJ02 --stream
```

### 命令行参数

| 参数 | 简写 | 说明 |
|------|------|------|
| `--input ` | `-i` | 输入坐标或 GeoJSON 字符串 |
| `--file ` | `-F` | 指定输入文件路径 |
| `--output ` | `-o` | 指定输出文件路径 |
| `--from ` | `-f` | 源坐标系 |
| `--to ` | `-t` | 目标坐标系 |
| `--in-place` | `-I` | 原地转换,覆盖原文件 |
| `--stream` | `-s` | 强制启用流式处理 |

## 使用示例

### 示例 1:转换单点坐标

```bash
node index.js --input "116.403988,39.914266" --from WGS84 --to GCJ02
```

**输出:**
```
转换: WGS84 → GCJ02
结果: 116.410232, 39.915670
```

### 示例 2:转换 GeoJSON 文件

```bash
node index.js --file beijing-poi.geojson --from WGS84 --to GCJ02 --output beijing-poi-gcj02.geojson
```

**输出:**
```
文件: beijing-poi.geojson
大小: 0.83 MB
转换: WGS84 → GCJ02

处理中...
[██████████████████████████████] 100.0% (853/853) ETA: 0.0s
✓ 已保存到: beijing-poi-gcj02.geojson
```

### 示例 3:使用中文别名

```bash
# 使用中文别名
node index.js --input "116.403988,39.914266" --from gps --to 高德

# 转换到百度坐标系
node index.js --file data.geojson --from wgs84 --to 百度
```

### 示例 4:批量坐标转换

```bash
node index.js --input "116.403988,39.914266
121.499763,31.239586" --from WGS84 --to GCJ02
```

**输出:**
```
转换: WGS84 → GCJ02
结果: 116.41023240747266, 39.915670251113426
121.50419587831874, 31.237572062731754
```

## 支持的输入格式

- **单点坐标**:`116.403988,39.914266`
- **坐标数组**:`[116.403988, 39.914266]`
- **批量坐标**:多行文本,每行一个坐标
- **GeoJSON 字符串**:`{ "type": "Point", "coordinates": [...] }`
- **GeoJSON 文件**:通过 `--file` 参数指定

## 依赖

- [gcoord](https://github.com/hujiulong/gcoord) v1.0.7 - 坐标转换核心库

## 测试

```bash
cd gcoord && npm test
```

使用 Node.js 内置 `node:test` 运行,零外部依赖,覆盖单点转换、数组格式、批量转换、GeoJSON、无效坐标系报错、中英文别名、空输入及边界情况。

## 注意事项

1. **坐标系选择**:GPS 设备获取的原始坐标是 WGS84,在中国地图服务上显示需要先转换为 GCJ02(高德/腾讯)或 BD09(百度)
2. **原地转换**:使用 `--in-place` 会直接覆盖原文件,请确保有备份
3. **大文件处理**:文件大于 10MB 时自动启用流式处理以节省内存

## 许可证

MIT License - 详见 [LICENSE](LICENSE) 文件

## 贡献

欢迎提交 Issue 和 Pull Request!

## 相关链接

- [gcoord 库](https://github.com/hujiulong/gcoord) - 坐标转换核心算法
- [Claude Code](https://claude.ai/code) - Claude AI 的命令行工具
- [GLM 4.7](https://bigmodel.cn/glm-coding) - 智谱 AI 大语言模型