通过坐标计算GPS点之间的距离
Calculate distance between GPS points by coordinates
我在通过坐标计算两个 GPS 点之间的距离时遇到了一些问题。
point a
x = 7,2562
y = 47,7434599999999
point b
x = 7,21978
y = 47,73836
我按照 here 所述使用了 Haversine 公式。我得到的结果是4.09公里。
但是,使用 this, I can measure a distance of 2.8 km
等工具在地图上定位这些点
我也尝试了其他几个公式 return 大约 4 公里的结果。
知道我会遗漏什么吗?
我认为是因为您使用的是以英里为单位的功能,以公里为单位,您可以使用类似的东西:
public static function distance(
array $from,
array $to
) {
if (empty($from['lat']) || empty($to['lat'])) {
return $to['distance'];
}
$latitude1 = (float) $from['lat'];
$latitude2 = (float) $to['lat'];
$longitude1 = (float) $from['lng'];
$longitude2 = (float) $to['lng'];
$theta = $longitude1 - $longitude2;
$distance = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2)))
+ (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta)))
;
$distance = acos($distance);
$distance = rad2deg($distance);
$distance = $distance * 60 * 1.1515;
$distance = (is_nan($distance)) ? 0 : $distance * 1.609344;
return $distance;
}
正如 Roland Starke 在评论中指出的那样,问题出在坐标的顺序上。 (7, 47 不是 47, 7)
我在通过坐标计算两个 GPS 点之间的距离时遇到了一些问题。
point a
x = 7,2562
y = 47,7434599999999
point b
x = 7,21978
y = 47,73836
我按照 here 所述使用了 Haversine 公式。我得到的结果是4.09公里。
但是,使用 this, I can measure a distance of 2.8 km
等工具在地图上定位这些点我也尝试了其他几个公式 return 大约 4 公里的结果。
知道我会遗漏什么吗?
我认为是因为您使用的是以英里为单位的功能,以公里为单位,您可以使用类似的东西:
public static function distance(
array $from,
array $to
) {
if (empty($from['lat']) || empty($to['lat'])) {
return $to['distance'];
}
$latitude1 = (float) $from['lat'];
$latitude2 = (float) $to['lat'];
$longitude1 = (float) $from['lng'];
$longitude2 = (float) $to['lng'];
$theta = $longitude1 - $longitude2;
$distance = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2)))
+ (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta)))
;
$distance = acos($distance);
$distance = rad2deg($distance);
$distance = $distance * 60 * 1.1515;
$distance = (is_nan($distance)) ? 0 : $distance * 1.609344;
return $distance;
}
正如 Roland Starke 在评论中指出的那样,问题出在坐标的顺序上。 (7, 47 不是 47, 7)