如何用geopy.distance实现指定距离范围的用户坐标筛选?
实现基于经纬度的距离范围筛选函数
解决方案
利用geopy库的distance模块计算两点间的球面距离,遍历坐标列表即可筛选出符合距离范围的点。
步骤1:安装geopy
如果未安装geopy,先执行安装命令:
pip install geopy
步骤2:完整代码实现
from geopy import distance coor = [ (35.441339, -88.092403), (35.453793, -88.061769), (35.559426, -88.014642), (35.654535, -88.060918), (35.812953, -88.120935) ] def findClosest(coor, userCoor, ranges): # 将用户坐标转为元组,适配geopy参数格式 user_point = tuple(userCoor) matched_coords = [] for point in coor: # 计算两点间球面距离(默认采用WGS-84坐标系,适配GPS坐标) dist = distance.distance(user_point, point) # 按米单位判断是否在范围内,若用千米则替换为dist.km <= ranges if dist.meters <= ranges: matched_coords.append(point) # 输出结果 if matched_coords: print(f"找到{len(matched_coords)}个在{ranges}米范围内的用户坐标:") for coord in matched_coords: print(coord) else: print(f"没有用户坐标在{ranges}米范围内") return matched_coords # 测试调用 userCoor = [35.829042, -88.039396] ranges = 500 # 单位:米 findClosest(coor, userCoor, ranges)
代码说明
- 坐标格式适配:
geopy.distance要求经纬度以元组形式传入,因此先将userCoor列表转为元组。 - 距离单位处理:
distance.distance()返回的Distance对象支持.meters和.km属性,可直接匹配需求的单位进行判断。 - 筛选逻辑:遍历所有坐标点,逐一计算与目标用户的距离,收集符合范围的点后输出结果。
测试输出
运行代码后,示例参数对应的输出为:
找到1个在500米范围内的用户坐标: (35.812953, -88.120935)
内容的提问来源于stack exchange,提问作者moshiulRabbi
相关产品推荐
相关产品推荐

