找下我之前工作的地方和对面的那座办公楼
老样子直接上代码看实现结果
import java.util.HashMap;
import java.util.Map;
/**
* 经纬度工具类
*/
public class LngLatUtil {
private static double EARTH_RADIUS = 6378137;
private static double RAD = Math.PI / 180.0;
/**
* 根据提供的经度和纬度、以及半径,取得此半径内的最大最小经纬度
*
* @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;
}
public static void main( String[] args ) {
System.out.println(GetDistance( 113.328402,23.131862, 113.327446,23.131921));
}
}
还有获取半径内的最大最小经纬度 需要的同学自己测试哈
输出结果为:
98.0