java实现计算地理坐标之间的距离

 更新时间:2015年03月13日 14:27:21   投稿:hebedich  
java实现计算地理坐标之间的距离,主要是通过计算两经纬度点之间的距离来实现,有需要的小伙伴参考下吧

java实现计算两经纬度点之间的距离,直接上代码,具体解释请参考注释

复制代码 代码如下:

package com.jttx.poi.utils;
import com.jttx.poi.entity.Point;
/**
 * Created by louis on 2014/9/2.
 */
public class GeoUtils {
    /**
     * 计算两经纬度点之间的距离(单位:米)
     * @param lng1  经度
     * @param lat1  纬度
     * @param lng2
     * @param lat2
     * @return
     */
    public static double getDistance(double lng1,double lat1,double lng2,double lat2){
        double radLat1 = Math.toRadians(lat1);
        double radLat2 = Math.toRadians(lat2);
        double a = radLat1 - radLat2;
        double b = Math.toRadians(lng1) - Math.toRadians(lng2);
        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1)
                * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
        s = s * 6378137.0;// 取WGS84标准参考椭球中的地球长半径(单位:m)
        s = Math.round(s * 10000) / 10000;
        return s;
    }
    /**
     * 计算TP值
     * @param curPoint      当前点
     * @param relatedPoint  偏移点
     * @param isGeography   是否是地理坐标 false为2d坐标
     * @return              tp值
     */
    public static double getDirAngle(Point curPoint,Point relatedPoint,boolean isGeography){
        double result = 0;
        if(isGeography){
            double y2 = Math.toRadians(relatedPoint.getLat());
            double y1 = Math.toRadians(curPoint.getLat());
            double alpha = Math.atan2(relatedPoint.getLat() - curPoint.getLat(), (relatedPoint.getLng() - curPoint.getLng()) * Math.cos((y2 - y1) / 2));//纬度方向乘以cos(y2-y1/2)
            double delta =alpha<0?(2*Math.PI+alpha):alpha;
            result = Math.toDegrees(delta);
        }else {
            double alpha = Math.atan2(relatedPoint.getLat() - curPoint.getLat(), relatedPoint.getLng() - curPoint.getLng());
            double delta=alpha<0?(2*Math.PI+alpha):alpha;
            result = Math.toDegrees(delta);
        }
        return result;
    }
    public static void main(String[] args) {
        System.out.println(getDistance(121.446014,31.215937,121.446028464238,31.2158502442799  ));
    }
}

以上就是本文的全部内容了,希望大家能够喜欢。

相关文章

  • Java中方法名称和泛型相同的用法示例

    Java中方法名称和泛型相同的用法示例

    这篇文章主要介绍了Java中方法名称和泛型相同的用法,结合实例形式分析了泛型替代方法名称的相关使用技巧,需要的朋友可以参考下
    2019-08-08
  • Java中的接口多继承机制

    Java中的接口多继承机制

    大家好,本篇文章主要讲的是Java中的接口多继承机制,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • Spring Boot容器加载时执行特定操作(推荐)

    Spring Boot容器加载时执行特定操作(推荐)

    这篇文章主要介绍了Spring Boot容器加载时执行特定操作及spring内置的事件,需要的朋友可以参考下
    2018-01-01
  • SpringMVC中的ConversionServiceExposingInterceptor工具类解析

    SpringMVC中的ConversionServiceExposingInterceptor工具类解析

    这篇文章主要介绍了SpringMVC中的ConversionServiceExposingInterceptor工具类解析,ConversionServiceExposingInterceptor是Spring MVC的一个HandlerInterceptor,用于向请求添加一个属性,需要的朋友可以参考下
    2023-12-12
  • MyBatis实现高级映射的示例代码

    MyBatis实现高级映射的示例代码

    高级映射主要还是映射,只是映射中的数据关系复杂了,其中就包括一对一、一对多、多对多的关系,本文主要介绍了MyBatis实现高级映射的示例代码,感兴趣的可以了解一下
    2024-06-06
  • Spring中的@Repository注解源码详解

    Spring中的@Repository注解源码详解

    这篇文章主要介绍了Spring中的@Repository注解详解,@Repository注解修饰哪个类,则表明这个类具有对对象进行增删改查的功能,而且@Repository是@Component注解的一个派生品,所以被@Repository注解的类可以自动的被@ComponentScan通过路径扫描给找到,需要的朋友可以参考下
    2023-10-10
  • Java中的super关键字_动力节点Java学院整理

    Java中的super关键字_动力节点Java学院整理

    这篇文章主要介绍了Java中的super关键字的相关知识,需要的朋友参考下
    2017-04-04
  • Java 线程状态和等待唤醒机制和线程池的实现

    Java 线程状态和等待唤醒机制和线程池的实现

    这篇文章主要介绍了Java 线程状态和等待唤醒机制和线程池的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • SpringBoot接受参数相关注解方式

    SpringBoot接受参数相关注解方式

    SpringBoot接受参数的注解包括@PathVariable、@RequestHeader、@RequestParameter、@CookieValue、@RequestBody、@RequestAttribute和@SessionAttribute等,每个注解都有详细的使用方法和示例代码
    2024-12-12
  • spring注解@Import用法详解

    spring注解@Import用法详解

    这篇文章主要介绍了spring注解@Import用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10

最新评论