diff --git a/swiss_locator/core/filters/swiss_locator_filter.py b/swiss_locator/core/filters/swiss_locator_filter.py index b763123..70f349a 100644 --- a/swiss_locator/core/filters/swiss_locator_filter.py +++ b/swiss_locator/core/filters/swiss_locator_filter.py @@ -24,7 +24,7 @@ import sys import traceback -from PyQt5.QtCore import Qt, QTimer +from PyQt5.QtCore import Qt, QTimer, QCoreApplication from PyQt5.QtGui import QColor from PyQt5.QtWidgets import QLabel, QWidget, QTabWidget from PyQt5.QtCore import QUrl, pyqtSignal, QEventLoop @@ -42,6 +42,8 @@ QgsWkbTypes, QgsLocatorContext, QgsFeedback, + QgsPoint, + QgsPointXY, QgsRasterLayer, QgsVectorTileLayer, ) @@ -443,9 +445,7 @@ def triggerResult(self, result: QgsLocatorResult): if not ch_layer.isValid(): msg = self.tr( - "Cannot load Vector Tiles layer: {}".format( - swiss_result.title - ) + "Cannot load Vector Tiles layer: {}".format(swiss_result.title) ) level = Qgis.Warning self.info(msg, level) @@ -453,14 +453,14 @@ def triggerResult(self, result: QgsLocatorResult): ch_layer.setLabelsEnabled(True) ch_layer.loadDefaultMetadata() - error, warnings = '', [] + error, warnings = "", [] res, sublayers = ch_layer.loadDefaultStyleAndSubLayers(error, warnings) if sublayers: msg = self.tr( "Sublayers found ({}): {}".format( swiss_result.title, - "; ".join([sublayer.name() for sublayer in sublayers]) + "; ".join([sublayer.name() for sublayer in sublayers]), ) ) level = Qgis.Info @@ -468,24 +468,20 @@ def triggerResult(self, result: QgsLocatorResult): if error or warnings: msg = self.tr( "Error/warning found while loading default styles and sublayers for layer {}. Error: {} Warning: {}".format( - swiss_result.title, - error, - "; ".join(warnings) + swiss_result.title, error, "; ".join(warnings) ) ) level = Qgis.Warning self.info(msg, level) - msg = self.tr( - "Layer added to the map: {}".format( - swiss_result.title - ) - ) + msg = self.tr("Layer added to the map: {}".format(swiss_result.title)) level = Qgis.Info self.info(msg, level) # Load basemap layers at the bottom of the layer tree root = QgsProject.instance().layerTreeRoot() + empty_project = not QgsProject.instance().mapLayers() + if sublayers: # Sublayers should be loaded on top of the vector tile # layer. We group them to keep them all together. @@ -498,6 +494,27 @@ def triggerResult(self, result: QgsLocatorResult): QgsProject.instance().addMapLayer(ch_layer, False) root.insertLayer(-1, ch_layer) + if empty_project: + QCoreApplication.processEvents() # wait for application to process pending tasks + + if ( + self.map_canvas.mapSettings().destinationCrs().authid() + == "EPSG:3857" + ): + # Set the Swiss extent in EPSG:3857 + extent = QgsRectangle(624991, 5725825, 1209826, 6089033) + else: # Transform a WGS84 extent to map CRS + bottom_left = QgsPoint(5.8, 45.2) + top_right = QgsPoint(10.569, 48.322) + bottom_left.transform(self.transform_4326) + top_right.transform(self.transform_4326) + extent = QgsRectangle( + QgsPointXY(bottom_left), QgsPointXY(top_right) + ) + + self.map_canvas.setExtent(extent) + self.map_canvas.refresh() + # Location else: point = QgsGeometry.fromPointXY(swiss_result.point)