随手记录
/**
* 根据提供的经度和纬度、以及半径,取得此半径内的最大最小经纬度
*
* @param lng 经度
* @param lat 纬度
* @param raidus 半径(米)
* @return
*/
public static Map<String, Double> getAround( double lng, double lat, int raidus ) {
Double latitude = lat;
Double lnggitude = lng;
Double degree = (24901 * 1609) / 360.0;
double raidusMile = raidus;
Double dpmLat = 1 / degree;
Double radiusLat = dpmLat * raidusMile;
Double minLat = latitude - radiusLat;
Double maxLat = latitude + radiusLat;
Double mpdLng = degree * Math.cos( latitude * (Math.PI / 180) );
Double dpmLng = 1 / mpdLng;
Double radiusLng = dpmLng * raidusMile;
Double minLng = lnggitude - radiusLng;
Double maxLng = lnggitude + radiusLng;
Map<String, Double> result = new HashMap<>();
result.put( "minLat", minLat );
result.put( "minLng", minLng );
result.put( "maxLat", maxLat );
result.put( "maxLng", maxLng );
return result;
}
/**
* 根据提供的两个经纬度计算距离(米)
*
* @param lng1 经度1
* @param lat1 纬度1
* @param lng2 经度2
* @param lat2 纬度2
* @return 距离(米)
*/
public static double getDistance( double lng1, double lat1, double lng2, double lat2 ) {
double radLat1 = lat1 * RAD;
double radLat2 = lat2 * RAD;
double a = radLat1 - radLat2;
double b = (lng1 - lng2) * RAD;
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;
}