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]);
// }
//}
}
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]);
// }
//}
}