Почему не отображается OGR-слой?

Вопросы по нескольким пакетам сразу, или вопросы, которые непонятно к какой ГИС отнести
Ответить
CherAnya
Новоприбывший
Сообщения: 1
Зарегистрирован: 06 май 2021, 12:18
Репутация: 0
Откуда: Екатеринбург

Почему не отображается OGR-слой?

Сообщение CherAnya » 06 май 2021, 12:31

Здравствуйте! Взяла приложение из статьи "Создание приложения на базе набора библиотек QGIS на Python"
Пытаюсь переделать его, чтобы работало с использованием PyQt5.
Функция, добавляющая слой выглядит так:

Код: Выделить всё

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())
При запуске приложения слой не отображается на карте. Хотя ошибка не вылетает, так же название и тип данных из загружаемого shape-файла выводятся, значит сам инструмент добавления слоя работает. Пробовала менять shape-файлы, не помогло. Пробовала прописывать загрузку слоя при открытии приложения - ничего. Весь код приложения:

Код: Выделить всё

from PyQt5 import QtCore, QtGui, QtWidgets, uic
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()
  
    # Добавить OGR-слой
    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())

def main(app):
  # Создание приложения
    wnd = MainWindow()
    wnd.show()
    app.exec()

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

Ответить

Вернуться в «Общий - ПО»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя