如何生成选定经纬度点周围矩形区域内的附近位置列表
你的代码存在两个核心逻辑错误:
- 边界计算和范围检查的逻辑都嵌套在
if line[0] == querylocid:的分支内,只有遍历到目标基准点那一行时才会执行范围判断,自然只能匹配到基准点自身,无法检查其他行的位置。 - 经纬度和参数的对应关系写反了:CSV里
line[1]是纬度(对应南北向参数d2),line[2]是经度(对应东西向参数d1),你代码里混淆了两者的对应关系,判断条件的逻辑也有错误。
修改思路
- 第一步先单独读取CSV找到基准点的经纬度,提前计算好矩形的经纬度范围阈值,不需要记录四个角坐标,直接算最大/最小纬度、最大/最小经度即可
- 第二步遍历所有CSV行,逐行判断位置是否落在计算好的范围内,符合要求就加入结果列表
修正后代码(仅读一次文件版本,适合小体积CSV)
querylocid = "L83" d1 = 1.5 # 东西向(经度)延伸距离 d2 = 2.2 # 南北向(纬度)延伸距离 csv_path = "<替换为你的CSV文件路径>" result_list = [] all_locations = [] base_lat = None base_lon = None # 第一次遍历:存所有点位+找基准点坐标 with open(csv_path, "r") as f: f.readline() # 跳过表头 for line in f: parts = line.strip().split(",") all_locations.append(parts) if parts[0] == querylocid: base_lat = float(parts[1]) base_lon = float(parts[2]) # 计算矩形范围 min_lat = base_lat - d2 max_lat = base_lat + d2 min_lon = base_lon - d1 max_lon = base_lon + d1 # 第二次遍历:检查所有点位是否在范围内 for loc in all_locations: lat = float(loc[1]) lon = float(loc[2]) if min_lat <= lat <= max_lat and min_lon <= lon <= max_lon: # 如果不需要包含基准点L83,就加一行判断 if loc[0] != querylocid: result_list.append(loc[0]) print(result_list)
运行后输出结果和你预期一致。
内容的提问来源于stack exchange,提问作者Alvin1359
相关产品推荐
相关产品推荐

