为 Claude Code 开发自定义 Skill:解决中国地图坐标系转换痛点
作为一个开发者,你一定遇到过这样的困扰:GPS 设备拿到的坐标放到百度地图上显示,位置总是偏了几百米。这不是你的代码有问题,而是"火星坐标系"在作祟。
前言:坐标系混乱的痛点
在使用地图服务时,我们面临着复杂的坐标系环境:
- WGS84:GPS 设备原始坐标,国际标准
- GCJ02:高德、腾讯地图使用的"火星坐标系"
- BD09:百度地图独有的坐标系
- WebMercator:Web 地图常用的投影坐标系
这些坐标系之间的转换一直是开发者的痛点。直到我发现了 gcoord 这个优秀的坐标转换库,并基于它开发了 Claude Code Skill,让坐标转换变得前所未有的简单。
什么是 Claude Code Skill?
Claude Code 是 Anthropic 推出的 AI 命令行工具,而 Skill 是它的自定义功能扩展机制。通过编写 Skill,我们可以让 Claude 理解特定的任务并执行相应的命令。
我开发的 gcoord skill 正是这样一款工具,它可以:
- ✅ 支持 5 种主流坐标系互转
- ✅ 支持单点坐标、GeoJSON 文件批量转换
- ✅ 智能推断用户的坐标系选择
- ✅ 支持中文自然语言调用
核心功能展示
1. 交互式坐标系选择
最让我自豪的功能是交互式参数选择。当用户没有明确指定坐标系时,Claude 会智能提示用户选择,而不是直接使用默认值。
用户: 帮我转换 116.403988,39.914266
Claude: 请选择源坐标系(您当前的坐标使用什么坐标系?)
[WGS84 (GPS)] [GCJ02 (高德/腾讯)] [BD09 (百度)] ...
Claude: 请选择目标坐标系(您要转换到哪个坐标系?)
[WGS84 (GPS)] [GCJ02 (高德/腾讯)] [BD09 (百度)] ...
结果: 116.410232, 39.915670
2. 自然语言理解
Skill 内置了自然语言识别模式,可以从用户的描述中推断坐标系:
# 明确指定
GPS转高德: 116.403988,39.914266
# 上下文推断
把坐标转成百度坐标系
# 文件转换
把 @data.geojson 转成高德坐标
技术实现要点
Skill 文件结构
gcoord/
├── SKILL.md # Skill 定义文件
├── index.js # 核心转换逻辑
├── package.json # 依赖管理
└── test/ # 测试文件
SKILL.md 的关键设计
SKILL.md 是 Claude 理解任务的核心文档,我采用了以下结构:
---
name: gcoord
description: Use when converting coordinates between...
---
# Gcoord - 地理坐标系转换
## When to Use
## Coordinate Systems Reference
## Usage Examples
## Interactive Parameter Selection ← 核心创新
## Implementation
## Common Mistakes
最关键的亮点是 Interactive Parameter Selection 章节,它告诉 Claude:
- 何时应该询问用户(优先级判断)
- 如何使用
AskUserQuestion工具 - 如何从自然语言推断坐标系
交互式问答的 Prompt 设计
### Question Format
当需要询问坐标系时,使用以下格式:
AskUserQuestion({
questions: [{
question: "请选择源坐标系(您当前的坐标使用什么坐标系?)",
header: "源坐标系",
multiSelect: false,
options: [
{
label: "WGS84 (GPS)",
description: "GPS 设备原始坐标,地球坐标"
},
// ...
]
}]
})
这种结构化的指令让 Claude 能够准确理解如何与用户交互。
坐标系别名映射
为了支持中文自然语言,我在 index.js 中实现了别名映射:
const CRS_ALIAS = {
'wgs84': 'WGS84',
'gps': 'WGS84',
'地球坐标': 'WGS84',
'gcj02': 'GCJ02',
'高德': 'GCJ02',
'amap': 'GCJ02',
'腾讯': 'GCJ02',
'火星坐标': 'GCJ02',
'bd09': 'BD09',
'百度': 'BD09',
'baidu': 'BD09',
// ...
};
这样用户可以随意说"高德"、"腾讯"、"火星坐标",都能正确识别为 GCJ02。
安装和使用
安装步骤
# 克隆仓库
git clone https://github.com/zhyt1985/gcoord_skill.git \
~/.claude/skills/gcoord_skill
# 安装依赖
cd ~/.claude/skills/gcoord_skill/gcoord
npm install
在 Claude Code 中使用
安装完成后,直接在 Claude Code 中使用:
# 命令行方式
/gcoord 116.403988,39.914266 --from wgs84 --to gcj02
# 自然语言方式
帮我把这个坐标转换成高德坐标系
GPS 坐标转百度地图
开源贡献
这个项目完全开源,基于以下技术栈:
- gcoord - 核心坐标转换库
- Claude Code - AI 命令行工具
- Node.js - 运行时环境
GitHub 仓库: github.com/zhyt1985/gc…
欢迎:
- 🐛 报告 Bug
- 💡 提出新功能建议
- 🔧 提交 Pull Request
- 📝 改进文档
总结
通过开发这个 Skill,我深刻体会到了 AI 辅助编程的强大。Claude Code 不仅能理解自然语言指令,还能通过 Skill 机制扩展能力,真正实现了"所想即所得"。
坐标转换只是冰山一角,Skill 机制有无限可能。我期待看到更多开发者加入,一起探索 AI 与编程结合的更多可能性。
如果你在开发中有坐标系转换的需求,不妨试试这个 Skill。如果有任何问题或建议,欢迎在 GitHub 上留言交流!
相关链接:
- GitHub: github.com/zhyt1985/gc…
- gcoord 核心库: github.com/hujiulong/g…
- Claude Code: claude.ai/code
如果这篇文章对你有帮助,欢迎给个 ⭐️ Star!