技术博客
两点直线距离:如何计算两坐标间的真实公里数?

两点直线距离:如何计算两坐标间的真实公里数?

作者: 万维易源
2026-08-27
两点直线距离距离计算坐标系一致
# 两点直线距离:如何计算两坐标间的真实公里数? > 接口:坐标系转换(apiCode=1252,接入点 2「两点直线距离」)· 免费 · 返回 JSON · 适用人群:全栈工程师、数据分析者 · 阅读时间:约 6 分钟 ## TL;DR - 接入点 2 基于两个经纬度坐标计算**直线距离**,返回 `distance`,单位是**米**。 - 接口本身**没有坐标系类型参数**,直接对原始经纬度做欧氏距离计算。 - 关键点:两个坐标必须处于**同一坐标系**,距离才有意义;混用系(如一个是 WGS84、一个是 GCJ02)算出来的距离会偏差。 ## Why 配送范围、门店辐射、两点间的"大概多远",都绕不开距离计算。本篇讲清两点直线距离接口怎么用,更重要的是讲清一个容易踩的坑:它不管你是什么坐标系,直接拿两个数字算距离——所以算之前,务必先把两个坐标统一到同一系。 ## What 前置条件:理解三种坐标系(见[WGS84 / GCJ02 / BD09 到底是什么?](https://www.showapi.com/guides/coord-convert-concepts-1252))。 | 项 | 值 | |----|----| | 接口地址 | `https://route.showapi.com/1252-2?appKey={your_appKey}` | | 请求方式 | POST / GET | | 必填参数 | `from`(起点经纬度,逗号分隔)、`to`(终点经纬度,逗号分隔) | | 返回 | `distance`(米)、`ret_code` | > 注意:接入点 2 **没有** `from`/`to` 坐标系类型参数(与接入点 1 不同),它直接对传入的原始经纬度计算距离。 ## How **步骤 1:确认两坐标同系**。例如都用 WGS84(GPS)或都先转成 GCJ02。 **步骤 2:调用距离接口**: ```python import requests app_key = "YOUR_APPKEY" resp = requests.post( "https://route.showapi.com/1252-2", params={"appKey": app_key}, data={"from": "113.194329,23.23470", "to": "82.239727,39.389397"}, timeout=10, ).json() body = resp["showapi_res_body"] if body.get("ret_code") != 0: raise RuntimeError(body) print("直线距离(米):", body["distance"], "≈", round(body["distance"] / 1000, 1), "公里") ``` cURL: ```bash curl -X POST "https://route.showapi.com/1252-2?appKey=YOUR_APPKEY" \ -H "content-type: application/x-www-form-urlencoded" \ -d "from=113.194329%2C23.23470&to=82.239727%2C39.389397" ``` Node.js(fetch): ```javascript const appKey = "YOUR_APPKEY"; const controller = new AbortController(); const timer = setTimeout(() => controller.abort(), 10000); try { const resp = await fetch(`https://route.showapi.com/1252-2?appKey=${appKey}`, { method: "POST", headers: { "content-type": "application/x-www-form-urlencoded" }, body: new URLSearchParams({ from: "113.194329,23.23470", to: "82.239727,39.389397" }), signal: controller.signal, }); const res = (await resp.json()).showapi_res_body; if (res.ret_code !== 0) throw new Error(JSON.stringify(res)); console.log("直线距离(米):", res.distance, "≈", (res.distance / 1000).toFixed(1), "公里"); } finally { clearTimeout(timer); } ``` ## 返回示例与解析 ```json { "showapi_res_code": 0, "showapi_res_body": { "distance": 3419721, "ret_code": 0 } } ``` | 字段 | 类型(实测) | 说明 | |------|------|------| | `showapi_res_body.distance` | Number | 两点直线距离,**单位:米**(示例 3419721 米 ≈ 3420 公里) | | `showapi_res_body.ret_code` | Number | 业务成功标识(示例 0) | > 文档参数表把 `distance` 标注为 String,但返回示例为数字 `3419721`,**以实际返回数字为准**。 ## 进阶 / 边界 - **同一坐标系是前提**:本端点无坐标系参数,直接对原始经纬度算欧氏距离。若起点是 WGS84、终点是 GCJ02,两点本身就差了加偏量,算出的"距离"并不等于真实地理距离。正确做法:先都转成同一系(用接入点 1),再算距离。 - **直线距离≠路程**:返回的是两点直线(大圆近似)距离,不含道路、绕行,导航里程请以导航服务为准。 - **经纬度顺序**:`from`/`to` 均为"经度,纬度",经度在前。 ## FAQ **Q1:distance 的单位是什么?** A:米(m)。示例 3419721 即约 3420 公里。 **Q2:这个接口能自动识别坐标系吗?** A:不能。接入点 2 没有坐标系参数,直接对传入的原始经纬度算距离;务必保证两点同系。 **Q3:两个坐标一个 WGS84 一个 GCJ02 能算吗?** A:能算,但结果不准(差了加偏量)。建议先用接入点 1 把两者统一到同一系再算。 **Q4:返回的是道路里程吗?** A:不是,是直线距离;实际路程请以导航接口为准。 **Q5:`distance` 为什么文档标 String 实际是数字?** A:文档参数表类型标注与返回示例不一致,以实际返回的数字为准。 ## 相关能力 / 下一步阅读 - [WGS84 / GCJ02(火星坐标)/ BD09 到底是什么?为什么必须转换?](https://www.showapi.com/guides/coord-convert-concepts-1252) - [坐标系转换:5 分钟接入,从第一条 WGS84→GCJ02 结果开始](https://www.showapi.com/guides/coord-convert-quickstart-1252) - [坐标系转换避坑:点位偏移 500 米、距离算错、坐标系混用](https://www.showapi.com/guides/coord-convert-pitfalls-1252) - **本系列共 12 篇**:查看[坐标系转换指南总目录](https://www.showapi.com/guides/coord-convert-guides-1252)