本文使用QGIS属性表的字段计算器功能,给矢量线图层添加长度和方向字段
在字段计算器中,QGIS提供了更新和新建两种字段修改方式,实现数值的写入。本文采用新建方式。
注意!注意!若矢量图层采用地理坐标系(即以度为单位),则需要将数据重投影到投影坐标系下。不知道选啥的话,默认选EPSG:3857吧(注意纬度越高,变形越大)。
点击这里,了解更多坐标系信息。
点击这里了,了解如何重投影。
添加线段长度信息
QGIS内建了变量,可以很方便的用于计算。如$area、$length。由于此处只需要进行长度的写入,并不需要对长度计算,所以在表达式中,仅写入$length即可。

添加方向信息
线段的方向信息QGIS并没有提供,我们需要思考如何计算方向?
计算思路:使用线段起始点和终止点坐标,再计算两个坐标点之间的角度即可。
计算过程:点A的坐标是(x1, y1),点B的坐标是(x2, y2),那么Δx = x2 - x1,Δy = y2 - y1。这时候,方向角θ应该是相对于x轴正方向的夹角。所以采用反正切函数来计算这个角度,因为反正切函数处理的是对边和邻边的比值,也就是Δy/Δx。所以θ = atan(Δy / Δx)。最后,再将角度调整到0-360。
最终表达式如下,增加了90与270度垂直情况的处理。
注:yat、xat是获取指定索引位置的y坐标和x坐标的函数。
CASE
WHEN ((yat(-1)-yat(0)) = 0 and (xat(-1) - xat(0)) >0) THEN 90
WHEN ((yat(-1)-yat(0)) = 0 and (xat(-1) - xat(0)) <0) THEN 270
ELSE (atan((xat(-1)-xat(0))/(yat(-1)-yat(0)))) * 180/pi() +
(180 * (((yat(-1)-yat(0)) < 0) + (((xat(-1)-xat(0)) < 0 AND (yat(-1) - yat(0)) > 0)*2)))
END
