From 2d768f48a6fa85ee834cf361d1925b2c8d2704b0 Mon Sep 17 00:00:00 2001 From: Till Frankenbach Date: Fri, 31 May 2024 07:38:53 -0400 Subject: [PATCH 1/7] fix: extend color dict for isochrones by one T print correct error message in processing algorithm --- ORStools/common/isochrones_core.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ORStools/common/isochrones_core.py b/ORStools/common/isochrones_core.py index 57efaea0..1e5de695 100644 --- a/ORStools/common/isochrones_core.py +++ b/ORStools/common/isochrones_core.py @@ -195,6 +195,7 @@ def stylePoly(self, layer: QgsMapLayer) -> None: 7: QColor("#f99e59"), 8: QColor("#e85b3a"), 9: QColor("#d7191c"), + 10: None, } categories = [] From f3e9d5bb8339581ee2b80ba1adfeaa6b0670922c Mon Sep 17 00:00:00 2001 From: Till Frankenbach Date: Fri, 31 May 2024 07:45:09 -0400 Subject: [PATCH 2/7] docs: add changelog entry --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d46e9da5..60d3a47b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,10 @@ RELEASING: 14. Create new release in GitHub with tag version and release title of `vX.X.X` --> +## Unreleased +### Fixed +- Log the correct ApiError message in the isochrone processing algorithm with > 10 ranges ([#264](https://github.com/GIScience/orstools-qgis-plugin/issues/264)) + ## [1.8.3] - 2024-05-29 ### Fixed From 19300dd3f349f2f9bc826338e9634728c8f8c6d7 Mon Sep 17 00:00:00 2001 From: Merydian Date: Fri, 7 Jun 2024 02:35:28 +0200 Subject: [PATCH 3/7] Revert "fix: extend color dict for isochrones by one" This reverts commit 2d768f48a6fa85ee834cf361d1925b2c8d2704b0. --- ORStools/common/isochrones_core.py | 1 - 1 file changed, 1 deletion(-) diff --git a/ORStools/common/isochrones_core.py b/ORStools/common/isochrones_core.py index 1e5de695..57efaea0 100644 --- a/ORStools/common/isochrones_core.py +++ b/ORStools/common/isochrones_core.py @@ -195,7 +195,6 @@ def stylePoly(self, layer: QgsMapLayer) -> None: 7: QColor("#f99e59"), 8: QColor("#e85b3a"), 9: QColor("#d7191c"), - 10: None, } categories = [] From 0b2cc852e0171be74407b89b338d9ef1a152ff1b Mon Sep 17 00:00:00 2001 From: Merydian Date: Fri, 7 Jun 2024 02:41:08 +0200 Subject: [PATCH 4/7] feat: generate random color with more than 10 ranges --- ORStools/common/isochrones_core.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ORStools/common/isochrones_core.py b/ORStools/common/isochrones_core.py index 57efaea0..775b2fd8 100644 --- a/ORStools/common/isochrones_core.py +++ b/ORStools/common/isochrones_core.py @@ -26,7 +26,7 @@ * * ***************************************************************************/ """ - +from random import random from typing import Any, Generator from qgis._core import QgsMapLayer @@ -203,9 +203,12 @@ def stylePoly(self, layer: QgsMapLayer) -> None: # initialize the default symbol for this geometry type symbol = QgsSymbol.defaultSymbol(layer.geometryType()) + # set color + color = colors[cid] if colors[cid] else QColor("%06x" % random.randint(0, 0xFFFFFF)) + # configure a symbol layer symbol_layer = QgsSimpleFillSymbolLayer( - color=colors[cid], strokeColor=QColor("#000000") + color=color, strokeColor=QColor("#000000") ) # replace default symbol layer with the configured one From ecb1017d027ba1b15f7d190d6022486740025ed8 Mon Sep 17 00:00:00 2001 From: Till Frankenbach Date: Fri, 7 Jun 2024 04:09:15 -0400 Subject: [PATCH 5/7] feat: switch to QgsGraduatedSymbolRenderer ramp_name = 'Spectral' --- ORStools/common/isochrones_core.py | 54 +++++++++--------------------- 1 file changed, 15 insertions(+), 39 deletions(-) diff --git a/ORStools/common/isochrones_core.py b/ORStools/common/isochrones_core.py index 775b2fd8..252cbdb9 100644 --- a/ORStools/common/isochrones_core.py +++ b/ORStools/common/isochrones_core.py @@ -26,10 +26,9 @@ * * ***************************************************************************/ """ -from random import random +import random from typing import Any, Generator -from qgis._core import QgsMapLayer from qgis.core import ( QgsPointXY, QgsFeature, @@ -38,8 +37,12 @@ QgsGeometry, QgsSymbol, QgsSimpleFillSymbolLayer, - QgsRendererCategory, + QgsGraduatedSymbolRenderer, QgsCategorizedSymbolRenderer, + QgsMapLayer, + QgsStyle, + QgsClassificationEqualInterval, + ) from qgis.PyQt.QtCore import QVariant @@ -184,44 +187,17 @@ def stylePoly(self, layer: QgsMapLayer) -> None: field = layer.fields().indexOf(self.field_dimension_name) unique_values = sorted(layer.uniqueValues(field)) - colors = { - 0: QColor("#2b83ba"), - 1: QColor("#64abb0"), - 2: QColor("#9dd3a7"), - 3: QColor("#c7e9ad"), - 4: QColor("#edf8b9"), - 5: QColor("#ffedaa"), - 6: QColor("#fec980"), - 7: QColor("#f99e59"), - 8: QColor("#e85b3a"), - 9: QColor("#d7191c"), - } - - categories = [] - - for cid, unique_value in enumerate(unique_values): - # initialize the default symbol for this geometry type - symbol = QgsSymbol.defaultSymbol(layer.geometryType()) - - # set color - color = colors[cid] if colors[cid] else QColor("%06x" % random.randint(0, 0xFFFFFF)) - - # configure a symbol layer - symbol_layer = QgsSimpleFillSymbolLayer( - color=color, strokeColor=QColor("#000000") - ) - - # replace default symbol layer with the configured one - if symbol_layer is not None: - symbol.changeSymbolLayer(0, symbol_layer) - # create renderer object - category = QgsRendererCategory(unique_value, symbol, str(unique_value) + legend_suffix) - # entry for the list of category items - categories.append(category) + classification_method = QgsClassificationEqualInterval() + ramp_name = 'Spectral' + default_style = QgsStyle().defaultStyle() + color_ramp = default_style.colorRamp(ramp_name) + num_classes = len(unique_values) - # create renderer object - renderer = QgsCategorizedSymbolRenderer(self.field_dimension_name, categories) + renderer = QgsGraduatedSymbolRenderer(self.field_dimension_name) + renderer.setSourceColorRamp(color_ramp) + renderer.setClassificationMethod(classification_method) + renderer.updateClasses(layer, num_classes) # assign the created renderer to the layer if renderer is not None: From 9606d28c70099c2df14d16b4171c773185b31d74 Mon Sep 17 00:00:00 2001 From: Till Frankenbach Date: Fri, 7 Jun 2024 04:24:56 -0400 Subject: [PATCH 6/7] style: run ruff --- ORStools/common/isochrones_core.py | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/ORStools/common/isochrones_core.py b/ORStools/common/isochrones_core.py index 252cbdb9..7ca7a8a6 100644 --- a/ORStools/common/isochrones_core.py +++ b/ORStools/common/isochrones_core.py @@ -26,7 +26,7 @@ * * ***************************************************************************/ """ -import random + from typing import Any, Generator from qgis.core import ( @@ -35,18 +35,13 @@ QgsField, QgsFields, QgsGeometry, - QgsSymbol, - QgsSimpleFillSymbolLayer, QgsGraduatedSymbolRenderer, - QgsCategorizedSymbolRenderer, QgsMapLayer, QgsStyle, QgsClassificationEqualInterval, - ) from qgis.PyQt.QtCore import QVariant -from qgis.PyQt.QtGui import QColor # import processing @@ -179,17 +174,11 @@ def stylePoly(self, layer: QgsMapLayer) -> None: :type layer: QgsMapLayer """ - if self.dimension == "time": - legend_suffix = " min" - else: - legend_suffix = " m" - field = layer.fields().indexOf(self.field_dimension_name) unique_values = sorted(layer.uniqueValues(field)) - classification_method = QgsClassificationEqualInterval() - ramp_name = 'Spectral' + ramp_name = "Spectral" default_style = QgsStyle().defaultStyle() color_ramp = default_style.colorRamp(ramp_name) num_classes = len(unique_values) From 4eebbc1b73d9d41b4af49c2782439cf890120869 Mon Sep 17 00:00:00 2001 From: Till Frankenbach Date: Fri, 7 Jun 2024 04:28:42 -0400 Subject: [PATCH 7/7] feat: invert color ramp --- ORStools/common/isochrones_core.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ORStools/common/isochrones_core.py b/ORStools/common/isochrones_core.py index 7ca7a8a6..fe36d92d 100644 --- a/ORStools/common/isochrones_core.py +++ b/ORStools/common/isochrones_core.py @@ -181,6 +181,7 @@ def stylePoly(self, layer: QgsMapLayer) -> None: ramp_name = "Spectral" default_style = QgsStyle().defaultStyle() color_ramp = default_style.colorRamp(ramp_name) + color_ramp.invert() num_classes = len(unique_values) renderer = QgsGraduatedSymbolRenderer(self.field_dimension_name)