java 里 两点的经度纬度怎么算距离

Python018

java 里 两点的经度纬度怎么算距离,第1张

/**

* 计算地球上任意两点(经纬度)距离

*

* @param long1

*第一点经度

* @param lat1

*第一点纬度

* @param long2

*第二点经度

* @param lat2

*第二点纬度

* @return 返回距离 单位:米

*/

public static double Distance(double long1, double lat1, double long2,

double lat2) {

double a, b, R

R = 6378137// 地球半径

lat1 = lat1 * Math.PI / 180.0

lat2 = lat2 * Math.PI / 180.0

a = lat1 - lat2

b = (long1 - long2) * Math.PI / 180.0

double d

double sa2, sb2

sa2 = Math.sin(a / 2.0)

sb2 = Math.sin(b / 2.0)

d = 2

* R

* Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(lat1)

* Math.cos(lat2) * sb2 * sb2))

return d

}

/** 

 * 计算地球上任意两点(经纬度)距离 

 *  

 * @param long1 

 *            第一点经度 

 * @param lat1 

 *            第一点纬度 

 * @param long2 

 *            第二点经度 

 * @param lat2 

 *            第二点纬度 

 * @return 返回距离 单位:米 

 */  

public static double Distance(double long1, double lat1, double long2,  

        double lat2) {  

    double a, b, R  

    R = 6378137 // 地球半径  

    lat1 = lat1 * Math.PI / 180.0  

    lat2 = lat2 * Math.PI / 180.0  

    a = lat1 - lat2  

    b = (long1 - long2) * Math.PI / 180.0  

    double d  

    double sa2, sb2  

    sa2 = Math.sin(a / 2.0)  

    sb2 = Math.sin(b / 2.0)  

    d = 2  

            * R  

            * Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(lat1)  

                    * Math.cos(lat2) * sb2 * sb2))  

    return d  

}

//拿走不谢

private final static double R = 6370996.81

private final static double PI = 3.14159265

private final static double RAD = Math.PI / 180.0

/// <summary>

/// 根据提供的经度和纬度、以及半径,取得此半径内的最大最小经纬度

/// </summary>

/// <param name="lat">纬度</param>

/// <param name="lon">经度</param>

/// <param name="raidus">半径(米)</param>

/// <returns></returns>

public static double[] GetAround(double lat, double lon, int raidus)

{

Double latitude = lat

Double longitude = lon

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 * (PI / 180))

Double dpmLng = 1 / mpdLng

Double radiusLng = dpmLng * raidusMile

Double minLng = longitude - radiusLng

Double maxLng = longitude + radiusLng

return new double[] { minLat, minLng, maxLat, maxLng }

}

/// <summary>

/// 根据提供的两个经纬度计算距离(米)

/// </summary>

/// <param name="lng1">经度1</param>

/// <param name="lat1">纬度1</param>

/// <param name="lng2">经度2</param>

/// <param name="lat2">纬度2</param>

/// <returns></returns>

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 * R

s = Math.round(s * 10000) / 10000

return s

}