首页 > 基础资料 博客日记
Java根据坐标经纬度计算两点距离(5种方法)、校验经纬度是否在圆 多边形区域内的算法推荐_java计算两个经纬度之间的距离
2024-06-25 16:00:05基础资料围观526次
double lon1 = Math.toRadians(longitude1);
double lon2 = Math.toRadians(longitude2);
// 纬度之差
double a = lat1 - lat2;
// 经度之差
double b = lon1 - lon2;
// 计算两点距离的公式
double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(b / 2), 2)));
// 弧长乘赤道半径, 返回单位: 米
s = s * EQUATOR_RADIUS;
return s;
}
}
### 2.方法二
package com.test.java.util;
/**
-
坐标位置相关util
*/
public class PositionUtil {/**
- 地球平均半径(单位:米)
*/
private static final double EARTH_AVG_RADIUS = 6371000;
/**
-
方法二:(反余弦计算方式)
-
@param longitude1 第一点的经度
-
@param latitude1 第一点的纬度
-
@param longitude2 第二点的经度
-
@param latitude2 第二点的纬度
-
@return 返回的距离,单位m
*/
public static double getDistance3(double longitude1, double latitude1, double longitude2, double latitude2) {
// 经纬度(角度)转弧度。弧度作为作参数,用以调用Math.cos和Math.sin
// A经弧度
double radiansAX = Math.toRadians(longitude1);
// A纬弧度
double radiansAY = Math.toRadians(latitude1);
// B经弧度
double radiansBX = Math.toRadians(longitude2);
// B纬弧度
double radiansBY = Math.toRadians(latitude2);// 公式中“cosβ1cosβ2cos(α1-α2)+sinβ1sinβ2”的部分,得到∠AOB的cos值
double cos = Math.cos(radiansAY) * Math.cos(radiansBY) * Math.cos(radiansAX - radiansBX) + Math.sin(radiansAY) * Math.sin(radiansBY);
// System.out.println("cos = " + cos); // 值域[-1,1]// 反余弦值
double acos = Math.acos(cos);
// System.out.println("acos = " + acos); // 值域[0,π]
// System.out.println("∠AOB = " + Math.toDegrees(acos)); // 球心角 值域[0,180]// 最终结果
return EARTH_AVG_RADIUS * acos;
}
- 地球平均半径(单位:米)
}
### 3.方法三
基于谷歌地图的计算公式计算距离
package com.test.java.util;
/**
-
坐标位置相关util
*/
public class PositionUtil {/**
- 地球平均半径(单位:米)
*/
private static final double EARTH_AVG_RADIUS = 6371000;
/**
- 经纬度转化为弧度(rad)
- @param d 经度/纬度
*/
private static double rad(double d) {
return d * Math.PI / 180.0;
}
/**
- 方法三:(基于googleMap中的算法得到两经纬度之间的距离,计算精度与谷
- 地球平均半径(单位:米)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- springboot~3.x项目中使用集成测试
- Java测试类、工具类与JavaBean对比解析
- SpringBoot-日志
- springboot~http2的支持
- 解疑释惑 - 日志体系之 slf4j + logback 组合(一)
- Web server failed to start. Port 8080 was already in use. 端口被占用
- Springboot 项目配置多数据源
- 伙伴匹配系统(移动端 H5 网站(APP 风格)基于Spring Boot 后端 + Vue3 - 05
- 剑指offer-23、搜索⼆叉树的后序遍历序列
- 一个表示金额的数字是 100000000L,这是多少米?