在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
地球是一个近乎标准的椭球体,它的赤道半径为6378.140千米,极半径为6356.755千米,平均半径6371.004千米。如果我们假设地球是一个完美的球体,那么它的半径就是地球的平均半径,记为R。如果以0度经线为基准,那么根据地球表面任意两点的经纬度就可以计算出这两点间的地表距离(这里忽略地球表面地形对计算带来的误差,仅仅是理论上的估算值)。设第一点A的经纬度为(LonA, LatA),第二点B的经纬度为(LonB, LatB),按照0度经线的基准,东经取经度的正值(Longitude),西经取经度负值(-Longitude),北纬取90-纬度值(90-Latitude),南纬取90+纬度值(90+Latitude),则经过上述处理过后的两点被计为(MLonA, MLatA)和(MLonB, MLatB)。那么根据三角推导,可以得到计算两点距离的如下公式:
这里,R和Distance单位是相同,如果是采用6371.004千米作为半径,那么Distance就是千米为单位,如果要使用其他单位,比如mile,还需要做单位换算,1千米=0.621371192mile
也就是:
在实际应用当中,一般是通过一个个体的邮政编码来查找该邮政编码对应的地区中心的经纬度,然后再根据这些经纬度来计算彼此的距离,从而估算出某些群体之间的大致距离范围(比如酒店旅客的分布范围-各个旅客的邮政编码对应的经纬度和酒店的经纬度所计算的距离范围-等等),所以,通过邮政编码查询经纬度这样一个数据库是一个很有用的资源。 根据经纬度计算该位置点与附近某一经纬度位置点的位置偏移角,如何计算? 设某一城市有一个城市地标,可以视为城市的中心点 ,其经纬度已知。 分散在城市中心分别 现控制无人机分别自城市地标出发,依次探访和航拍环城公路上的重要设施。 1 计算任意经纬度点间的距离 google maps的脚本里代码private const double EARTH_RADIUS = 6378.137;
private static double rad(double d)
{
return d * Math.PI / 180.0;
}
public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
{
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;
}
下面为PHP替换代码function rad($d, $pi = 3.14) {
return $d * $pi / 180.0;
}
function getDistance($lat1, $lng1, $lat2, $lng2) {
$r = 6378.137; // 地球半径
$radLat1 = rad($lat1);
$radLat2 = rad($lat2);
$lat = $radLat1 - $radLat2;
$long = rad($lng1) - rad($lng2);
$s = 2 * asin(sqrt(pow(sin($lat/2), 2) + cos($radLat1)*cos($radLat2)*pow(sin($long/2), 2)));
$s = $s * $r;
return round($s * 10000) / 10000;
}
$a = array('lat' => +22.542, 'lng' => +114.056);
$b = array('lat' => +22.540, 'lng' => +114.084);
echo sprintf("两点的距离是:%skm", getDistance($a['lat'], $a['lng'], $b['lat'], $b['lng']));
|
2022-08-18
2022-08-17
2022-08-15
2022-11-06
2022-08-17
请发表评论