生活工具 · 地理位置

经纬度距离

两点经纬度→直线/飞行距离

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 54 次使用
Haversine 大圆距离 · R=6371km
A起点point A
B终点point B
常见城市 presets · 填入目标 A 点

距离结果 great-circle distance

直线(大圆)距离 · 飞行距离约等于此值(实际航线略长)
公里 km
海里 nmi
英里 mi
初始方位角 A→B bearing
经纬网示意 graticule · 等距圆柱投影
A 点 B 点 大圆航线(球面最短)
就绪 · 输入两点经纬度即可计算大圆距离与方位角
第一节

关于本工具

About

用地图测距工具拉两点,算的是路网曲线,不是直线。这个工具只做一件事:把两对经纬度坐标丢进 Haversine 公式,算出地球球面上的最短弧长——也就是飞行航线或无线电信号的理论直线距离。地理信息从业者做缓冲区分析、户外爱好者规划徒步穿越路线、航模玩家估算遥控信号极限时,用它比地图工具快得多。所有计算在浏览器本地完成,经纬度数据不会离开设备。

使用场景

无人机植保边界

植保队接到一块 800 亩的玉米田,地块形状不规则,测绘员用 RTK 打了四个拐点坐标。用本工具算出对角两点直线距离 1.2 公里,据此估算航线总长度和药箱换点位置,避免无人机飞越未测区导致漏喷或重喷。以前靠地图拉尺估算,误差常超 200 米,现在每块田的航线规划时间从 20 分钟缩短到 5 分钟。

登山队补给点选址

一支 12 人登山队计划穿越秦岭鳌太线,需要在海拔 3000 米处设两个补给点。领队用卫星电话报回两个营地坐标,通过本工具算出直线距离 4.7 公里,结合等高线图判断中间无陡崖,决定将第二个补给点设在两营地中点偏西 300 米处。以往靠经验估算,曾因实际距离多出 1.5 公里导致队员断水。

光伏板阵列间距

在青海建 50MW 光伏电站,设计院给出组件阵列南北间距需根据冬至日太阳高度角计算。施工队用本工具输入阵列两端坐标,算出南北方向投影距离 8.3 米,再结合当地纬度验证阴影长度,确认设计间距 9 米符合规范。若用传统手算加图纸量测,一个方阵就要多花 40 分钟。

渔船遇险定位报告

一艘渔船在舟山外海 150 海里处主机故障,船长通过北斗终端发出坐标。岸上救援中心用本工具输入渔船坐标与最近救助船坐标,算出直线距离 32.7 海里,判定救助船 2 小时可抵达,同时算出渔船到最近避风港距离 47 海里,决定派拖轮而非直升机。比用海图量距快 10 倍,且避免因海图投影变形产生的 3 海里误差。

跨省管道焊缝定位

天然气管道巡检员发现某段焊缝疑似裂纹,用 GPS 记录坐标(N32°15′23.7″ E118°42′11.5″)。通过本工具输入该点与最近阀门井坐标,算出直线距离 3.6 公里,结合管道里程桩号确定该焊缝位于 23 号桩+150 米处。维修队据此直接带对应规格的管箍出发,不用到现场先测距再回库房取料,单次抢修节省 2 小时。

对比矩阵

维度本工具在线经纬度计算站手工计算(公式+计算器)
速度输入即出,毫秒级需加载页面,网络延迟数分钟,依赖公式熟练度
隐私数据不出浏览器(纯前端)上传至服务器处理完全本地,无数据外传
离线可用支持(页面加载后断网仍可用)不可用,需联网完全离线
输入容错自动处理度分秒/小数/负号多数只接受十进制小数需手动转换格式,易出错
批量计算不支持(单次一对)部分支持 CSV 上传可批量但极耗时
结果精度保留 6 位小数(约 0.1 米)通常 2-4 位小数取决于计算器精度和舍入
学习成本零,打开即用低,但需理解输入格式高,需掌握 Haversine 公式
第二节

使用指南

Getting Started

使用步骤

  1. 1在「起点坐标」栏输入第一点经纬度,格式如 39.9042,116.4074(纬度,经度),输入后地图标记自动定位
  2. 2在「终点坐标」栏输入第二点经纬度,格式相同,地图上立即显示两点连线与距离数值
  3. 3点击「计算」按钮,结果区输出直线距离(公里/英里/海里),同时显示 Haversine 算法名称
  4. 4如需调整坐标,直接修改输入框数值,地图连线与距离结果同步更新,无需重新点击计算

输入输出示例

输入输出说明
起点:39.9042, 116.4074(北京天安门) 终点:31.2304, 121.4737(上海人民广场)约 1067.5 公里常规:典型国内长途航线,用户最常查询的城际距离,验证基本计算准确性
起点:40.7128, -74.0060(纽约自由女神像) 终点:51.5007, -0.1246(伦敦大本钟)约 5570.3 公里常规:跨大西洋国际航线,涉及负经度(西经),验证工具对负坐标的处理
起点:0, 0(赤道与本初子午线交点) 终点:0, 1(赤道上东移1度)约 111.3 公里边界:赤道上经度1度对应的精确距离,验证Haversine公式在低纬度时的精度
起点:90, 0(北极点) 终点:90, 180(北极点,经度不同)0 公里边界:极点处经度无意义,所有经线汇聚,正确输出应为0,验证极坐标奇点处理
起点:35.6895, 139.6917(东京塔) 终点:35.6895, 139.6917(同一坐标)0 公里边界:完全相同坐标,距离应为0,验证除零或浮点精度问题
起点:48.8566, 2.3522(巴黎埃菲尔铁塔) 终点:48.8566, 2.3522(同一坐标,但用户误以为不同地点)0 公里易错:用户可能复制粘贴相同坐标却期待非零结果,需提示检查输入是否重复
起点:90, 0(北极点) 终点:-90, 0(南极点)约 20003.9 公里易错:地球表面最远两点(对跖点),验证大圆距离算法是否精确到半周长(约20004公里)

常见错误对照

1.经纬度符号写反(北纬写成南纬)

✗ 错误北京:39.9042°S, 116.4074°E
✓ 修复北京:39.9042°N, 116.4074°E

北纬用 N、南纬用 S;东经用 E、西经用 W。符号写反会导致距离计算点落在错误半球,误差可达上万公里。

2.度分秒格式未转十进制小数

✗ 错误39°54'15"N, 116°24'26"E
✓ 修复39.9042, 116.4074

本工具只接受十进制小数格式(如 39.9042),度分秒需先换算:度 + 分/60 + 秒/3600。直接输入度分秒字符串会解析失败或得到错误值。

3.西经/南纬忘记加负号

✗ 错误悉尼:33.8688°S, 151.2093°E → 输入 33.8688, 151.2093
✓ 修复悉尼:-33.8688, 151.2093

南纬和西经在十进制格式中必须用负号表示(南纬 -,西经 -)。不加负号会被当作北纬/东经,距离计算完全偏离。

4.经纬度顺序颠倒(经度在前、纬度在后)

✗ 错误上海:121.4737, 31.2304
✓ 修复上海:31.2304, 121.4737

本工具严格按「纬度, 经度」顺序输入(与地理坐标惯例一致)。若按「经度, 纬度」输入,两点坐标会错位,计算出的距离无意义。

5.小数点精度不足导致距离偏差

✗ 错误北京:39.9, 116.4
✓ 修复北京:39.9042, 116.4074

经纬度小数点后每减少一位,地面误差约 11 km。保留 4 位小数可保证 ~11 m 精度,保留 2 位则误差达 1 km 以上。

6.输入了非数字字符(空格/逗号/中文)

✗ 错误39.9042°N, 116.4074°E
✓ 修复39.9042, 116.4074

工具只解析纯数字和负号、小数点。包含字母(N/S/E/W)、度符号(°)、中文('北')或多余空格都会导致解析失败或截断错误。

7.用城市名代替经纬度坐标

✗ 错误北京, 上海
✓ 修复39.9042, 116.4074 与 31.2304, 121.4737

本工具是纯数学计算器,不内置地名数据库。输入城市名会被当作无效字符,必须手动查得十进制坐标再输入。

8.混淆了直线距离与驾车/步行距离

✗ 错误输入北京到上海坐标,期望得到 1200 km 驾车距离
✓ 修复输入北京到上海坐标,得到 1060 km 直线距离

本工具计算的是大圆距离(球面最短路径),不包含道路、地形、交通限制。实际驾车距离通常比直线距离多 20%-50%。

第三节

工作原理

How It Works

核心公式

d = 2 × R × arcsin(√(sin²((lat2 - lat1)/2) + cos(lat1) × cos(lat2) × sin²((lon2 - lon1)/2)))

变量说明

  • d两点间大圆距离,单位千米
  • R地球平均半径,取 6371 km
  • lat1, lat2起点、终点纬度,弧度制
  • lon1, lon2起点、终点经度,弧度制

示例

北京天安门(39.9042°N, 116.3974°E)到上海外滩(31.2304°N, 121.4737°E)。转弧度:lat1=0.6966, lon1=2.0313, lat2=0.5453, lon2=2.1201。代入:sin²((0.5453-0.6966)/2)=sin²(-0.07565)=0.00572;cos(0.6966)×cos(0.5453)×sin²((2.1201-2.0313)/2)=0.7660×0.8554×sin²(0.0444)=0.6552×0.00197=0.00129;和=0.00572+0.00129=0.00701;开方=0.08373;arcsin(0.08373)=0.08380;d=2×6371×0.08380≈1068 km。

输入两点经纬度纬度: -90~90°Haversine 公式球面三角计算直线距离单位: 公里 / 英里角度转弧度度数 × π / 180地球半径6371 km (WGS-84)
用户输入 本地处理 输出结果
第四节

开发者集成

For Developers

5 种主流语言实现,复制即用:

import math def haversine(lat1, lon1, lat2, lon2): R = 6371.0 # 地球平均半径(千米) dlat = math.radians(lat2 - lat1) dlon = math.radians(lon2 - lon1) a = math.sin(dlat/2)**2 + math.cos(math.radians(lat1)) * math.cos(math.radians(lat2)) * math.sin(dlon/2)**2 c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a)) return R * c # 示例:北京→上海 print(f"{haversine(39.9042, 116.4074, 31.2304, 121.4737):.2f} km") # 输出约 1067.58 km
function haversine(lat1, lon1, lat2, lon2) { const R = 6371; // 千米 const toRad = deg => deg * Math.PI / 180; const dlat = toRad(lat2 - lat1); const dlon = toRad(lon2 - lon1); const a = Math.sin(dlat/2)**2 + Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * Math.sin(dlon/2)**2; return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); } console.log(haversine(39.9042, 116.4074, 31.2304, 121.4737).toFixed(2) + ' km'); // 1067.58 km
package main import ( "fmt" "math" ) func haversine(lat1, lon1, lat2, lon2 float64) float64 { R := 6371.0 dlat := (lat2 - lat1) * math.Pi / 180 dlon := (lon2 - lon1) * math.Pi / 180 a := math.Sin(dlat/2)*math.Sin(dlat/2) + math.Cos(lat1*math.Pi/180)*math.Cos(lat2*math.Pi/180)*math.Sin(dlon/2)*math.Sin(dlon/2) return R * 2 * math.Atan2(math.Sqrt(a), math.Sqrt(1-a)) } func main() { fmt.Printf("%.2f km\n", haversine(39.9042, 116.4074, 31.2304, 121.4737)) // 1067.58 km }
#!/bin/bash # 依赖 bc 和 awk,通常预装 awk 'BEGIN { pi = 4*atan2(1,1) R = 6371 lat1 = 39.9042; lon1 = 116.4074 lat2 = 31.2304; lon2 = 121.4737 dlat = (lat2-lat1)*pi/180 dlon = (lon2-lon1)*pi/180 a = sin(dlat/2)^2 + cos(lat1*pi/180)*cos(lat2*pi/180)*sin(dlon/2)^2 c = 2*atan2(sqrt(a), sqrt(1-a)) printf "%.2f km\n", R*c }' # 输出 1067.58 km
fn haversine(lat1: f64, lon1: f64, lat2: f64, lon2: f64) -> f64 { let r = 6371.0; let dlat = (lat2 - lat1).to_radians(); let dlon = (lon2 - lon1).to_radians(); let a = (dlat/2.0).sin().powi(2) + lat1.to_radians().cos() * lat2.to_radians().cos() * (dlon/2.0).sin().powi(2); r * 2.0 * a.sqrt().atan2((1.0 - a).sqrt()) } fn main() { println!("{:.2} km", haversine(39.9042, 116.4074, 31.2304, 121.4737)); // 1067.58 km }
第五节

常见问题

Q & A
我输入的经纬度格式是“30.1234, 120.5678”,这样对吗?

对的。本工具支持十进制度数格式,直接用逗号或空格隔开纬度(前)和经度(后)即可。注意纬度范围 -90 到 90,经度 -180 到 180;如果写成“120°34′12″”这种度分秒格式,需要先转换成十进制再输入。工具不自动解析度分秒,这是最常见的输入错误。

算出来的距离是直线距离,还是开车或骑行的路?

是直线距离(大圆距离),即地球表面两点之间最短的弧线长度,也叫飞行距离。不是驾车或骑行路线,因为路线受道路、地形、红绿灯影响。比如北京到上海直线约 1080 公里,但开车实际要走 1200+ 公里。本工具适合估算航线、信号覆盖半径、地理跨度,不适合导航规划。

为什么我用手机地图量出来的距离跟这个工具算的不一样?

原因有两点。第一,地图 App 的测距工具默认沿道路或步行路径,不是直线;第二,即使选“直线测距”,不同 App 使用的椭球模型(如 WGS-84、GCJ-02、BD-09)和算法(Haversine、Vincenty)不同,结果会有几十到几百米的偏差。本工具使用 Haversine 公式,基于 WGS-84 标准椭球,精度对日常使用足够,但跨大洋或极地场景误差会稍大。

我算出来结果单位是公里,能不能换成英里?

本工具默认输出公里(km),不提供单位切换功能。如果需要英里,可以将公里数乘以 0.6214 自行换算。例如 1000 公里 ≈ 621.4 英里。如果经常需要英里,建议找专门的单位换算工具,或本页复制结果后手动转。

经纬度输反了会怎样?会不会算错?

会算错,但结果不一定离谱。例如北京坐标(39.9°N, 116.4°E),如果输成(116.4, 39.9),纬度超过 90 度,工具会提示无效。但如果是上海(31.2°N, 121.5°E)输成(121.5, 31.2),纬度 121.5 超范围,同样报错。不过如果两点都输反且数值都在 -90~90 范围内(比如小范围坐标),工具可能给出一个错误但看似合理的距离。建议养成“纬度在前、经度在后”的习惯,且每次检查数值是否在合理范围。

这个工具需要联网吗?会不会把我的坐标上传?

不需要联网。本工具完全在浏览器本地运行(前端 JavaScript 计算),不会将你输入的经纬度发送到任何服务器。所有计算都在你电脑或手机的内存里完成,刷新页面后数据即消失。所以隐私上非常安全,可以放心输入精确坐标。

一次能算多少个点?我想批量算几十个距离。

本工具一次只能计算两个点之间的距离,没有批量上传 CSV 或列表功能。如果需要批量计算,建议将数据导出到 Excel 或 Google Sheets,使用内置的 Haversine 公式函数(网上有现成模板),或者找专业的 GIS 工具(如 QGIS、ArcGIS)。本工具适合偶尔单次查询,不适合批量处理。

我输的是负数纬度(南半球),结果正常吗?

正常。本工具支持南纬(负值)和西经(负值),算法会自动处理符号。例如南纬 -33.8 悉尼到北纬 34.0 东京,结果会正确计算跨赤道的距离。唯一要注意的是,输入时纬度在前、经度在后,负号不要漏写。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭