登录 |  注册
首页 >  编程语言 >  Java常用开发工具类案例代码 >  地球两点间经纬度距离计算公式

地球两点间经纬度距离计算公式

地理位置模型

package com.yukx.util;
import lombok.Data;
/**
 * @description: 地理位置模型
 */
@Data
public class GeoInfoModel {
    /**
     * 经度
     */
    private Double lng;
    /**
     * 纬度
     */
    private Double lat;
}

距离计算方法

package com.yukx.util;

/**
 * 百度距离计算
 */
public class GeoDistanceUtil {
    private GeoDistanceUtil() {
    }

    /**
     * 地球半径
     */
    private static double EARTH_RADIUS = 6378.137;
    /**
     * 计算距离
     * @param startPoint 起始经纬度
     * @param endPoint   目标经纬度
     * @return
     */
    private static Double getDistance(GeoInfoModel startPoint, GeoInfoModel endPoint) {
        if (!isGeoValid(startPoint) || !isGeoValid(endPoint)) {
            return null;
        }
        Double startLatRad = rad(startPoint.getLat());
        Double endLatRad = rad(endPoint.getLat());
        double latDistance = startLatRad - endLatRad;
        double lngDistance = rad(startPoint.getLng() - endPoint.getLng());
        return 2 * EARTH_RADIUS * Math.asin(Math.sqrt(Math.pow(Math.sin(latDistance / 2), 2) +
                Math.cos(startLatRad) *
                        Math.cos(endLatRad) *
                        Math.pow(Math.sin(lngDistance / 2), 2)));
    }

    /**
     * 校验坐标是否正确
     * @param point
     * @return
     */
    private static boolean isGeoValid(GeoInfoModel point) {
        return point != null && Math.abs(point.getLat()) <= 90 && Math.abs(point.getLng()) <= 180;
    }

    /**
     * 地球半径转弧度
     * @param d
     * @return
     */
    private static double rad(double d) {
        return d * Math.PI / 180.0;
    }
}

原文链接: https://www.yukx.com/javadev/article/details/2391.html 优科学习网地球两点间经纬度距离计算公式

<<上一课程
下一课程>>
推荐文章
  • 什么是高并发?高并发(HighConcurrency)是一种系统运行过程中遇到的一种“短时间内遇到大量操作请求”的情况,主要发生在web系统集中大量访问收到大量请求(例如:12306的抢票情况;天猫双十一活动)。该情况的发生会导致系统在这段时间内执行大量操作,例如对资源的请求,数据库的操作等。高并发
  • 首先就是创建一个普通的Java工程,起名TrySpring,最终项目如下图:然后在创建两个包分别为service、spring。service用来存放bean、配置类等,spring包用来存放我们手撸的spring注解等在service中创建UserService类,再创建Test类,在Test类中
  •      AQS(AbstractQueuedSynchronizer)是一个抽象的队列同步器,通过维护一个共享资源状态(VolatileIntState)和一个先进先出(FIFO)的线程等待队列来实现一个多线程访问共享资源的同步框架。一、AQS原理     AQS为每个共享资源都设置一个共享资源锁
  • word-break:break-all举例一般情况下,元素拥有默认的white-space:normal(自动换行,PS:不换行是white-space:nowrap),当录入的文字超过定义的宽度后会自动换行,但当录入的数据是一堆没有空格的字符或字母或数字(常规数据应该不会有吧,但有些测试人员是会
  • Bigdecimal的初始化这里对比了两种形式,第一种直接value写数字的值,第二种用string来表示        BigDecimal num1 = new BigDecimal(0.005);         BigDecimal num2 = new BigDecimal(1000000
  • 基本概念定义 双亲委派模型要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器。双亲委派机制双亲委派机制是指当一个类加载器收到一个类加载请求时,该类加载器首先会把请求委派给父类加载器。每个类加载器都是如此,只有在父类加载器在自己的搜索范围内找不到指定类时,子类加载器才会尝试自己去加载
学习大纲