无人机植保边界
植保队接到一块 800 亩的玉米田,地块形状不规则,测绘员用 RTK 打了四个拐点坐标。用本工具算出对角两点直线距离 1.2 公里,据此估算航线总长度和药箱换点位置,避免无人机飞越未测区导致漏喷或重喷。以前靠地图拉尺估算,误差常超 200 米,现在每块田的航线规划时间从 20 分钟缩短到 5 分钟。
用地图测距工具拉两点,算的是路网曲线,不是直线。这个工具只做一件事:把两对经纬度坐标丢进 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 公式 |
| 输入 | 输出 | 说明 |
|---|---|---|
| 起点: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"E39.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°E39.9042, 116.4074工具只解析纯数字和负号、小数点。包含字母(N/S/E/W)、度符号(°)、中文('北')或多余空格都会导致解析失败或截断错误。
7.用城市名代替经纬度坐标
北京, 上海39.9042, 116.4074 与 31.2304, 121.4737本工具是纯数学计算器,不内置地名数据库。输入城市名会被当作无效字符,必须手动查得十进制坐标再输入。
8.混淆了直线距离与驾车/步行距离
输入北京到上海坐标,期望得到 1200 km 驾车距离输入北京到上海坐标,得到 1060 km 直线距离本工具计算的是大圆距离(球面最短路径),不包含道路、地形、交通限制。实际驾车距离通常比直线距离多 20%-50%。
d = 2 × R × arcsin(√(sin²((lat2 - lat1)/2) + cos(lat1) × cos(lat2) × sin²((lon2 - lon1)/2)))
d两点间大圆距离,单位千米R地球平均半径,取 6371 kmlat1, 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。
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 kmfunction 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 kmpackage 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 kmfn 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
}对的。本工具支持十进制度数格式,直接用逗号或空格隔开纬度(前)和经度(后)即可。注意纬度范围 -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 东京,结果会正确计算跨赤道的距离。唯一要注意的是,输入时纬度在前、经度在后,负号不要漏写。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。