问题描述
计算若干个办公楼到最近的地铁站的路线长度
输入文件
办公楼点文件(csv),地铁站点文件(csv),道路线(shp)
步骤
1.“图层”→“添加分隔文本图层”,分别添加办公楼点文件(csv),地铁站点文件(csv)。
2.工具箱“矢量分析”→“要素之间最短线”,得到办公楼点和地铁站点之间的最短线shp以及最短距离。
3.将上一步骤得到的点对及其坐标按顺序分别存入csv中,用python脚本批量运行“网格分析”→“最短路径(点到点)”,代码如下:
import csv
with open("你的办公楼点文件路径.csv") as f1:
work =csv.DictReader(f1)
sp = [row['xy'] for row in work] #将点坐标存入“xy”列,横纵坐标之间用,隔开
#print(sp)
with open("你的地铁站点文件路径.csv") as f2:
subway = csv.DictReader(f2)
ep = [row['xy'] for row in subway]
#print(ep)
for i in range(len(sp)):
#print(str(i),":",sp[i],",",ep[i])
parameter_dict = {'INPUT':'你的道路线图路径.shp',
'STRATEGY':0,'DIRECTION_FIELD':'','VALUE_FORWARD':'','VALUE_BACKWARD':'','VALUE_BOTH':'','DEFAULT_DIRECTION':0,'SPEED_FIELD':'','DEFAULT_SPEED':1,'TOLERANCE':0,
'START_POINT':sp[i],'END_POINT':ep[i],
'OUTPUT':'存储生成的最短线路径/short_path/{}.gpkg'.format(i)}
try:
processing.run("native:shortestpathpointtopoint", parameter_dict)
print("第{}个点运行完成".format(i+1))
except:
print("第{}个点之间没有最短路径".format(i+1))
continue
4.将生产的最短线路径文件(.gbkg)拖入QGIS中,“矢量通用”→“合并矢量图层”,合并所有最短路径。右键打开合并图形的属性表,“字段计算器”:$length
计算出线段长度。
5.整理结果:“图层工具”→“导出到电子表格”,将步骤2、步骤4得到的图层导出为excel。在excel中整理步骤4得到的最短路径长度,没有最短路径的点对用步骤2得到的最短距离代替。
注:步骤4算法生成的最短路径可能存在明显不合理,需要人工筛选。注意统一坐标系。