如何使用Python过滤温哥华区域外的CSV经纬度节点数据
Python实现CSV节点按温哥华矩形范围过滤方案
核心思路
筛选黄色矩形标注范围内的节点时,轴对齐矩形边界判断是性能最高、实现最简单的方案,不需要引入重型地理计算库,解析CSV时直接做经纬度区间判断即可,能直接排除本拿比、列治文、素里等区域的非目标节点。
前置准备
首先确定矩形边界的经纬度阈值,根据标注的温哥华主城区范围,默认校准值如下(如果和你的标注框有偏差,可以自行拾取矩形四个角的经纬度替换):
- 经度范围(东西向):-123.28 ~ -123.02
- 纬度范围(南北向):49.20 ~ 49.32
安装需要的依赖(处理常规大小CSV用pandas效率最高):pip install pandas glob2
实现代码
常规CSV批量处理版(适合单文件1G以内的场景)
直接遍历目标路径下所有CSV文件,读取时就完成过滤,最后合并输出温哥华区域的节点集合:
import pandas as pd import glob # 温哥华矩形边界参数,可根据实际标注框调整 LNG_MIN = -123.28 LNG_MAX = -123.02 LAT_MIN = 49.20 LAT_MAX = 49.32 # 替换为你的CSV文件存放路径,支持通配符匹配 csv_path_list = glob.glob("./your_csv_dir/*.csv") filtered_result = [] for csv_path in csv_path_list: # 只读取需要的列,降低内存占用,把列名替换成你CSV里的实际字段名 df = pd.read_csv( csv_path, usecols=["node_id", "longitude", "latitude", "其他你需要保留的属性列"] ) # 核心过滤逻辑:仅保留经纬度落在矩形范围内的节点 vancouver_nodes = df[ (df["longitude"] >= LNG_MIN) & (df["longitude"] <= LNG_MAX) & (df["latitude"] >= LAT_MIN) & (df["latitude"] <= LAT_MAX) ] filtered_result.append(vancouver_nodes) # 合并所有结果并导出 final_df = pd.concat(filtered_result, ignore_index=True) final_df.to_csv("./vancouver_filtered_nodes.csv", index=False, encoding="utf-8") print(f"过滤完成,共保留有效节点{len(final_df)}个")
大文件轻量处理版(适合单文件1G以上、内存不足的场景)
用Python内置csv库逐行读取判断,不需要把整个文件加载进内存:
import csv import glob LNG_MIN, LNG_MAX = -123.28, -123.02 LAT_MIN, LAT_MAX = 49.20, 49.32 with open("./vancouver_filtered_nodes_lite.csv", "w", newline="", encoding="utf-8") as f_out: writer = None for csv_path in glob.glob("./your_csv_dir/*.csv"): with open(csv_path, "r", encoding="utf-8") as f_in: reader = csv.DictReader(f_in) # 第一次写入时初始化表头 if writer is None: writer = csv.DictWriter(f_out, fieldnames=reader.fieldnames) writer.writeheader() # 逐行判断过滤 for row in reader: lng = float(row["longitude"]) lat = float(row["latitude"]) if LNG_MIN <= lng <= LNG_MAX and LAT_MIN <= lat <= LAT_MAX: writer.writerow(row)
注意事项
- 提前确认你的数据经纬度坐标系:如果是国内偏移坐标系(GCJ02/BD09),先转成WGS84坐标系再做边界判断,避免位置偏差
- 边界校准方法:如果默认阈值和你标注的黄色框不匹配,拾取矩形四个角的经纬度,取经度最小值、最大值,纬度最小值、最大值替换配置参数即可,校准后可以用几个已知位置的节点(比如温哥华市中心节点、本拿比边界节点)测试过滤效果
- 如果后续需要改成非矩形的行政区域过滤,再引入geopandas做空间点面判断即可,当前矩形场景用上述方案性能是geopandas方案的10倍以上
内容的提问来源于stack exchange,提问作者Aadithya Seshadri
相关产品推荐
相关产品推荐

