用qgis

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

在QGIS内置的python提示中,我可以做到这一点

>>> linesfile
'C:\\Users\\path\\to\\Lines.csv'
>>> mylayer = QgsVectorLayer(linesfile, "GPSLines", "ogr")
>>> mylayer.isValid()
True
>>> mylayer.featureCount()
6624

成功创建了一个虚拟图层,该虚拟图层引用了新鲜创建的一个:

>>> vlayer = QgsVectorLayer("?query=SELECT * FROM 'GPSLines'", 'myvlayer', 'virtual')
>>> vlayer.isValid()
True
>>> vlayer.featureCount()
6624
wove,从外部编辑器(VSCODE)尝试相同的操作,它的行为不像预期。创建的图层似乎无效,但是我看不出为什么甚至找到了更多解释的错误消息。感觉好像我刚刚创建的“ gpslines”层消失在稀薄的空气中。

mylayer = QgsVectorLayer(linesfile, "GPSLines", "ogr") mylayername = mylayer.name() if not mylayer.isValid(): print("Layer failed to load") else: print("Layer loaded.") print("Original number of features: " + str(mylayer.featureCount())) vlayer = QgsVectorLayer("?query=SELECT * FROM 'GPSLines'", 'myvlayer','virtual') if not vlayer.isValid(): error_msg = vlayer.lastError() print(f"Virtual layer creation failed with error: {error_msg}") print("Filtered Layer failed to load") else: print("Filtered Layer loaded.") print("Filtered number of features: " + str(vlayer.featureCount()))

输出:

Layer loaded. Original number of features: 6624 Virtual layer creation failed with error: Filtered Layer failed to load

任何帮助或指针欢迎 - 我不知道在哪里可以寻找。
    

QGIS Python控制台和您的外部脚本之间的区别是图层注册表/管理。在QGIS Python控制台中,当您创建图层时,它会自动添加到项目的图层注册表中,但是从外部脚本运行时,您需要将该图层添加到项目中才能用于虚拟图层查询。 您应该修改您的脚本以处理以下操作:
virtual qgis pyqgis
1个回答
0
投票
from qgis.core import QgsProject # Create and add the source layer mylayer = QgsVectorLayer(linesfile, "GPSLines", "ogr") if not mylayer.isValid(): print("Layer failed to load") else: # Add layer to the project QgsProject.instance().addMapLayer(mylayer) print("Layer loaded.") print("Original number of features: " + str(mylayer.featureCount())) # Now create the virtual layer vlayer = QgsVectorLayer("?query=SELECT * FROM 'GPSLines'", 'myvlayer', 'virtual') if not vlayer.isValid(): error_msg = vlayer.lastError() print(f"Virtual layer creation failed with error: {error_msg}") print("Filtered Layer failed to load") else: print("Filtered Layer loaded.") print("Filtered number of features: " + str(vlayer.featureCount()))

QGI中的虚拟层需要参考项目的一部分。当您在QGIS Python控制台中运行此操作时,该图层会自动添加到项目中,这就是为什么它在此处工作的原因。在外部脚本中,我们需要添加它。

如果您完全独立地运行此此操作(根本不在QGI中),则需要确保已正确初始化QGI。您需要在脚本开始时类似的东西:

from qgis.core import QgsApplication # Initialize QGIS Application qgs = QgsApplication([], False) qgs.initQgis() # Your existing code here... # Clean up when done qgs.exitQgis()
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.