求助 如何判断当前定位的地址在配送范围之内?

需求:根据app客户定位的地址,服务端判断在不在地址在配送范围之内?只有配送范围之内的用户可以下单,类似于朴朴超市

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 5

可以使用 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 代表配送范围的半径,单位为公里。

1年前 评论

百度地图有免费的经纬度坐标转换的,简单点就是计算下,复杂点就付费买百度地图的API计算

1年前 评论

可以使用 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 代表配送范围的半径,单位为公里。

1年前 评论

有种算法叫做射线算法

1年前 评论

把两个位置的经纬度存入redis geo 中 就直接能算出距离 ,具体用法请参考 这篇文章 www.runoob.com/redis/redis-geo.htm...

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!