package com.portal.util;
public class Distance {
private static final double EARTH_RADIUS=6378137;
private static double rad(double d){
return d*Math.PI/180;
}
/**
*
* @Title: getDistance
* @Description: TODO(根据两点的经纬度计算距离)
* @param lng1
* @param lat1
* @param lng2
* @param lat2
* @return
*/
public static double getDistance(double lng1, double lat1, double lng2, double lat2){
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double a = radLat1 - radLat2;
double b = rad(lng1) - rad(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 * EARTH_RADIUS;
s = Math.round(s * 10000) / 10000;
return s;
}
/**
* 经纬度距离范围的最大值和最小值
* @param longitude
* @param latitude
* @param space距离
* @return
*/
public static Point getPoint(double longitude,double latitude,double space){
Point point = new Point();
double degree = (24901*1609)/360.0;
//得到最大最小纬度
double dpmLat = 1/degree;
double radiusLat = dpmLat*space;
double minLat = latitude-radiusLat;
double maxLat = latitude+radiusLat;
//得到最大最小经度
double mpdLng = degree*Math.cos(latitude*(Math.PI/180));
double dpmLng = 1/mpdLng;
double radiusLng = dpmLng*space;
double minLng = longitude - radiusLng;
double maxLng = longitude + radiusLng;
point.setTopLatitude(maxLat);
point.setBottomLatitude(minLat);
point.setLeftLongitude(minLng);
point.setRightLongitude(maxLng);
return point;
}
public static void main(String[] args)
{
// 自动生成方法存根
double distance1 = getDistance(116.44507,39.899165,116.447145,39.894772);
System.out.println("Distance is:"+distance1);
Point point = getPoint(116.447145, 39.894772, 5000);
System.out.println(""+point.getTopLatitude()+"---"+point.getBottomLatitude()+"---"+point.getLeftLongitude()+"---"+point.getRightLongitude()+"");
System.out.println(rad(distance1));
}
}
经纬度工具类
最新推荐文章于 2024-01-05 20:04:07 发布