为什么不显示 OGR 层?

问题描述

我正在使用 qgis 和 pyqt5 编写一个 python 应用程序。在应用程序中,我创建了一个添加图层的工具:

def addLayer(self):
    layer = QgsvectorLayer('test.shp','test','ogr')

    if not layer.isValid():
       print("Layer Failed to load!")
    else:
       QgsProject.instance().addMapLayer(layer)
       self.canvas.setExtent(layer.extent())
    for field in layer.fields():
       print(field.name(),field.typeName())

应用程序启动时,图层不显示在地图上。虽然错误没有崩溃,但也显示了加载的shapefile中的数据名称和数据类型,这意味着图层添加工具本身正在工作。尝试更改 shapefile,它没有帮助。我试图在打开应用程序时规定层的加载 - 没有。所有应用代码

from PyQt5.QtWidgets import QApplication,qframe,qgridLayout,QMainWindow,QVBoxLayout
from PyQt5.QtGui import QPainter,QColor,QFont
from PyQt5.QtCore import pyqtSignal
from qgis.gui import QgsMapCanvas,QgsMapToolPan,QgsMapToolZoom 
from qgis.core import QgsApplication,QgsvectorLayer,QgsProject,QgsMarkerSymbol 
import sys,os
 
from mainwindow_ui import Ui_MainWindow

app = QApplication([])
qgs = QgsApplication([],False)

qgs.setPrefixPath("C:/OSGeo4W64/apps/qgis",True)
qgs.initQgis()

class MainWindow(QMainWindow,Ui_MainWindow):
    triggered = pyqtSignal()
    def __init__( self ):
        QMainWindow.__init__( self )
        
        self.setupUi( self )
    
        self.setwindowTitle('QGIS Demo')

        self.canvas = QgsMapCanvas()
        self.canvas.setCanvasColor(QColor( 200,200,255 ))
        self.canvas.enableAntiAliasing(True)
        self.canvas.show()

        self.layout = QVBoxLayout(self.frame)
        self.layout.addWidget(self.canvas)

        self.actionAdd_Layer.triggered.connect(self.addLayer)
        self.actionZoom_In.triggered.connect(self.zoomIn)
        self.actionZoom_Out.triggered.connect(self.zoomOut)
        self.actionPan.triggered.connect(self.pan)
        self.actionZoom_Full.triggered.connect(self.zoomFull)

        self.toolbar = self.addToolBar("Map")
        
        self.toolbar.addAction(self.actionAdd_Layer);
        self.toolbar.addAction(self.actionZoom_In);
        self.toolbar.addAction(self.actionZoom_Out);
        self.toolbar.addAction(self.actionPan);
        self.toolbar.addAction(self.actionZoom_Full);

        self.toolPan = QgsMapToolPan(self.canvas)
        self.toolPan.setAction(self.actionPan)
        self.toolZoomIn = QgsMapToolZoom(self.canvas,False) # false = уменьшить
        self.toolZoomIn.setAction(self.actionZoom_In)
        self.toolZoomOut = QgsMapToolZoom(self.canvas,True) # true = увеличить
        self.toolZoomOut.setAction(self.actionZoom_Out)

    def zoomIn( self ):
        self.canvas.setMapTool(self.toolZoomIn)
  
    def zoomOut( self ):
        self.canvas.setMapTool(self.toolZoomOut)
  
    def pan( self ):
        self.canvas.setMapTool(self.toolPan)
  
    def zoomFull( self ):
        self.canvas.zoomToFullExtent()
  
    def addLayer(self):
        layer = QgsvectorLayer('test.shp','ogr')

        if not layer.isValid():
            print("Layer Failed to load!")
        else:
            # Добавить слой в реестр
            QgsProject.instance().addMapLayer(layer)
            # Установить охват карты равным охвату слоя
            self.canvas.setExtent(layer.extent())
        for field in layer.fields():
            print(field.name(),field.typeName())

def main(app):
    wnd = MainWindow()
    wnd.show()
    app.exec()

if __name__ == "__main__":
    main(app)


解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)