* 计算地球上任意两点(经纬度)距离
*
* @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
}