QGIS将经纬度字符串转换为WKT和Geometry

2,476 阅读2分钟

一、创建WKT字段

创建WKT字段,用于存储转换后的WKT格式的字符串;

1、注意图层数据源

问题: 如果从csv直接导入添加的图层,是没办法进行编辑和添加字段等操作的。

image.png 打开该图层的字段计算器,也可以看到无法添加字段的提醒信息。

image.png 解决办法:
可以将图层导出为其他格式,比如geojson。然后再讲geojson数据进行导入。

image.png

2、wkt字段文本类型

添加字段,选择文本类型,注意要设置长度,最大长度为65535。
image.png

二、转换为WKT

字段操作一般有两个入口。

1、字段计算器

打开字段计算器

image.png

该页面可以同时创建字段并通过表达式计算更新字段值

2、更新字段值

这种方式是对于已经添加完字段的列进行更新数据,可以直接在属性表操作。

image.png 选择要更新的字段,然后点击=后面的按钮,会弹出【表达式对话框】,该对话框同方法1的内容一样。设置好表达式后,点击OK,=后面的文本框会展示表达式内容,点击【全部更新】可以对所有数据进行表达式操作。

3、转换结果

转换前

117.085144,37.255432;116.913483,37.031586;117.32547,36.740448;117.778656,37.167542;117.085144,37.255432

转换后

POLYGON((117.085144 37.255432,116.913483 37.031586,117.32547 36.740448,117.778656 37.167542,117.085144 37.255432))

4、表达式说明

concat('POLYGON((', 
    array_to_string(
        array_foreach(
            string_to_array("经纬度字符串字段名", ';'),
            concat(
                regexp_substr(@element, '(.*?),'),
                ' ',
                regexp_substr(@element, ',(.*)')
            )
        ),
        ', '
    ),
    '))'
)
  • 函数concat: 将多个字符串连接成一个字符串。
  • 函数array_to_string: 将数组元素连接成一个字符串,用分隔符进行区分,并使用可选的字符串代替数组中的空值。
  • 函数string_to_array: 使用提供的分隔符和可选的空值将字符串分割成一个数组。
  • 函数array_foreach: 遍历数组中的每一个元素,并对每一个元素应用表达式计算新值,结果为一个新的数组。
  • 函数regexp_substr: 返回字符串中与提供的正则表达式匹配的部分。
  • @element: 在QGIS的表达式中,@element是一个特殊变量,用于循环处理数组中的每个元素。

另外,可以将自己的表达式保存起来。

image.png

三、WKT转换为Geometry

由于在该图层无法创建Geometry字段,所以通过将wkt图层导出为csv后,然后重新导入QGIS的方式。

1、重新导出csv

image.png

2、添加矢量图层

image.png 导入后,地图呈现空间数据。