问答 / 1 / 5 / 创建于 2年前
需求:根据app客户定位的地址,服务端判断在不在地址在配送范围之内?只有配送范围之内的用户可以下单,类似于朴朴超市
可以使用 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 代表配送范围的半径,单位为公里。
百度地图有免费的经纬度坐标转换的,简单点就是计算下,复杂点就付费买百度地图的API计算
有种算法叫做射线算法
把两个位置的经纬度存入redis geo 中 就直接能算出距离 ,具体用法请参考 这篇文章 www.runoob.com/redis/redis-geo.htm...
可以看看这两篇文章,基本思想是射线法
www.cnblogs.com/dcb3688/p/4608026....
www.shuxiaoyuan.com/info/64
我要举报该,理由是:
高认可度评论:
可以使用 Haversine formula 来判断一个给定的位置是否在指定的配送范围内。该公式可以用于计算两点间的地球表面距离,其中一点是配送中心,另一点是给定的位置。如果计算出的距离小于配送范围的半径,那么给定的位置在配送范围内。
在上面的代码中,$latitude 和 $longitude 分别代表给定位置的纬度和经度,$centerLat 和 $centerLong 分别代表配送中心的纬度和经度,$range 代表配送范围的半径,单位为公里。
百度地图有免费的经纬度坐标转换的,简单点就是计算下,复杂点就付费买百度地图的API计算
可以使用 Haversine formula 来判断一个给定的位置是否在指定的配送范围内。该公式可以用于计算两点间的地球表面距离,其中一点是配送中心,另一点是给定的位置。如果计算出的距离小于配送范围的半径,那么给定的位置在配送范围内。
在上面的代码中,$latitude 和 $longitude 分别代表给定位置的纬度和经度,$centerLat 和 $centerLong 分别代表配送中心的纬度和经度,$range 代表配送范围的半径,单位为公里。
有种算法叫做射线算法
把两个位置的经纬度存入redis geo 中 就直接能算出距离 ,具体用法请参考 这篇文章 www.runoob.com/redis/redis-geo.htm...
可以看看这两篇文章,基本思想是射线法
www.cnblogs.com/dcb3688/p/4608026....
www.shuxiaoyuan.com/info/64