本系列用于总结项目过程中用到的QGIS基础操作、分析方法
内容如下:
1. 线相交:将两矢量层在交点处产生点
2.缓冲区+相交:道路沿线100m的POI数量
3.距最近枢纽(线到枢纽):道路沿线最近的POI数量
4.按位置连接属性:用于分析道路相接道路
1. 线相交:将两矢量层在交点处产生点
输入两个相同的道路矢量图层,可产生所有的相交路线的交叉口点坐标
运行前->运行后:
2.缓冲区+相交
建立道路图层的缓冲区,距离为0.001时半径为100m,选择融合结果就是缓冲区中间的黑色线条被隐去,但是对于点图层的连接操作,其中的覆盖影响仍然存在
通过相交两个图层将POI点连接至缓冲区,导出“相交”图层为csv格式
统计每个路段连接到的POI即可得到意义上的 “道路沿线100m的POI数量”。
不太美妙的一点是每个POI只能连接到一个道路上,即使是融合结果也只能连在最上面那条道路上
3.距最近枢纽(线到枢纽)
与距最近枢纽(点)的区别在于前者以线图层展示,后者以点图层展示
首先将用工具“提取顶点”生成路段的端点图层
导入大学POI(详情见另外两篇系列文章)
选择工具:距最近枢纽(线到枢纽),源点图层选择待统计的POI点图层,目标枢纽图层选择路段顶点图层,枢纽图层名属性选择路段顶点唯一索引——序号,计量单位选米。运行结果如以下第三个图所示:
枢纽距离图层的属性如上所示,HubName为POI连接的路段序号,对序号出现次数进行统计即可得到路段连接的最近POI数量。(将该属性表导出,统计用到的python代码附于文末)
4.按位置连接属性
该插件可用于分析路段相接路段的情况。
两个图层均选择南京路段,几何图形空间关系选择接触,连接类型选择(一对多)
连接出来的图层即为与道路相接触的道路,将其数据形式改变可用于后续分析
=========================================================================
统计每条道路连接的POI数量的python代码:
road_num = {} #建立字典
with open("枢纽距离.csv","r") as df:
for line in df: #遍历文件
list_tmp = line.split(",") #将文件每行按照,分隔成列表
if list_tmp and list_tmp[-2] != "HubName": #第一行的hubname不进入统计
if list_tmp[-2] not in road_num :
road_num[list_tmp[-2]] = 1 #如果字典中没有则创建
else:
road_num[list_tmp[-2]] += 1
print(len(road_num))
with open("南京道路.csv","r",encoding="gb2312") as rf: #打开路况文件只读
with open("南京道路_最近的大学数量.csv",'w',encoding="gb2312") as wf: #新建立匹配文件只写
for line in rf:
list_tmp2 = line.split(',') #list_tmp2就是rf的内容
if list_tmp2[0].rstrip() in road_num:
list_tmp2.insert(1,str(road_num[list_tmp2[0].rstrip()])) #在list_tmp2第2列里插入字典里对应的值
else:
if list_tmp2[0] == "序号":
list_tmp2.insert(1, "大学poi") #标题栏填充
else:
list_tmp2.insert(1,"0")
wf.write(",".join(list_tmp2)) #list_tmp2以csv格式写入wf