如何导入多个csv文件到QGIS 3.22.2?

问题描述 投票:0回答:3

我想一次导入多个csv文件到QGIS。这些文件包含纬度/经度数据。我想要这些文件来投影点。基本上,我希望导入 csv 文件得到与使用数据源管理器分隔文本并选择点坐标并将 x 字段和 y 字段分别设置为长/纬度时相同的结果。

我不断在众多论坛上遇到相同的 python 代码。虽然我可以将文件作为表导入,但无法让它们加载几何图形(下一阶段的问题也将是让时间戳作为日期而不是字符串加载,我可能必须重构所有文件)。

这是论坛上可用的代码,导致加载损坏的链接(我的文件具有列标题“Lat”和“Long”):

import glob, os

# Define path to  directory of your csv files
path_to_csv = "C:/File Path/"

# Set current directory to path of csv files
os.chdir(path_to_csv)  
# Find each .csv file and load them as vector layers
for fname in glob.glob("*.csv"):  
    uri ="file:///"+path_to_csv + fname+"encoding=%s&delimiter=%s&xField=%s&yField=%s&crs=%s" % ("UTF-8",",", "Long", "Lat","epsg:4326")
    name=fname.replace('.csv', '')
    lyr = QgsVectorLayer(uri, name, 'delimitedtext')
    QgsProject.instance().addMapLayer(lyr)

此代码将加载图层,但带有“不可用图层”的警告三角形。单击三角形将打开“修复数据源”窗口。我可以手动选择文件并修复链接。但它只不过是一个所有字段都是字符串的表。

如果我运行这样的代码,我会导入要导入的文件,但仅作为表格且没有几何图形:

import glob, os

# Define path to  directory of your csv files
path_to_csv = "C:/Users/DanielStevens/Documents/Afghanistan Monitoring/Phase 2/Border Crossing/Crossing Polygons/Pakistan/"

# Set current directory to path of csv files
os.chdir(path_to_csv)  
# Find each .csv file and load them as vector layers
for fname in glob.glob("*.csv"):  
    uri ="file:///"+path_to_csv + fname
    "encoding=%s&delimiter=%s&xField=%s&yField=%s&crs=%s" % ("UTF-8",",", "Long", 
    "Lat","epsg:4326")
    name=fname.replace('.csv', '')
    lyr = QgsVectorLayer(uri, name, 'delimitedtext')
    QgsProject.instance().addMapLayer(lyr)

如何让 CSV 文件批量导入几何图形(经纬度投影点)?

python csv qgis
3个回答
0
投票

我将您所拥有的内容修改为下面的行,并且效果完美。我删除了编码,因为我的数据不是 UTF-8。不确定是否是这样造成的。

uri = "file:///" + path_to_csv + fname + "?delimiter=%s&crs=epsg:3857&xField=%s&yField=%s" % (",", "lon", "lat")

0
投票

如果它有助于解决部分问题,则在导入 csv 时使用 csvt 文件有助于强制数据类型(如果您有多个文件,尤其是文件名发生更改时,例如需要处理新批次时,这会很痛苦)。我正在考虑编写一些 python 来读取 csv、创建具有相同文件名的 csvt 并使用正确数量的列定义填充该文件。最后,由于我只有 30 个文件,所以使用记事本制作 csvt,然后相应地重命名它会更快。我还发现,在 Qgis 中,将日期时间字段转换为 Oracle 日期时间的处理更加一致。希望有帮助。


-1
投票

有一个很酷的 QGIS 插件可以做到这一点。它的名字是CSV批量导入

它允许浏览 CSV 文件目录。然后递归导入该目录中的所有 CSV 文件作为 QGIS 中的图层。

© www.soinside.com 2019 - 2024. All rights reserved.