如何在QGIS或其他GIS软件中生成街道密度极坐标直方图?
如何基于Line Density栅格生成反映街道布局的极坐标直方图
一、在QGIS中将Line Density栅格转为极坐标直方图的步骤
步骤1:提取栅格的密度与坐标信息
打开QGIS的Processing Toolbox,找到Raster pixels to points工具(路径:Raster conversion),将你的Line Density栅格转为点要素。每个点会自动携带原栅格的密度值(默认字段名为value),以及点的XY坐标。步骤2:将笛卡尔坐标转为极坐标
打开点图层的属性表,用字段计算器添加两个新字段:- 角度字段(命名为
angle):用表达式degrees(azimuth(make_point(你的原点X, 你的原点Y), $geometry))。这里的原点可以是城市中心(手动输入坐标),也可用centroid(layer_extent(@layer))自动取图层范围中心。QGIS中azimuth返回弧度,转角度后范围为0-360度,0对应正北,顺时针递增。 - 距离字段(可选,命名为
distance):用表达式distance(make_point(你的原点X, 你的原点Y), $geometry),用于后续筛选不同距离范围的密度数据。
- 角度字段(命名为
步骤3:按角度分组统计密度
先通过字段计算器创建角度区间字段angle_bin,比如每10度一组,表达式为floor("angle"/10)*10,将0-360度划分为36个区间。
再用Statistics by categories工具(路径:Vector analysis),选择angle_bin作为分类字段,对value字段做统计(选平均值或总和,总和代表该角度区间的总密度,平均值代表区间内平均密度,按需选择)。步骤4:生成极坐标直方图
方法一:QGIS自带图表工具
打开统计结果图层的属性表,点击工具栏Chart按钮,选择Bar chart:- X轴选
angle_bin,Y轴选统计后的密度值(如mean_value) - 在
Axes选项卡中,将X轴类型改为Polar,调整角度起始方向、范围等参数即可生成极坐标直方图。
方法二:导出数据到外部工具绘制
将统计结果导出为CSV,用Excel的极坐标图功能,或Python的Matplotlib库(设置projection='polar'后用bar函数绘制),自由度更高。
- X轴选
二、能否绘制以角度为函数的街道位置密度(而非方向密度)
完全可以,上述流程就是实现这个需求的方案:
- 传统极坐标直方图统计的是街道线段的方向数量,因此会出现对称问题(比如0度和180度的街道方向会被重复计数);
- 基于Line Density栅格的统计,是按从原点出发的角度方向上的像素密度值计算,反映的是该方向上街道的分布密度(和位置直接相关),不会出现对称偏差——某方向街道多、密度高,对应角度的柱形就高,相反方向街道少则柱形低,刚好能捕捉街道布局的偏好方向。
注意:原点的选择要贴合城市核心位置,否则统计结果会偏离实际布局特征;角度区间的大小可按需调整(5度更精细,20度更简洁)。
内容的提问来源于stack exchange,提问作者Basilikum
相关产品推荐
相关产品推荐

