讨论数量:
可以使用 Haversine formula 来判断一个给定的位置是否在指定的配送范围内。该公式可以用于计算两点间的地球表面距离,其中一点是配送中心,另一点是给定的位置。如果计算出的距离小于配送范围的半径,那么给定的位置在配送范围内。
function isInDeliveryRange($latitude, $longitude, $centerLat, $centerLong, $range) {
$earthRadius = 6371; // 地球半径,单位为公里
$dLat = deg2rad($latitude - $centerLat);
$dLon = deg2rad($longitude - $centerLong);
$a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($centerLat)) * cos(deg2rad($latitude)) * sin($dLon/2) * sin($dLon/2);
$c = 2 * atan2(sqrt($a), sqrt(1-$a));
$distance = $earthRadius * $c;
return $distance <= $range;
}
在上面的代码中,$latitude 和 $longitude 分别代表给定位置的纬度和经度,$centerLat 和 $centerLong 分别代表配送中心的纬度和经度,$range 代表配送范围的半径,单位为公里。
可以使用 Haversine formula 来判断一个给定的位置是否在指定的配送范围内。该公式可以用于计算两点间的地球表面距离,其中一点是配送中心,另一点是给定的位置。如果计算出的距离小于配送范围的半径,那么给定的位置在配送范围内。
function isInDeliveryRange($latitude, $longitude, $centerLat, $centerLong, $range) {
$earthRadius = 6371; // 地球半径,单位为公里
$dLat = deg2rad($latitude - $centerLat);
$dLon = deg2rad($longitude - $centerLong);
$a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($centerLat)) * cos(deg2rad($latitude)) * sin($dLon/2) * sin($dLon/2);
$c = 2 * atan2(sqrt($a), sqrt(1-$a));
$distance = $earthRadius * $c;
return $distance <= $range;
}
在上面的代码中,$latitude 和 $longitude 分别代表给定位置的纬度和经度,$centerLat 和 $centerLong 分别代表配送中心的纬度和经度,$range 代表配送范围的半径,单位为公里。
推荐文章: