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模仿windows计算器示例
- java计算百分比值的方法
- Java算法之递归算法计算阶乘
- JAVA的Random类的用法详解
- 浅谈java中Math.random()与java.util.random()的区别
- 关于java.util.Random的实现原理详解
- Java小程序计算圆周率代码
- Java使用Math.random()结合蒙特卡洛方法计算pi值示例
如对本文有疑问,请提交到交流社区,广大热心网友会为你解答!! 点击进入社区