java实现计算地理坐标之间的距离
java实现计算两经纬度点之间的距离,直接上代码,具体解释请参考注释
packagecom.jttx.poi.utils;
importcom.jttx.poi.entity.Point;
/**
*Createdbylouison2014/9/2.
*/
publicclassGeoUtils{
/**
*计算两经纬度点之间的距离(单位:米)
*@paramlng1 经度
*@paramlat1 纬度
*@paramlng2
*@paramlat2
*@return
*/
publicstaticdoublegetDistance(doublelng1,doublelat1,doublelng2,doublelat2){
doubleradLat1=Math.toRadians(lat1);
doubleradLat2=Math.toRadians(lat2);
doublea=radLat1-radLat2;
doubleb=Math.toRadians(lng1)-Math.toRadians(lng2);
doubles=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;
returns;
}
/**
*计算TP值
*@paramcurPoint 当前点
*@paramrelatedPoint 偏移点
*@paramisGeography 是否是地理坐标false为2d坐标
*@return tp值
*/
publicstaticdoublegetDirAngle(PointcurPoint,PointrelatedPoint,booleanisGeography){
doubleresult=0;
if(isGeography){
doubley2=Math.toRadians(relatedPoint.getLat());
doubley1=Math.toRadians(curPoint.getLat());
doublealpha=Math.atan2(relatedPoint.getLat()-curPoint.getLat(),(relatedPoint.getLng()-curPoint.getLng())*Math.cos((y2-y1)/2));//纬度方向乘以cos(y2-y1/2)
doubledelta=alpha<0?(2*Math.PI+alpha):alpha;
result=Math.toDegrees(delta);
}else{
doublealpha=Math.atan2(relatedPoint.getLat()-curPoint.getLat(),relatedPoint.getLng()-curPoint.getLng());
doubledelta=alpha<0?(2*Math.PI+alpha):alpha;
result=Math.toDegrees(delta);
}
returnresult;
}
publicstaticvoidmain(String[]args){
System.out.println(getDistance(121.446014,31.215937,121.446028464238,31.2158502442799 ));
}
}
以上就是本文的全部内容了,希望大家能够喜欢。