城市距离计算Skill:无需 API 密钥,一次算出两城的直线距离与驾车距离
- 核心能力:输入两个城市的经纬度,即可同时得到「直线(Haversine)距离」和「驾车道路距离」,全部基于免费的 OpenStreetMap 公共服务,无需任何 API 密钥。
- 零成本起步:直线距离用本地公式算,道路距离调用
routing.openstreetmap.de公共路由端点,不产生费用,也不需要注册账号。 - 附加亮点:可沿路线采样并用免费的 Nominatim 做反向地理编码,粗略列出途经的主要城镇,适合做路线可视化与行程规划。
- 门槛极低:Node.js 18+(原生 fetch 可用)或 curl + jq 即可跑通,技能自带示例脚本
city_distance_calculator.js与EXAMPLES.md。 - 注意事项:公共服务的速率限制需要尊重,生产环境建议自建 OSRM / GraphHopper 或改用带 SLA 的商业 API。
该技能叫什么?如何一键安装 AI 技能提升开发效率?
技能中文名:城市距离计算Skill 技能英文名:city-distance 技能ID:13128
它解决的是一个很具体、但日常开发中反复出现的小痛点:想知道「巴黎到柏林到底多远」「这两个城市开车要跑多少公里」「路上大概会经过哪些城镇」,过去通常要去查地图网页、截图记数字,或者接入一个需要申请密钥、配置计费账户的地图 API。城市距离计算Skill 把这套流程压缩成一次调用:直线距离用 Haversine 公式在本地算,道路距离交给免费的 OpenStreetMap 路由端点,中间不涉及密钥、账单和账号体系。
一键安装的思路与步骤:
- 确认前提条件:如果走 Node.js 示例,需要 Node.js 18 及以上版本(该版本起原生支持
fetch);如果走 Bash 示例,需要本机具备curl与jq。除此之外不需要申请任何 API 密钥。 - 找到安装入口:在 AI 技能市场 / 技能库中,按技能名称「城市距离计算Skill」或技能ID「13128」检索并安装;具体安装命令、安装方式与目录约定,请以官方说明为准。
- 让技能生效:安装完成后,在支持技能调用的 AI 客户端或代理中重新加载技能列表,确认
city-distance出现在可用技能中;若使用命令行方式,可参考技能附带的city_distance_calculator.js脚本作为验证载体。 - 验证是否真的可用:用技能自带的经典示例做一次闭环验证——巴黎(48.8566, 2.3522)到柏林(52.52, 13.4050)。能返回直线距离与驾车距离两个以公里为单位的数值,并且数值合理(直线距离明显小于驾车距离),即说明安装与调用链路正常。
- 纳入日常工作流:验证通过后,把「给两个城市名或坐标,返回直线距离 + 驾车距离 +(可选)途经城镇」写成固定的提示词模板,后续重复调用即可。
该技能的主要功能和特点
- 双距离计算:同时提供直线距离与道路距离。直线距离用 Haversine 公式本地计算,结果稳定、无网络依赖;道路距离走 OpenStreetMap 的驾车路由端点,更贴近真实行驶里程。
- 完全免密钥:使用的是
routing.openstreetmap.de公共路由服务与免费的 Nominatim 地理编码服务,不需要注册、不需要 token、不需要绑定支付方式。 - 可选的途经城市识别:沿路线按采样点做反向地理编码,能粗略列出驾驶路线上的主要城镇,用于规划说明或地图可视化。
- 自带可运行示例:技能包含
city_distance_calculator.js示例脚本,演示了完整的计算过程;EXAMPLES.md给出巴黎–柏林、巴黎–迪拜等工作示例,可直接对照学习。 - 工程化细节到位:Node 示例里已经内置了
AbortController超时控制、HTTP 状态码校验与错误抛出,避免请求悬挂;Bash 示例使用set -euo pipefail提升脚本健壮性。 - 和普通工具比强在哪:相比手动在地图网站查距离,它可以被脚本批量调用;相比商业地图 API,它没有密钥与计费门槛,适合快速验证、内部工具、教学演示和轻量自动化场景。
如何使用该技能?
第 1 步:准备运行环境。
Node.js 路线确认版本 ≥ 18,Bash 路线确认 curl、jq 可用。这一步只需做一次。
第 2 步:确定两个城市的经纬度。
技能以经纬度为输入。示例中巴黎为 48.8566, 2.3522,柏林为 52.52, 13.4050。若手上只有城市名,可先用免费的地理编码服务(如 Nominatim)把城市名转成经纬度,再进入下一步。
第 3 步:调用技能或直接跑示例。 在 AI 客户端中,可以用技能给出的代理提示词直接发起请求,例如:
使用免费的 OpenStreetMap 服务计算巴黎和柏林之间的直线(Haversine)距离和驾驶距离。返回距离(以公里为单位),并可选地列出驾驶路线上的主要城镇。
也可以直接执行技能附带的脚本,观察完整计算过程。
第 4 步:理解输出结果。
调用会返回两类数值,单位均为公里。直线距离由 Haversine 公式算出,只与两个坐标点有关;道路距离来自驾车路由端点返回的 routes[0].distance(单位是米,需要除以 1000 换算成公里)。
第 5 步:需要途经城镇时增加采样。 沿路线等距取若干采样点,逐个送入 Nominatim 做反向地理编码,即可得到沿途大致settlement 列表。采样点越密,结果越细,但对公共服务的请求次数也越多,建议控制在个位数到十几次之间。
第 6 步:做好缓存与限速。
同一对城市的距离结果基本不变,建议把「城市对 → 距离」写入缓存或本地表,避免重复请求 routing.openstreetmap.de 与 Nominatim。这是使用公共服务的基本礼仪,也能显著提升你自己的响应速度。
同类型竞品对比分析
| 方案名称 | 定位 | 核心功能 | 安装/使用门槛 | 适用场景 | 优势与不足 |
|---|---|---|---|---|---|
| 城市距离计算Skill(city-distance) | 轻量、免密钥的距离计算技能 | Haversine 直线距离 + OSM 驾车距离 + 可选途经城镇 | 低:Node.js 18+ 或 curl/jq,无需 API 密钥 | 快速估算、内部工具、教学演示、批量粗算 | 优势是零成本、零密钥、开箱即用;不足是受公共服务速率限制,不适合高并发生产系统 |
| Google Maps Distance Matrix API | 商业地图距离服务 | 驾车/步行/骑行距离与时长、实时路况 | 较高:需申请密钥、配置计费账户 | 对时效与路况敏感的商业应用 | 优势是数据成熟、SLA 完善;不足是有费用与配额门槛,接入流程较长 |
| 自建 OSRM / GraphHopper 实例 | 自托管路由引擎 | 完整路由计算、可定制路网与策略 | 高:需要服务器、路网数据导入与运维 | 高并发、数据可控的生产环境 | 优势是可扩展、无第三方速率限制;不足是部署与维护成本高,短期项目不划算 |
| 本地表格/脚本手算 Haversine | 纯公式计算 | 只算直线距离 | 极低:任何语言几行代码 | 只需大致空间距离的场景 | 优势是完全离线、零依赖;不足是拿不到真实道路里程,答案偏乐观 |
该技能的典型应用场景与实际体验情况
场景一:内容运营做「城市对比」类内容。 运营同学要写「两座城市之间的迁徙与交通」类文章,需要一组「直线距离 vs 驾车距离」的对照数据。过去是逐个去地图网站查、手工记录。用这个技能可以一次性拿到两个数值,并且用巴黎–柏林、巴黎–迪拜这类现成示例做格式参照,产出效率明显提升。实际体验上,上手几乎没有门槛,唯一需要注意的是:直线距离永远小于或等于道路距离,如果出现反过来的结果,说明输入坐标写错了。
场景二:后端/前端开发者做原型验证。 在正式接入商业地图 API 之前,需要先把「距离计算 + 路线展示」的业务流程跑通。用这个技能可以在不申请密钥的前提下快速搭出原型,验证接口形态、数据结构和 UI 表现。实际体验是「省掉了一整轮申请审批」,但要注意它更适合原型与内部验证,一旦进入生产并面临高并发,应按照技能自身的建议迁移到自建 OSRM / GraphHopper 或商业 API。
场景三:物流/差旅初步规划,需要知道大概经过哪些城市。 规划一条长途驾驶路线时,除了总里程,团队还想知道沿途大致会经过哪些城镇。技能提供的思路是沿路线采样 + Nominatim 反向地理编码,得到一份粗略的定居点清单。实际体验上这份清单是「大致」而非精确里程桩,适合做示意与沟通,不适合作为计费或合规依据;另外采样点不宜过多,否则容易触发公共服务的速率限制。
场景四:数据分析与教学演示。 做地理相关的数据分析或课程演示,需要一批城市对的直线距离作为基础特征。Haversine 公式本地计算、无网络依赖,结果可复现,非常适合放进 Notebook 或脚本里。实际体验是快且稳定,但要注意 Haversine 假设地球是球体,长距离计算会有一定近似误差,用于特征工程通常可以接受。
该技能能为用户带来的价值
- 成本归零:不需要 API 密钥、不需要计费账户,避免了「为了算几个距离先走一遍商务流程」的时间损耗。
- 从「查」到「算」:把距离从人工查询的信息,变成可脚本化、可批量调用的数据,这是自动化与批量分析的前提。
- 双视角决策:直线距离反映空间关系,道路距离反映实际行驶成本,两者结合才能支撑合理的路线与预算判断。
- 可复用的工程范式:技能自带的超时控制、错误处理、限速与缓存建议,本身就是一份「如何正确使用免费公共服务」的参考实现,长期看能帮团队规避不少线上事故。
- 平滑升级路径:从免费公共服务起步做验证,验证成功后再迁移到自建 OSRM / GraphHopper 或商业 API,风险与成本都被前置摊薄。
常见问题 FAQ
Q1:怎么安装?需要申请 API 密钥吗?
不需要密钥。安装前只需确认运行环境:Node.js 示例要求 Node.js 18+(原生 fetch 可用),Bash 示例要求本机具备 curl 与 jq。然后在技能市场或技能库中按名称或技能ID 13128 检索安装即可,具体安装命令与入口以官方说明为准。安装后用巴黎–柏林示例做一次验证,能返回两个公里数值即视为生效。
Q2:这个技能收费吗?有调用次数限制吗?
技能本身基于免费的 OpenStreetMap 公共服务(routing.openstreetmap.de 与 Nominatim)和本地 Haversine 公式实现,不涉及付费。但公共服务有使用政策与速率限制,技能文档里也明确提示要尊重使用规则:缓存结果、避免大量自动轮询。若业务量较大,建议自建 OSRM / GraphHopper 或选用带 SLA 的商业 API。
Q3:算出来的距离准不准?为什么和导航软件显示的不一样? 直线距离由 Haversine 公式计算,它把地球近似为球体,长距离会有少量近似误差;道路距离来自 OSM 的驾车路由,与商业导航在路网数据更新频率、路线偏好(是否规避收费路段、是否考虑实时路况)上存在差异,因此数值不同是正常的。它适合做估算、对比与规划参考,不适合作为计费或合同依据。
Q4:这个技能适合谁用? 适合三类人:一是需要快速拿到距离数据但不想接商业 API 的开发者;二是做内容、报告、方案时需要城市距离对照的运营与分析人员;三是想验证路线类产品原型、又不想先走采购流程的团队。如果你需要实时路况、精确到分钟的 ETA 或高并发商用,应转向商业地图 API 或自建路由引擎。
Q5:和商业地图 API、自建 OSRM 相比该怎么选? 按「量级与确定性」来选:少量、偶发、内部使用,选城市距离计算Skill 最省事;中等规模且要求数据可控,自建 OSRM / GraphHopper 更合适;面向 C 端、需要实时路况与 SLA 保障,选商业地图 API。三者并不互斥,常见做法是先用本技能做原型验证,跑通业务后再按需升级。