已知一点经纬度和距离,求距离返回内点

来源:互联网 发布:mac怎么卸载adobe软件 编辑:程序博客网 时间:2024/05/17 09:32
public class DistanceUtil {
   public static double[] withInArea(double lat,double lng,double range){
       double R=6371000;//地球半径,单位;米
       double pi=3.1415926;
       lat = lat * pi /180;
       lng = lng * pi /180;  //先换算成弧度
       double[] result=new double[4];
       double rad_dist = range / R;  //计算X公里在地球圆周上的弧度
       double lat_min = lat - rad_dist;
       double lat_max = lat + rad_dist;   //计算纬度范围
       
       double lon_min, lon_max;
     //因为纬度在-90度到90度之间,如果超过这个范围,按情况进行赋值
     if(lat_min > -pi/2 && lat_max < pi/2){
     //开始计算经度范围
     double lon_t = Math.asin( Math.sin(rad_dist) / Math.cos(lat) );
     lon_min = lng - lon_t;
     //同理,经度的范围在-180度到180度之间
     if ( lon_min < -pi ) lon_min += 2 * pi;
     lon_max = lng + lon_t;
     if ( lon_max > pi) lon_max -= 2 * pi;
     }
     else {
         double a=lat_min-(-pi/2);
         double b=lat_max-pi/2;
     lat_min = Math.max (lat_min , -pi/2);
     lat_max = Math.min (lat_max, pi/2);
     lon_min = -pi;
     lon_max = pi;
     }
     //最后置换成角度进行输出
     lat_min = lat_min * 180 / pi;
     lat_max = lat_max * 180 / pi;
     lon_min = lon_min * 180 / pi;
     lon_max = lon_max *180 / pi;
     result[0] = lat_min;
     result[1] = lat_max;
     result[2] = lon_min;
     result[3] = lon_max;
     return result;
   }
//   public static void main(String[] args) {
//       double[] result=new DistanceUtil().withInArea(12.23, 14.23,500);
//       for(int i=0;i<result.length;i++){
//           System.out.println("結果:"+result[i]);
//       }
//}
}
0 0
原创粉丝点击