2016-09-26 4 views
0

QT, Python 및 QGIS를 처음 사용했습니다. "Plugin Builder"플러그인을 설치하고 Dockwidget을 생성했습니다. qtcreator를 사용하여 위젯을 변경할 수 있으며 자신의 플러그인으로 작동하는 신호와 슬롯을 구현하는 방법을 배우고 있습니다.QGIS 플러그인 논리를 독립 실행 형으로 응용 프로그램

지금, 내 질문에. QGIS iface를 제거하고 QGIS 외부에서 내 플러그인 논리를 사용할 수있는 쉬운 방법이 있습니까? 현재 실제로 PyQGIS 라이브러리를 사용하고 있지는 않지만 "플러그인 빌더"에서 생성 한 QT 인터페이스와 Python 코드/구조를 유지하려고합니다. 그렇게 할 수있는 방법이 있습니까?

감사합니다.

답변

0

예, 방법이 있습니다. 그러나 지금까지 내가 찾은 것은 전체 Qgis 라이브러리를 최종 소프트웨어 패키지에 복사해야한다는 것입니다.

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

는 또한 우리가 파일을 작성하고 최종

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

에 닫을 필요가 여기에 스탠드의 스냅 샷입니다 : 다음과 같이 코드 내부 QGIS 응용 프로그램에 대한 올바른 경로를 설정하는 것이 매우 중요합니다 혼자서 만든 패키지입니다. 일부 변수가 작동하려면 코드를 수정해야합니다.

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()