QGIS 里把经纬度从 dd 转成 dms
使用 QGIS 的场景下景,如果图层里已有点要素,几何是经纬度(十进制度 dd),想在属性表里生成一列 dms 字符串,用来做标注或导出给别人看,可以参考下面的操作步骤。
总体思路
直接在 字段计算器 里,用表达式把 $x / $y 这两个几何字段转成 度° 分' 秒" 这种形式的文本字段。
操作步骤
- 打开图层属性表 → 点击 字段计算器
-
新建字段
- 字段名:如
lon_dms/lat_dms - 字段类型:文本(string)
- 字段名:如
-
在表达式框里:
- 经度用
$x那个公式 - 纬度用
$y那个公式
- 经度用
- 点“确定”,字段生成完就可以用来标注或导出。
经纬度转 dms 的表达式
经度($x)示例:
(CASE WHEN $x < 0 THEN '-' ELSE '' END)
|| floor (abs($x))
|| '° '
|| floor(((abs($x)) - floor (abs($x))) * 60)
|| '\''
|| substr(
tostring(
(((abs($x)) - floor (abs($x))) * 60
- floor(((abs($x)) - floor (abs($x))) * 60)
) * 60
),
1, 5
)
|| '"'
纬度($y)示例:
(CASE WHEN $y < 0 THEN '-' ELSE '' END)
|| floor (abs($y))
|| '° '
|| floor(((abs($y)) - floor (abs($y))) * 60)
|| '\''
|| substr(
tostring(
(((abs($y)) - floor (abs($y))) * 60
- floor(((abs($y)) - floor (abs($y))) * 60)
) * 60
),
1, 5
)
|| '"'
表达式快速拆解
CASE WHEN $x < 0 THEN '-':保留正负号floor(abs($x)):度(整数部分)((abs($x)) - floor(abs($x))) * 60:分(小数部分 × 60)- 再取小数部分 × 60:秒
substr(..., 1, 5):秒保留几位小数(这里是大约 2 ~ 3 位)
想改精度的时候,只要调整 substr 的长度即可。
备注
- 如果坐标不是经纬度(比如投影坐标),记得先在 项目 CRS / 图层 CRS 里确认是 WGS84(EPSG:4326)或其他地理坐标系;
- 想加上 E / W、N / S 这种字母,可以在 CASE 里多拼一点字符串。