You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 12:54:27