咨询:如何用QGIS或其他工具实现点位半径匹配并导出结果
QGIS新手友好方案:点位空间关联与导出
一、QGIS操作步骤
1. 导入CSV数据
- 打开QGIS,点击「图层」→「添加图层」→「添加分隔文本图层」
- 分别导入Site List A和Site List B:
- 选中对应CSV文件,确认**Lat(纬度)和Long(经度)**字段被正确识别,坐标系选择
EPSG:4326(WGS84,通用经纬度坐标系) - 点击「添加」完成加载
- 选中对应CSV文件,确认**Lat(纬度)和Long(经度)**字段被正确识别,坐标系选择
2. 转换坐标系(关键:球面转平面,支持英里距离计算)
- 右键Site List A图层→「导出」→「保存要素为」
- 保存格式选「内存图层」(临时用,不占硬盘),坐标系搜索
EPSG:3857(Web墨卡托,适配全球范围),点击「确定」 - 对Site List B重复上述转换操作
3. 空间连接(匹配范围内点位)
- 点击「处理」→「工具箱」,搜索「空间连接」工具打开
- 设置核心参数:
- 目标图层:选转换后的Site List A(要关联的主体)
- 连接图层:选转换后的Site List B(匹配源)
- 连接类型:选「保留所有目标要素并匹配所有连接要素」(保留A中未匹配的点,方便后续筛选)
- 匹配条件:选「在距离内」,输入对应米数:
- 1/4英里 = 402.336米,1/2英里 = 804.672米(QGIS默认用米计算,直接输入更准确)
- 输出图层:选「保存到文件」,格式选CSV或Excel(.xlsx),设置保存路径
- 点击「运行」,等待处理完成(3000+10000的量级,几秒就能搞定)
4. 导出结果
- 处理完成后,新生成的关联图层会自动加载,右键→「导出」→「保存要素为」,选择你需要的格式即可
二、替代方案:Python脚本(无需QGIS)
如果不想折腾QGIS,用Python写个脚本也能实现,步骤如下:
- 先安装依赖:打开命令行输入
pip install pandas geopy - 复制以下代码(替换文件路径和距离参数):
import pandas as pd from geopy.distance import geodesic # 替换成你的文件路径 df_a = pd.read_csv("site_list_a.csv") df_b = pd.read_csv("site_list_b.csv") # 设置匹配距离,0.25是1/4英里,0.5是1/2英里 match_distance = 0.25 results = [] # 遍历A的每个点位,匹配B中符合距离条件的点 for _, row_a in df_a.iterrows(): point_a = (row_a['Lat'], row_a['Long']) for _, row_b in df_b.iterrows(): point_b = (row_b['Lat'], row_b['Long']) dist = geodesic(point_a, point_b).miles if dist <= match_distance: # 合并A和B的字段,加上距离值 combined = {**row_a.to_dict(), **row_b.to_dict(), 'distance_miles': round(dist, 4)} results.append(combined) # 导出结果到CSV pd.DataFrame(results).to_csv("matched_sites.csv", index=False) # 要导出Excel的话,替换成:pd.DataFrame(results).to_excel("matched_sites.xlsx", index=False)
注:10000个B点的话,双重循环大概需要几分钟,普通电脑完全能扛住。
内容的提问来源于stack exchange,提问作者Grags
相关产品推荐
相关产品推荐

