Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python将csv导入QGIS_Python_Csv_Qgis - Fatal编程技术网

使用Python将csv导入QGIS

使用Python将csv导入QGIS,python,csv,qgis,Python,Csv,Qgis,我正在尝试使用python脚本将文件导入QGIS。我很难让它接受CRS。迄今为止的代码 从PyQt4.QtGui导入* 从PyQt4.QtCore导入* 从qgis.core导入* 从qgis.utils导入iface ----1在此处设置文件名 InFlnm='Input.CSV' ---2在此处设置路径名 InDrPth='G:/test' ---3构建uri的文件名和路径 InFlPth=“file://”+InDrPth+InFlnm ---4套进口钉注此处只需设置x和y其他免费! ur

我正在尝试使用python脚本将文件导入QGIS。我很难让它接受CRS。迄今为止的代码

从PyQt4.QtGui导入* 从PyQt4.QtCore导入* 从qgis.core导入* 从qgis.utils导入iface

----1在此处设置文件名 InFlnm='Input.CSV'

---2在此处设置路径名 InDrPth='G:/test'

---3构建uri的文件名和路径 InFlPth=“file://”+InDrPth+InFlnm

---4套进口钉注此处只需设置x和y其他免费! uri=InFlPth+“?分隔符=%s&xField=%s&yField=%s”%(“,”,“x”,“y”)

---5将点加载到图层中 bh=QgsVectorLayer(uri,InFlnm,“delimitedtext”)

---6设置CRS(不确定这是否有效?) bh.setCrs(qgscoordinaereferencesystem(32365,qgscoordinaereferencesystem.EpsgCrsId) ---7在QGIS中显示图层(这里有语法错误?) QgsMapLayerRegistry.instance().addMapLayer(bh)

现在,以上所有工作正常,QGIC在执行脚本的最后一行显示图层之前提示我输入CRS,只要我注释掉步骤6


但是,如果试图设置CRS从步骤6中删除,我会在显示点的最后一行收到语法错误报告(步骤7)。请注意这里的诀窍是什么-我对Python非常陌生,但了解一些其他编程滞后问题。

在您的--6行代码末尾缺少一个括号。

我在找到了问题的最后一部分的答案。我似乎您需要抑制提示CRS的表单。因此,我的脚本现在开始了ks喜欢

#--- Load a csv file and set CRS
#---1 Reference library
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from qgis.core import *
from qgis.utils import iface

#---  2 Turn of the CRS dialog box
s = QSettings()
oldValidation = s.value( "/Projections/defaultBehaviour")
s.setValue( "/Projections/defaultBehaviour", "useGlobal" )

#--- 3 Set file name here
InFlnm='Test.csv'

#--- 4  Set pathname here
InDrPth='C:/_Work/PyQGIS/Test/'

#--- 5 Build file name an path for uri
InFlPth="file:///"+InDrPth+InFlnm

#---  6 Set import Sting here note only need to set x and y other come for free
uri = InFlPth+"?delimiter=%s&xField=%s&yField=%s" % (",","x","y")

#--- 7 Load point layer
bh = QgsVectorLayer(uri, InFlnm, "delimitedtext")

#--- 8 Confirm something is loaded and valid
bh.isValid()

#--- 9 Set CRS
bh.setCrs(QgsCoordinateReferenceSystem(32365, QgsCoordinateReferenceSystem.EpsgCrsId))

#--- 10 Display the layer into QGIS (but it asks for CRS before displaying_
QgsMapLayerRegistry.instance().addMapLayer(bh)

#--- 11 turn CRS dialog box back on again
s.setValue( "/Projections/defaultBehaviour", oldValidation )

导入的点现在显示,但我收到一个错误,说明CRS未被识别,因此怀疑上面的步骤9不起作用。如果我能解决此问题,我将再次发布,否则我可能不得不对CRS默认值感到满意。

感谢导入示例,这对地理编码器python脚本非常有用,我想输出一个csv从输入qgis。要解决您的问题,请在uri行中添加crs:

uri = InFlPth+"?crs=epsg:32365&delimiter=%s&xField=%s&yField=%s" % (",","x","y")    

你能通过打印数组或其他东西来验证你是否读取了csv文件中的值吗?朱利叶斯感谢你的回答-我有点尴尬,因为我没有发现这个语法问题,因为你已经指出了这一点。但是,当我现在运行脚本时,QGIS仍然会提示“坐标参考系选择器”表单选择一个CRS。我正在尝试第6步将停止此提示,因为已为导入的CSV设置了CRS?请使用指向正确方向的指针,因为我希望在无需人工干预的情况下加载并显示脚本。嗯,检查bh.source()以查看是否实际加载了某些内容。哦,还有bh.isValid()所有这些都是从阅读资料中获得的你有没有发现9的问题?我也有同样的问题我想有人解决了这个问题-检查下面的线程-我从来没有回到这一点的乐趣。。。