将QGIS插件逻辑引入独立应用程序

2024-05-03 13:59:30 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
1条回答
网友
1楼 · 发布于 2024-05-03 13:59:30

是的,有办法做到。但到目前为止,我发现我们需要将整个Qgis库复制到最终的软件包中。在代码中设置qgis应用的正确路径非常重要,如下所示:

QgsApplication.setPrefixPath(r"C:\OSGeo4W\apps\qgis", True)
QgsApplication.initQgis()
QgsProject.instance().setFileName(strProjectName)

我们还需要写入文件并在最后关闭它

QgsProject.instance().write()
QgsApplication.exitQgis()

这是我创建的独立包的快照。代码需要修改一些变量才能工作。你知道吗

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
from qgis.gui import *
import os, datetime

class CreateQgs():

    def initQgsFile(self, outputFolder, stopRadius):

        strProjectName = str(outputFolder) + "\\" + "PhotoLocationMap.qgs"
        QgsApplication.setPrefixPath(r"C:\OSGeo4W\apps\qgis", True)
        QgsApplication.initQgis()
        QgsProject.instance().setFileName(strProjectName)

        highwayShapeFilePath = "C:/Shapefiles/Highway.shp"
        arterialShapeFilePath = "C:/Shapefiles/StreetsMajor.shp"

        highwayLayer = QgsVectorLayer(self.highwayShapeFilePath, 'HighwayDB' , 'ogr')
        arterialLayer = QgsVectorLayer(self.arterialShapeFilePath, 'ArterialDB', 'ogr')

        symbols = highwayLayer.rendererV2().symbols()
        sym = symbols[0]
        sym.setColor(QColor.fromRgb(255,94,94))
        highwayLayer.triggerRepaint()

        symbols = arterialLayer.rendererV2().symbols()
        sym = symbols[0]
        sym.setColor(QColor.fromRgb(76,138,245))
        arterialLayer.triggerRepaint()

        mapInstance = QgsMapLayerRegistry.instance()

        mapInstance.instance().addMapLayer(arterialLayer)
        mapInstance.instance().addMapLayer(highwayLayer) 

        QgsProject.instance().write()
        QgsApplication.exitQgis()

def unitTest():
    app = QgsApplication(sys.argv, True)
    photoFolderPath = 'C:\Test\QGis\TestPics'
    CreateQgsFile = CreateQgs()
    CreateQgsFile.initQgsFile(photoFolderPath, 128)

if __name__ == "__main__":
    unitTest()

相关问题 更多 >