[小代码]计算两个经纬度之间的距离

本文介绍了一种将经纬度转换为实际距离的算法,单位为米。

函数输入,起点和终点的经纬度,计算出距离,单位为米。

private double gps2m(float lat_a, float lng_a, float lat_b, float lng_b) {
    float pk = (float) (180/3.14169);

    float a1 = lat_a / pk;
    float a2 = lng_a / pk;
    float b1 = lat_b / pk;
    float b2 = lng_b / pk;

    float t1 = FloatMath.cos(a1)*FloatMath.cos(a2)*FloatMath.cos(b1)*FloatMath.cos(b2);
    float t2 = FloatMath.cos(a1)*FloatMath.sin(a2)*FloatMath.cos(b1)*FloatMath.sin(b2);
    float t3 = FloatMath.sin(a1)*FloatMath.sin(b1);
    double tt = Math.acos(t1 + t2 + t3);
   
    return 6366000*tt;
}


### 计算两个经纬度之间距离的 Java 实现 以下是基于 Haversine 公式的 Java 函数实现,用于计算两个地理坐标(经纬度之间的大圆距离: ```java public class GeoDistanceCalculator { private static final double EARTH_RADIUS_KM = 6371; // 地球半径,单位为公里 /** * 使用Haversine公式计算两个经纬度之间距离。 * * @param lat1 起始点纬度 (十进制度数) * @param lon1 起始点经度 (十进制度数) * @param lat2 终点纬度 (十进制度数) * @param lon2 终点经度 (十进制度数) * @return 返回两点间的距离,单位为千米 */ public static double haversine(double lat1, double lon1, double lat2, double lon2) { // 将角度转换为弧度 double phi1 = Math.toRadians(lat1); double phi2 = Math.toRadians(lat2); double deltaPhi = Math.toRadians(lat2 - lat1); double deltaLambda = Math.toRadians(lon2 - lon1); // 应用Haversine公式 double a = Math.sin(deltaPhi / 2) * Math.sin(deltaPhi / 2) + Math.cos(phi1) * Math.cos(phi2) * Math.sin(deltaLambda / 2) * Math.sin(deltaLambda / 2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); // 计算最终的距离 return EARTH_RADIUS_KM * c; } public static void main(String[] args) { // 示例调用:计算纽约和洛杉矶之间距离 double distance = haversine(40.7128, -74.0060, 34.0522, -118.2437); // 单位为千米 System.out.println("两地之间距离:" + String.format("%.2f", distance) + " km"); } } ``` 上述代码实现了 `haversine` 方法,它接受四个参数——起始点和终点的纬度与经度,并返回它们之间距离(单位为千米)。此方法利用了地球的大圆距离模型[^1]。 需要注意的是,在实际应用中,由于地球并非完美的球体而是更接近于椭球体,因此通过简单的球面几何学计算可能会引入一定的误差。然而,这种误差在大多数情况下是可以忽略不计的,尤其是在不需要极高精度的应用场景下[^2]。 此外,为了确保输入数据的有效性和准确性,应验证所提供的经纬度是否落在有效范围内,即经度范围为[-180°, 180°],而纬度则应在大约±85.05112878°以内[^4]。 #### 关键概念解释 - **Haversine Formula**: 这一公式的目的是解决球面上任意两点间最短路径长度的问题,适用于地理信息系统中的位置服务开发。 - **Earth Radius Assumption**: 假设地球平均半径约为6371km作为基础常量参与运算。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值