尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

mysql和java获取经纬度的距离的两种方式

mysql和java获取经纬度的距离的两种方式
📅 发布时间:2026/6/19 19:46:52

mysql和java获取经纬度的距离的两种方式

mysql和java获取经纬度的距离的两种方式

T713802819052   取车距离:40333   还车距离:15303      根据订单号vlookup关联一下,单位是 米

1.java与mysql的计算公式是一一对应的:

Haversine公式 标准公式:这是传统计算方法,兼容所有MySQL版本

SELECT ROUND(6378.138 * 2 * ASIN(SQRT(POW(SIN((目标纬度 * PI()/180 - latitude * PI()/180)/2), 2) +COS(目标纬度 * PI()/180) * COS(latitude * PI()/180) *POW(SIN((目标经度 * PI()/180 - longitude * PI()/180)/2), 2))) * 1000) AS distance

DEMO

SELECT ROUND(6378.137 * 2 * ASIN(SQRT(POW(SIN((39.852546 * PI()/180 - 39.755703 * PI()/180)/2), 2) +COS(39.852546 * PI()/180) * COS(39.755703 * PI()/180) *POW(SIN((116.45462 * PI()/180 - 116.142223 * PI()/180)/2), 2)))) AS distance
计算结果:29

JAVA实现代码:

package com.example.core.mydemo.calc2;import java.math.BigDecimal;public class TestDistance {public static void main(String[] args) {String ss = String.valueOf(Math.round(calcDistance(116.142223,39.755703,116.45462,39.852546)));System.out.println(ss);}//计算方法/*** carLon            longitude    116.142223* carLat            latitude    39.755703* origionCarLon        目标经度    116.45462* originCarLat      目标纬度    39.852546**/public static double calcDistance(double carLon,double carLat,double origionCarLon,double originCarLat){return new BigDecimal(6378.137*2*Math.asin(Math.sqrt(Math.pow(Math.sin( (originCarLat*Math.PI/180-carLat*Math.PI/180)/2),2)+Math.cos(originCarLat*Math.PI/180)*Math.cos(carLat*Math.PI/180)*Math.pow(Math.sin( (origionCarLon*Math.PI/180-carLon*Math.PI/180)/2),2)))).doubleValue();}}
计算结果:29

2.扩展其他的mysql函数
使用ST_DISTANCE_SPHERE函数 这是最推荐的方法,适用于MySQL 5.7及以上版本,直接返回以米为单位的距离

SELECT ST_DISTANCE_SPHERE(POINT(目标经度, 目标纬度),POINT(longitude, latitude)) AS distance 

DEMO

       SELECT ST_DISTANCE_SPHERE(POINT(116.45462, 39.852546),POINT(116.142223, 39.755703)) AS distance 计算结果:28776.896048499308

使用ST_DISTANCE函数 适用于MySQL 5.6及以上版本,返回单位是度,需要转换为米

SELECT ST_DISTANCE(POINT(目标经度, 目标纬度),POINT(longitude, latitude)) AS distance 

DEMO

SELECT ST_DISTANCE(POINT(116.45462, 39.852546),POINT(116.142223, 39.755703)) AS distance 计算结果:0.3270633765159325

度转米的基本公式‌:距离(米) = 度 × 111195
其中111195是地球平均半径6371000米乘以π再除以180得出的换算系数

DEMO

SELECT ST_DISTANCE(POINT(116.45462, 39.852546),POINT(116.142223, 39.755703)) * 111195 AS distance 计算结果:36367.81215168911       误差比较大

3.方法选择建议‌:
优先使用ST_DISTANCE_SPHERE函数,它计算最准确且性能最佳。对于旧版本MySQL,可选择Haversine公式或创建自定义函数来实现距离计算
精度差异‌:ST_DISTANCE_SPHERE采用球面计算,比平面转换更准确
对于新项目,强烈建议使用MySQL 5.7+的ST_DISTANCE_SPHERE函数,可避免单位转换带来的误差和复杂性

相关新闻

  • SQL索引及调优
  • 如何在Golang项目中集成Prometheus进行监控?
  • 220kv数字化变电站保护解决方案综述[期刊理解]

最新新闻

  • Onekey完整教程:一键解锁Steam游戏DLC的终极方案
  • 2026年南京知名3D效果图制作公司大盘点,你知道几家?
  • S12 MSCAN与SCI模块深度解析:低功耗、中断与安全初始化实战
  • MPV播放器懒人包:3分钟打造专业级视频播放体验
  • 2026年6月经验丰富的升降货梯生产公司哪家便宜,导轨式货梯升降机/厂房升降货梯/四柱液压货梯,升降货梯工厂平价推荐 - 品牌推荐师
  • 4.19周总结

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号