根据经纬度坐标 计算两点的球面距离
地球半径取6378.138千米,输出distance单位米。
SQL写法:
select ROUND( 6378.138 * 2 * ASIN( SQRT( POW( SIN( ( latitude1 * PI() / 180 - latitude2 * PI() / 180 ) / 2 ), 2 ) + COS(latitude1 * PI() / 180) * COS(latitude2 * PI() / 180)
* POW( SIN( ( longitude1 * PI() / 180 - longitude2 * PI() / 180 ) / 2 ), 2 ) ) ) * 1000 ) AS distance from table where id = 28;
执行结果:
Java程序写法:
public double getDistance(double lon1, double lat1, double lon2, double lat2) { // 地球半径 double EARTH_RADIUS = 6378.138; //经纬度转换成弧度 lat1 = ConvertDegreesToRadians(lat1); lon1 = ConvertDegreesToRadians(lon1); lat2 = ConvertDegreesToRadians(lat2); lon2 = ConvertDegreesToRadians(lon2); //差值 double vLon = Math.abs(lon1 - lon2); double vLat = Math.abs(lat1 - lat2); double h = HaverSine(vLat) + Math.cos(lat1) * Math.cos(lat2) * HaverSine(vLon); double distance = 2 * EARTH_RADIUS * Math.asin(Math.sqrt(h)); return distance; } // HaverSine公式 public double HaverSine(double x) { double v = Math.sin(x / 2); return v * v; } // 将角度换算为弧度 public static double ConvertDegreesToRadians(double degrees) { return degrees * Math.PI / 180; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?