[QGIS]常用操作--矢量图层加载与创建

发布时间 2023-10-29 16:13:52作者: Kara-Young

文章中使用的QGIS版本为:3.14.16-Pi
本文主要介绍如何使用QGIS通过使用界面操作和Python代码打开矢量数据(如shp文件或csv文件),以及如何添加矢量数据.

矢量图层加载

加载CSV文件

我在平时调试程序时,会使用csv文件将临时结果输出,然后加载到QGIS中查看.这里简单介绍下,怎么加载csv文件.

  • 菜单栏点击"图层"->"添加图层"->"添加文本数据图层"
  • 在弹出的"数据源管理器"中,选择csv文件,并指定横纵(有高程的可以指定Z)坐标字段(一般QGIS会自动识别这些字段,部分情况如识别错误,可以手动指定)和坐标参考线后,点击"添加",即可将数据加载,如下图
    add_csv_layer
  • 添加后的效果如下
    layer_added

加载SHP文件

  • 可以通过直接选中*.shp文件,然后移动鼠标拖入QGIS进行加载
  • 也可以在上步的"数据源管理器"界面,选中"矢量",然后指定为文件类型和文件路径后,点击"添加"进行加载,如下图
    shp_layer

重投影与格式互转

  • 格式转换是经常遇到的作业,QGIS提供了基于GDAL的数据格式转换,如上步的shp格式数据可以转换为gpkg,geojson,sqlite等格式
  • 平时工作中,重投影也是常见操作,如从经纬度的EPSG4326重投影为UTM的EPSG32650等,操作如下图
    重投影时,通过指定输出文件类型,也可以实现文件格式转换
    reprojection

新建图层

  • 此处简单介绍下,如何通过在QGIS中使用Python代码创建矢量图层,并保存到文件中,一般有以下步骤:
    1. 创建内存图层,此时需要设置图层的几何类型,如点->Point,线->LineString等
    2. 设置图层的字段列表
    3. 打开图层编辑,开始向图层添加数据
    4. 提交数据,关闭图层编辑
    5. 向磁盘写入本图层数据.
      样例代码如下
import os
import sys
from qgis.gui import *
from qgis.core import *
import qgis.utils
from qgis.core import QgsProject

mapCanvas = iface.mapCanvas()
minx = 115.4121250000000032
miny = 39.4379350000000031
maxx = 117.5067739999999930
maxy = 41.0583829999999992
layername = "Rectangle"
print("create layer:%s..." % (layername))
lineVecLayer = QgsVectorLayer("LineString", layername, "memory")
lineProvider = lineVecLayer.dataProvider()
lineProvider.addAttributes( [ QgsField("seq", QVariant.Int),QgsField("name",  QVariant.String)] )
lineVecLayer.startEditing()
print("editing layer:%s..." % (layername))
points = [QgsPoint(minx, miny), QgsPoint(minx, maxy), QgsPoint(maxx, maxy), QgsPoint(maxx, miny), QgsPoint(minx, miny)]
# create feature
print("add feature to layer:%s..." % (layername))
line_feature = QgsFeature(lineVecLayer.fields())
line_feature.setGeometry(QgsGeometry().fromPolyline(points))
line_feature.setAttributes([1, "bj_bbox"])
lineVecLayer.addFeature(line_feature)
# Commit changes
lineVecLayer.commitChanges()
# write data to disk
LineFile = "D:\\01_WorkSpace\\05_Data\\blog\\qgis\\Rectangle.gpkg"
crs = QgsCoordinateReferenceSystem("EPSG:4326")
QgsVectorFileWriter.writeAsVectorFormat(lineVecLayer, LineFile, "utf-8", crs, "GPKG")
print("save layer:%s to disk ok!" % (layername))
local_uri = LineFile + "|layername=" + layername
qgsLayer = QgsVectorLayer(local_uri, layername, "ogr")
# add layer to the project
QgsProject.instance().addMapLayer(qgsLayer)

参考资料
[1]QGIS Python api
以上是关于QGIS加载矢量图层或创建矢量图层的简单介绍,希望能对您有所帮助,如对上述有疑问或者建议,欢迎私信~~