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 )); } }
以上就是本文的全部内容了,希望大家能够喜欢。