Skip to content

Commit 83b192b

Browse files
author
Joonalai
committed
Use WGS84 crs in bounds, transform if necessary
1 parent ccd3252 commit 83b192b

4 files changed

Lines changed: 32 additions & 9 deletions

File tree

GemeindescanExporter/core/processing/algorithms.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
QgsProcessingException,
2525
QgsFeatureSink, QgsProcessingParameterVectorLayer,
2626
QgsVectorLayer, QgsRectangle, QgsProcessingParameterExtent, QgsProcessingParameterString,
27-
QgsProcessingParameterBoolean)
27+
QgsProcessingParameterBoolean, QgsCoordinateReferenceSystem, QgsCoordinateTransform)
2828

2929
from ..styles2attributes import StylesToAttributes
3030
from ...qgis_plugin_tools.tools.algorithm_processing import BaseProcessingAlgorithm
@@ -83,15 +83,23 @@ def processAlgorithm(self, parameters: Dict[str, Any], context: QgsProcessingCon
8383

8484
wrkr = StylesToAttributes(source, output_name, feedback, primary_layer=primary_layer)
8585

86-
extent: QgsRectangle = self.parameterAsExtent(parameters, self.EXTENT, context, crs=source.sourceCrs())
86+
extent_crs = QgsCoordinateReferenceSystem('EPSG:4326')
87+
extent: QgsRectangle = self.parameterAsExtent(parameters, self.EXTENT, context,
88+
crs=extent_crs)
89+
90+
if extent_crs != source.crs() and extent is not None:
91+
transform = QgsCoordinateTransform(extent_crs, source.crs(), context.project())
92+
extent_transformed = transform.transformBoundingBox(extent)
93+
else:
94+
extent_transformed = extent
8795

8896
sink: QgsFeatureSink
8997
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
9098
wrkr.fields, source.wkbType(), source.sourceCrs())
9199
if sink is None:
92100
raise QgsProcessingException(self.invalidSinkError(parameters, self.OUTPUT))
93101

94-
wrkr.extract_styles_to_layer(sink, extent)
102+
wrkr.extract_styles_to_layer(sink, extent_transformed)
95103

96104
ret_val = {self.OUTPUT: dest_id,
97105
self.OUTPUT_LEGEND: wrkr.get_legend(),

GemeindescanExporter/test/test_utils.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
# You should have received a copy of the GNU General Public License
1818
# along with GemeindescanExporter. If not, see <https://www.gnu.org/licenses/>.
1919
import pytest
20-
from qgis.core import QgsRectangle
20+
from qgis.core import QgsRectangle, QgsCoordinateReferenceSystem, QgsCoordinateTransform, QgsProject
2121

2222
from ..core.utils import extent_to_datapackage_bounds, datapackage_bounds_to_extent
2323

@@ -32,6 +32,11 @@ def extent():
3232
return QgsRectangle(21.54003660, 59.59924232, 31.61838268, 61.02919460)
3333

3434

35+
@pytest.fixture
36+
def extent2():
37+
return QgsRectangle(21.55787082699999857, 59.40132140899999769, 27.46496583600000108, 62.1826135000000022)
38+
39+
3540
@pytest.fixture
3641
def rounded_extent():
3742
return QgsRectangle(21.540037, 59.59924, 31.618383, 61.029195)
@@ -46,3 +51,11 @@ def test_extent_to_datapackage_bounds(extent, bounds):
4651
def test_datapackage_bounds_to_extent(bounds, rounded_extent):
4752
extent = datapackage_bounds_to_extent(bounds)
4853
assert extent == rounded_extent
54+
55+
56+
def test_transformations(extent):
57+
extent_crs = QgsCoordinateReferenceSystem('EPSG:4326')
58+
source_crs = QgsCoordinateReferenceSystem('EPSG:3067')
59+
transform = QgsCoordinateTransform(extent_crs, source_crs, QgsProject.instance())
60+
extent_transformed = transform.transformBoundingBox(extent)
61+
assert not extent_transformed == extent

GemeindescanExporter/ui/dock_widget.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
import os
2424
import tempfile
2525
import uuid
26-
from typing import Dict
26+
from typing import Dict, Optional
2727

28-
from PyQt5.QtCore import pyqtSignal
28+
from PyQt5.QtCore import pyqtSignal, pyqtSlot
2929
from PyQt5.QtWidgets import QCheckBox, QGridLayout, QPushButton, QWidget, QLineEdit
3030
from qgis.PyQt import QtWidgets
3131
from qgis.core import (QgsProcessingContext, QgsVectorLayer, QgsProject,
@@ -62,7 +62,7 @@ def __init__(self, iface: QgisInterface, parent=None):
6262
self.config = load_config_from_template()
6363
self.snapshot_template = load_snapshot_template()
6464
self.writer = DatapackageWriter(self.config)
65-
self.extent: QgsRectangle = self.iface.mapCanvas().extent()
65+
self.extent: Optional[QgsRectangle] = None
6666
self.layer_grid: QGridLayout = self.layer_grid
6767
self.source_grid: QGridLayout = self.source_grid
6868
self.layer_rows: Dict = {}
@@ -72,7 +72,8 @@ def __init__(self, iface: QgisInterface, parent=None):
7272

7373
self.sb_extent_precision.setValue(
7474
get_setting(Settings.extent_precision.name, Settings.extent_precision.value, int))
75-
self.le_extent.setText(self.extent.toString(self.sb_extent_precision.value()))
75+
self.le_extent.setText(
76+
self.extent.toString(self.sb_extent_precision.value()) if self.extent is not None else '')
7677

7778
self.btn_add_layer_row.setIcon(QgsApplication.getThemeIcon('/mActionAdd.svg'))
7879
self.btn_add_layer_row.clicked.connect(lambda _: self._add_layer_row(len(self.layer_rows) + 1))
@@ -259,6 +260,7 @@ def _remove_row(self, row_uuid: str, row_dict: Dict, grid: QGridLayout):
259260
def on_sb_extent_precision_valueChanged(self, new_val: int):
260261
set_setting(Settings.extent_precision.name, new_val)
261262

263+
@pyqtSlot()
262264
def on_btn_calculate_extent_clicked(self):
263265
canvas = self.iface.mapCanvas()
264266
rows = list(self.layer_rows.values())

GemeindescanExporter/ui/extent_dialog.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def __init__(self, canvas: QgsMapCanvas, crs: QgsCoordinateReferenceSystem, pare
3838
extent_gb: QgsExtentGroupBox = self.gb_extent
3939
extent_gb.setOriginalExtent(canvas.extent(), crs)
4040
extent_gb.setCurrentExtent(canvas.extent(), crs)
41-
extent_gb.setOutputCrs(crs)
41+
extent_gb.setOutputCrs(QgsCoordinateReferenceSystem('EPSG:4326'))
4242
# TODO: fix bug - QGIS crashes when drawing from canvas
4343
# extent_gb.setMapCanvas(canvas)
4444

0 commit comments

Comments
 (0)