From a209a91155e4a8544150bea0b158a2367fb732d4 Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Wed, 2 Aug 2023 17:01:14 -0600 Subject: [PATCH 01/19] Add new validator for style suffix correctness --- qgreenland/models/config/layer.py | 68 +++------- qgreenland/util/layer_style.py | 8 ++ .../__init__.py} | 0 .../util/model_validators/layer_style.py | 116 ++++++++++++++++++ 4 files changed, 144 insertions(+), 48 deletions(-) create mode 100644 qgreenland/util/layer_style.py rename qgreenland/util/{model_validators.py => model_validators/__init__.py} (100%) create mode 100644 qgreenland/util/model_validators/layer_style.py diff --git a/qgreenland/models/config/layer.py b/qgreenland/models/config/layer.py index bdb2d405..911b47c0 100644 --- a/qgreenland/models/config/layer.py +++ b/qgreenland/models/config/layer.py @@ -1,15 +1,18 @@ from pathlib import Path from typing import Any, Optional, Union -from xml.etree import ElementTree -from pydantic import Field, validator +from pydantic import Field -import qgreenland.exceptions as exc -from qgreenland.constants.paths import ANCILLARY_DIR from qgreenland.models.base_model import QgrBaseModel from qgreenland.models.config.dataset import AnyAsset, Dataset from qgreenland.models.config.step import AnyStep +from qgreenland.util.layer_style import get_style_filepath from qgreenland.util.model_validators import reusable_validator, validate_paragraph_text +from qgreenland.util.model_validators.layer_style import ( + validate_style_file_exists, + validate_style_file_only_contains_allowed_fonts, + validate_style_file_unit_suffixes, +) class LayerInput(QgrBaseModel): @@ -23,10 +26,6 @@ class LayerInput(QgrBaseModel): """The actual input asset (file or files).""" -def _style_filepath(style_name: str) -> Path: - return ANCILLARY_DIR / "styles" / (style_name + ".qml") - - class Layer(QgrBaseModel): id: str """Unique identifier.""" @@ -57,45 +56,18 @@ class Layer(QgrBaseModel): steps: Optional[list[AnyStep]] _validate_description = reusable_validator("description", validate_paragraph_text) - - @validator("style") - @classmethod - def style_file_only_contains_allowed_fonts(cls, value): - """Ensure only fonts that can be downloaded by QGIS are in our style files. - - This ensures we don't re-trigger an old issue: - https://github.com/nsidc/qgreenland/issues/515 - """ - # TODO: Is the full list of supported fonts available in PyQGIS' API? I think - # this is the complete list, but haven't found it in the Python API yet: - # https://github.com/qgis/QGIS/blob/a7b31c7db29328fc44966a854d22c452f58c77c1/src/core/textrenderer/qgsfontmanager.cpp#L203-L925 - allowed_fonts = ["Open Sans"] - if value: - style_filepath = _style_filepath(value) - tree = ElementTree.parse(style_filepath) - for elem in tree.getroot().iter(): - if font_family := elem.attrib.get("fontFamily", False): - if font_family not in allowed_fonts: - raise exc.QgrInvalidConfigError( - f"Style {style_filepath} contains disallowed font:" - f" '{font_family}'." - f" Only the following fonts are allowed: {allowed_fonts}." - ) - - return value - - @validator("style") - @classmethod - def style_file_exists(cls, value): - """Ensure the QML style file exists in the configuration.""" - if value: - style_filepath = _style_filepath(value) - if not style_filepath.is_file(): - raise exc.QgrInvalidConfigError( - f"Style file does not exist: {style_filepath}" - ) - - return value + _validate_style_file_exists = reusable_validator( + "style", + validate_style_file_exists, + ) + _validate_style_file_only_contains_allowed_fonts = reusable_validator( + "style", + validate_style_file_only_contains_allowed_fonts, + ) + _validate_style_file_unit_suffixes = reusable_validator( + "style", + validate_style_file_unit_suffixes, + ) @property def style_filepath(self) -> Union[Path, None]: @@ -103,7 +75,7 @@ def style_filepath(self) -> Union[Path, None]: if self.style is None: return None - return _style_filepath(self.style) + return get_style_filepath(self.style) def __json__(self) -> dict[Any, Any]: """Limit child models that are output when dumping JSON. diff --git a/qgreenland/util/layer_style.py b/qgreenland/util/layer_style.py new file mode 100644 index 00000000..9f058371 --- /dev/null +++ b/qgreenland/util/layer_style.py @@ -0,0 +1,8 @@ +from pathlib import Path + +from qgreenland.constants.paths import ANCILLARY_DIR + + +def get_style_filepath(style_name: str) -> Path: + """Generate a Path object for style file represented by `style_name`.""" + return ANCILLARY_DIR / "styles" / (style_name + ".qml") diff --git a/qgreenland/util/model_validators.py b/qgreenland/util/model_validators/__init__.py similarity index 100% rename from qgreenland/util/model_validators.py rename to qgreenland/util/model_validators/__init__.py diff --git a/qgreenland/util/model_validators/layer_style.py b/qgreenland/util/model_validators/layer_style.py new file mode 100644 index 00000000..d0df5484 --- /dev/null +++ b/qgreenland/util/model_validators/layer_style.py @@ -0,0 +1,116 @@ +from xml.etree import ElementTree + +import qgreenland.exceptions as exc +from qgreenland.util.layer_style import get_style_filepath + + +def validate_style_file_exists(style_name: str): + """Ensure the QML style file exists in the configuration.""" + if style_name: + style_filepath = get_style_filepath(style_name) + if not style_filepath.is_file(): + raise exc.QgrInvalidConfigError( + f"Style file does not exist: {style_filepath}" + ) + + return style_name + + +def validate_style_file_only_contains_allowed_fonts(style_name: str): + """Ensure only fonts that can be downloaded by QGIS are in our style files. + + This ensures we don't re-trigger an old issue: + https://github.com/nsidc/qgreenland/issues/515 + """ + # TODO: Is the full list of supported fonts available in PyQGIS' API? I think + # this is the complete list, but haven't found it in the Python API yet: + # https://github.com/qgis/QGIS/blob/a7b31c7db29328fc44966a854d22c452f58c77c1/src/core/textrenderer/qgsfontmanager.cpp#L203-L925 + allowed_fonts = ["Open Sans"] + if style_name: + style_filepath = get_style_filepath(style_name) + tree = ElementTree.parse(style_filepath) + + # Check every XML tag for a `fontFamily` attribute with an undesired value + for elem in tree.getroot().iter(): + if font_family := elem.attrib.get("fontFamily", False): + if font_family not in allowed_fonts: + raise exc.QgrInvalidConfigError( + f"Style {style_filepath} contains disallowed font:" + f" '{font_family}'." + f" Only the following fonts are allowed: {allowed_fonts}." + ) + + return style_name + + +def validate_style_file_unit_suffixes(style_name: str): + """Ensure common errors in style configuration of unit suffixes are avoided. + + For example, the "Label unit suffix" field in the QGIS Layer Symbology menu seems + like the only place to populate this data, but if the displayed color ramp legend is + continuous (new feature in 3.18), then the "suffix" field in the "Legend Settings" + menu will be used. If the former is populated, ensure the latter matches. + + Also ensures that continuous legends are horizontal. + """ + error_prefix = ( + f"Style '{style_name}' has a continuous legend that is incorrectly" + f" configured:" + ) + + if style_name: + style_filepath = get_style_filepath(style_name) + tree = ElementTree.parse(style_filepath) + + colorrampshader = tree.find(".//colorrampshader") + if colorrampshader is None: + # This style is not using a colorramp, so there is no "Label unit suffix" + # setting to be concerned with. + return style_name + + if colorrampshader.attrib["classificationMode"] != "1": + # This colorramp is not continuous, so the "Label unit suffix" will be + # used if specified. + return style_name + + first_item = colorrampshader.find(".//item") + + if first_item is None: + # Color ramp is empty anyway... should this be a validation error? + return style_name + + unit_suffix = first_item.attrib["label"].removeprefix( + first_item.attrib["value"] + ) + + if not unit_suffix: + # The first colorrampitem's label does not contain a suffix set by the + # "Label unit suffix" field in QGIS. We can assume the style is set up as + # the user intended. + return style_name + + rampLegendSettings = colorrampshader.find(".//rampLegendSettings") + continuous_legend_suffix = ( + rampLegendSettings.attrib["suffix"] if rampLegendSettings else None + ) + + if continuous_legend_suffix == unit_suffix: + if rampLegendSettings and rampLegendSettings.attrib["orientation"] != "1": + raise exc.QgrInvalidConfigError( + f"{error_prefix}\n" + " Continuous legend orientation must be horizontal.\n" + f"In QGIS >=3.28, edit this style ({style_filepath}) in" + " the layer symbology menu and set the orientation in the" + ' "Legend Settings" menu.' + ) + + # This style's suffixes and orientation are set up correctly! + return style_name + + raise exc.QgrInvalidConfigError( + f"{error_prefix}\n" + f" {continuous_legend_suffix=} != {unit_suffix=}\n" + f"In QGIS >=3.28, edit this style ({style_filepath}) in the layer symbology" + ' menu and ensure that the "Label unit suffix" exactly matches the "suffix"' + ' field in the "Legend Settings" menu.' + ) From 0cedad2947d27843be69cdeb253e3a92d89218e8 Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Wed, 2 Aug 2023 17:39:09 -0600 Subject: [PATCH 02/19] Mimic QGIS label precision behavior --- qgreenland/util/model_validators/layer_style.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/qgreenland/util/model_validators/layer_style.py b/qgreenland/util/model_validators/layer_style.py index d0df5484..74a4265b 100644 --- a/qgreenland/util/model_validators/layer_style.py +++ b/qgreenland/util/model_validators/layer_style.py @@ -43,7 +43,7 @@ def validate_style_file_only_contains_allowed_fonts(style_name: str): return style_name -def validate_style_file_unit_suffixes(style_name: str): +def validate_style_file_unit_suffixes(style_name: str): # noqa: C901 """Ensure common errors in style configuration of unit suffixes are avoided. For example, the "Label unit suffix" field in the QGIS Layer Symbology menu seems @@ -79,9 +79,16 @@ def validate_style_file_unit_suffixes(style_name: str): # Color ramp is empty anyway... should this be a validation error? return style_name - unit_suffix = first_item.attrib["label"].removeprefix( - first_item.attrib["value"] - ) + first_value = first_item.attrib["value"] + first_label = first_item.attrib["label"] + + # If the label is rounded, we have to round the value before subtracting. + if ( + label_precision := colorrampshader.attrib.get("labelPrecision", "0") + ) != "0": + first_value = f"{float(first_value):.{label_precision}f}" + + unit_suffix = first_label.removeprefix(first_value) if not unit_suffix: # The first colorrampitem's label does not contain a suffix set by the From 06e7d0ac2fc717b5f0b2f07219d3f340a1682efc Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Wed, 2 Aug 2023 17:40:04 -0600 Subject: [PATCH 03/19] Fix up sea ice concentration and racmo wind speed styles --- .../ancillary/styles/racmo_wind_speed.qml | 260 +++- .../styles/sea_ice_concentration.qml | 1182 +++++++++-------- 2 files changed, 849 insertions(+), 593 deletions(-) diff --git a/qgreenland/ancillary/styles/racmo_wind_speed.qml b/qgreenland/ancillary/styles/racmo_wind_speed.qml index c1617000..25207ff6 100644 --- a/qgreenland/ancillary/styles/racmo_wind_speed.qml +++ b/qgreenland/ancillary/styles/racmo_wind_speed.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + MinMax @@ -23,72 +133,90 @@ 2 - + - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + resamplingFilter 0 diff --git a/qgreenland/ancillary/styles/sea_ice_concentration.qml b/qgreenland/ancillary/styles/sea_ice_concentration.qml index 922aadf2..f0c84bd7 100644 --- a/qgreenland/ancillary/styles/sea_ice_concentration.qml +++ b/qgreenland/ancillary/styles/sea_ice_concentration.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + None @@ -23,532 +133,550 @@ 2 - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + resamplingFilter 0 From 0426ee5bcbe996c91629af53b8af15ee89ac6e46 Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Thu, 3 Aug 2023 19:17:07 -0600 Subject: [PATCH 04/19] WIP: Attempt to replicate QGIS layer number formatting behavior --- .../util/model_validators/layer_style.py | 41 +++++++++++++++---- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/qgreenland/util/model_validators/layer_style.py b/qgreenland/util/model_validators/layer_style.py index 74a4265b..76b3116b 100644 --- a/qgreenland/util/model_validators/layer_style.py +++ b/qgreenland/util/model_validators/layer_style.py @@ -1,5 +1,7 @@ from xml.etree import ElementTree +from qgis.core import QgsRendererRangeLabelFormat + import qgreenland.exceptions as exc from qgreenland.util.layer_style import get_style_filepath @@ -43,7 +45,7 @@ def validate_style_file_only_contains_allowed_fonts(style_name: str): return style_name -def validate_style_file_unit_suffixes(style_name: str): # noqa: C901 +def validate_style_file_unit_suffixes(style_name: str): """Ensure common errors in style configuration of unit suffixes are avoided. For example, the "Label unit suffix" field in the QGIS Layer Symbology menu seems @@ -82,13 +84,12 @@ def validate_style_file_unit_suffixes(style_name: str): # noqa: C901 first_value = first_item.attrib["value"] first_label = first_item.attrib["label"] - # If the label is rounded, we have to round the value before subtracting. - if ( - label_precision := colorrampshader.attrib.get("labelPrecision", "0") - ) != "0": - first_value = f"{float(first_value):.{label_precision}f}" - - unit_suffix = first_label.removeprefix(first_value) + label_precision = colorrampshader.attrib.get("labelPrecision", "0") + unit_suffix = _get_unit_suffix( + value=first_value, + label=first_label, + label_precision=label_precision, + ) if not unit_suffix: # The first colorrampitem's label does not contain a suffix set by the @@ -121,3 +122,27 @@ def validate_style_file_unit_suffixes(style_name: str): # noqa: C901 ' menu and ensure that the "Label unit suffix" exactly matches the "suffix"' ' field in the "Legend Settings" menu.' ) + + +def _get_unit_suffix(*, label: str, value: str, label_precision: int = 0) -> str | None: + """Calculate the unit suffix for a QGIS colormap entry. + + A QGIS style has a `` with a `labelPrecision` setting. Each + `` has a `label` and a `value` attribute. In order to calculate the suffix + from the `label`, we need to calculate the non-suffix part of the `label` based on + `value`. Then we can difference the calculated label (sans suffix) and the real + label to get the suffix. + """ + # expected_label = _label_generation_emulator( + # value, + # label_precision=label_precision, + # ) + + formatter = QgsRendererRangeLabelFormat() + formatter.setTrimTrailingZeroes(True) + formatter.setPrecision(label_precision) + + # This doesn't handle the case: + # value: "-0.0936000000000003" -> label: "-0.093600" + formatted_value = formatter.formatNumber(float(value)) + return label.removeprefix(formatted_value) From f1ad8b7eaea5fcd25c2f7bb1bda6365938468684 Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Fri, 4 Aug 2023 16:20:43 -0600 Subject: [PATCH 05/19] Improve error messaging for weird quirks with QGIS "Label unit suffix" field --- .../util/model_validators/layer_style.py | 35 +++++++++++-------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/qgreenland/util/model_validators/layer_style.py b/qgreenland/util/model_validators/layer_style.py index 76b3116b..fca90201 100644 --- a/qgreenland/util/model_validators/layer_style.py +++ b/qgreenland/util/model_validators/layer_style.py @@ -84,7 +84,7 @@ def validate_style_file_unit_suffixes(style_name: str): first_value = first_item.attrib["value"] first_label = first_item.attrib["label"] - label_precision = colorrampshader.attrib.get("labelPrecision", "0") + label_precision = int(colorrampshader.attrib.get("labelPrecision", "0")) unit_suffix = _get_unit_suffix( value=first_value, label=first_label, @@ -115,34 +115,41 @@ def validate_style_file_unit_suffixes(style_name: str): # This style's suffixes and orientation are set up correctly! return style_name + # QGIS can be really finicky with the "Label unit suffix" field because its + # value is not saved into the XML as a dedicated field like one would expect. + # Instead, the labels are pre-calculated to add prefixes and suffixes, then + # saved in whole to the XML. This means that for QGIS to display a "Label unit + # suffix" field in the GUI, it has to calculate the suffixes and prefixes from + # the labels in the XML. Strange errors can be introduced during this process, + # like seemingly-random numbers being prepended to the "Label unit suffix" value + # in the GUI, and then propagating to all labels in the XML. raise exc.QgrInvalidConfigError( f"{error_prefix}\n" f" {continuous_legend_suffix=} != {unit_suffix=}\n" f"In QGIS >=3.28, edit this style ({style_filepath}) in the layer symbology" ' menu and ensure that the "Label unit suffix" exactly matches the "suffix"' - ' field in the "Legend Settings" menu.' + ' field in the "Legend Settings" menu. If the suffixes reported in this' + ' error message look wrong to you, you may need to re-check the "Label unit' + ' suffix" and press the "Classify" button and re-save the style to correct' + " errors." ) def _get_unit_suffix(*, label: str, value: str, label_precision: int = 0) -> str | None: """Calculate the unit suffix for a QGIS colormap entry. - A QGIS style has a `` with a `labelPrecision` setting. Each - `` has a `label` and a `value` attribute. In order to calculate the suffix - from the `label`, we need to calculate the non-suffix part of the `label` based on - `value`. Then we can difference the calculated label (sans suffix) and the real + A QGIS style's `` has a `labelPrecision` attribute. Each `` + within has a `label` and a `value` attribute. In order to calculate the suffix from + the `label`, we need to calculate the non-suffix part of the `label` based on + `value`. Then we can difference the calculated label (sans suffix) and the real label to get the suffix. - """ - # expected_label = _label_generation_emulator( - # value, - # label_precision=label_precision, - # ) + TODO: Support a "clip" argument (originates in `` element)? Not + sure how that's set in the GUI but seems to usually be 0. + """ formatter = QgsRendererRangeLabelFormat() - formatter.setTrimTrailingZeroes(True) + formatter.setTrimTrailingZeroes(False) # Does this setting correspond with "clip"? formatter.setPrecision(label_precision) - # This doesn't handle the case: - # value: "-0.0936000000000003" -> label: "-0.093600" formatted_value = formatter.formatNumber(float(value)) return label.removeprefix(formatted_value) From 2f5583c936d15e5eeac558c641a8b0df5c087136 Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Fri, 4 Aug 2023 18:09:31 -0600 Subject: [PATCH 06/19] Fix some style validation errors --- .../ancillary/styles/ice_sheet_velocity.qml | 262 +++- .../ancillary/styles/ice_thickness_change.qml | 1180 +++++++++-------- .../ancillary/styles/seawater_temperature.qml | 1180 +++++++++-------- .../ancillary/styles/vertical_velocity.qml | 180 ++- 4 files changed, 1657 insertions(+), 1145 deletions(-) diff --git a/qgreenland/ancillary/styles/ice_sheet_velocity.qml b/qgreenland/ancillary/styles/ice_sheet_velocity.qml index 159eb569..fe5a50da 100644 --- a/qgreenland/ancillary/styles/ice_sheet_velocity.qml +++ b/qgreenland/ancillary/styles/ice_sheet_velocity.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + None @@ -23,72 +133,90 @@ 2 - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + resamplingFilter 0 diff --git a/qgreenland/ancillary/styles/ice_thickness_change.qml b/qgreenland/ancillary/styles/ice_thickness_change.qml index 3482a4b4..e7fa48fa 100644 --- a/qgreenland/ancillary/styles/ice_thickness_change.qml +++ b/qgreenland/ancillary/styles/ice_thickness_change.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + None @@ -23,532 +133,550 @@ 2 - + - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + resamplingFilter 0 diff --git a/qgreenland/ancillary/styles/seawater_temperature.qml b/qgreenland/ancillary/styles/seawater_temperature.qml index 2a2d7782..8d81f1dd 100644 --- a/qgreenland/ancillary/styles/seawater_temperature.qml +++ b/qgreenland/ancillary/styles/seawater_temperature.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + None @@ -23,532 +133,550 @@ 2 - + - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + resamplingFilter 0 diff --git a/qgreenland/ancillary/styles/vertical_velocity.qml b/qgreenland/ancillary/styles/vertical_velocity.qml index a7e4646d..17b316ed 100644 --- a/qgreenland/ancillary/styles/vertical_velocity.qml +++ b/qgreenland/ancillary/styles/vertical_velocity.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + None @@ -23,31 +133,49 @@ 2 - - - - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + + resamplingFilter 0 From 5072750a0a96ef822631c07440b4407d7de7c956 Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Fri, 4 Aug 2023 18:09:51 -0600 Subject: [PATCH 07/19] Add TODO about a style that can't pass validation --- qgreenland/util/model_validators/layer_style.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/qgreenland/util/model_validators/layer_style.py b/qgreenland/util/model_validators/layer_style.py index fca90201..6fe2ef21 100644 --- a/qgreenland/util/model_validators/layer_style.py +++ b/qgreenland/util/model_validators/layer_style.py @@ -146,6 +146,11 @@ def _get_unit_suffix(*, label: str, value: str, label_precision: int = 0) -> str TODO: Support a "clip" argument (originates in `` element)? Not sure how that's set in the GUI but seems to usually be 0. + + TODO: Does not support large numbers well, adds commas where the QGIS symbology menu + does not. + formatter.formatNumber(float(-9902)) + >>> '-9,902' """ formatter = QgsRendererRangeLabelFormat() formatter.setTrimTrailingZeroes(False) # Does this setting correspond with "clip"? From 409ec1dc3741b8293052f49d1b067c0565fd11fe Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Mon, 7 Aug 2023 15:46:53 -0600 Subject: [PATCH 08/19] Simplify continuous legend validation logic Calculating the suffix from QGIS' QML file is difficult. Let's just give up on that and do this the easier way. --- qgreenland/models/config/layer.py | 6 +- .../util/model_validators/layer_style.py | 152 +++++++----------- 2 files changed, 58 insertions(+), 100 deletions(-) diff --git a/qgreenland/models/config/layer.py b/qgreenland/models/config/layer.py index 911b47c0..9218a87f 100644 --- a/qgreenland/models/config/layer.py +++ b/qgreenland/models/config/layer.py @@ -9,9 +9,9 @@ from qgreenland.util.layer_style import get_style_filepath from qgreenland.util.model_validators import reusable_validator, validate_paragraph_text from qgreenland.util.model_validators.layer_style import ( + validate_style_file_continuous_legend, validate_style_file_exists, validate_style_file_only_contains_allowed_fonts, - validate_style_file_unit_suffixes, ) @@ -64,9 +64,9 @@ class Layer(QgrBaseModel): "style", validate_style_file_only_contains_allowed_fonts, ) - _validate_style_file_unit_suffixes = reusable_validator( + _validate_style_file_continuous_legend = reusable_validator( "style", - validate_style_file_unit_suffixes, + validate_style_file_continuous_legend, ) @property diff --git a/qgreenland/util/model_validators/layer_style.py b/qgreenland/util/model_validators/layer_style.py index 6fe2ef21..59dc3bf8 100644 --- a/qgreenland/util/model_validators/layer_style.py +++ b/qgreenland/util/model_validators/layer_style.py @@ -1,7 +1,5 @@ from xml.etree import ElementTree -from qgis.core import QgsRendererRangeLabelFormat - import qgreenland.exceptions as exc from qgreenland.util.layer_style import get_style_filepath @@ -45,116 +43,76 @@ def validate_style_file_only_contains_allowed_fonts(style_name: str): return style_name -def validate_style_file_unit_suffixes(style_name: str): - """Ensure common errors in style configuration of unit suffixes are avoided. - - For example, the "Label unit suffix" field in the QGIS Layer Symbology menu seems - like the only place to populate this data, but if the displayed color ramp legend is - continuous (new feature in 3.18), then the "suffix" field in the "Legend Settings" - menu will be used. If the former is populated, ensure the latter matches. +def validate_style_file_continuous_legend(style_name: str): + """Ensure common errors in continuous style configuration are avoided. - Also ensures that continuous legends are horizontal. + * Ensures continuous legends are horizontal. + * Ensures a "Suffix" is populated in the "Legend Settings" menu. """ + if not style_name: + return style_name + + style_filepath = get_style_filepath(style_name) + tree = ElementTree.parse(style_filepath) + + errors = [] error_prefix = ( f"Style '{style_name}' has a continuous legend that is incorrectly" f" configured:" ) + error_suffix = ( + f"In QGIS >=3.28, edit this style ({style_filepath}) in the layer symbology" + ' menu and configure the continuous legend in the "Legend Settings" submenu.' + ) - if style_name: - style_filepath = get_style_filepath(style_name) - tree = ElementTree.parse(style_filepath) - - colorrampshader = tree.find(".//colorrampshader") - if colorrampshader is None: - # This style is not using a colorramp, so there is no "Label unit suffix" - # setting to be concerned with. - return style_name - - if colorrampshader.attrib["classificationMode"] != "1": - # This colorramp is not continuous, so the "Label unit suffix" will be - # used if specified. - return style_name - - first_item = colorrampshader.find(".//item") - - if first_item is None: - # Color ramp is empty anyway... should this be a validation error? - return style_name + colorrampshader = tree.find(".//colorrampshader") + if colorrampshader is None: + # This style is not using a colorramp, so there is no "Label unit suffix" + # setting to be concerned with. + return style_name - first_value = first_item.attrib["value"] - first_label = first_item.attrib["label"] + if colorrampshader.attrib["classificationMode"] != "1": + # This colorramp is not continuous, so the "Label unit suffix" will be + # used if specified. + return style_name - label_precision = int(colorrampshader.attrib.get("labelPrecision", "0")) - unit_suffix = _get_unit_suffix( - value=first_value, - label=first_label, - label_precision=label_precision, + rampLegendSettings = colorrampshader.find(".//rampLegendSettings") + if not rampLegendSettings: + raise exc.QgrInvalidConfigError( + f"{error_prefix}\n" + " * Continuous colorramps must be re-configured with a newer version" + " of QGIS to support gradient-style legends. Please ensure that the" + ' unit of measurement is populated in the "Suffix" field, and that the' + ' "Orientation" field is set to "Horizontal".\n' + f"{error_suffix}" ) - if not unit_suffix: - # The first colorrampitem's label does not contain a suffix set by the - # "Label unit suffix" field in QGIS. We can assume the style is set up as - # the user intended. - return style_name + if (orientation := rampLegendSettings.attrib["orientation"]) != "1": + errors.append( + f'"Orientation" must be horizontal ("1"). Is currently "{orientation}"' + ) - rampLegendSettings = colorrampshader.find(".//rampLegendSettings") - continuous_legend_suffix = ( - rampLegendSettings.attrib["suffix"] if rampLegendSettings else None + if not (suffix := rampLegendSettings.attrib["suffix"]): + # Populating " " is a workaround for the rare case a layer with a continuous + # legend has no unit of measurement. Validating the Suffix matches the + # "Layer unit suffix" may be a more thorough check, but it's much more + # difficult because QGIS doesn't store "Layer unit suffix" in any particular + # field. It's calculated on-the-fly in an unreliable way, depending on QGIS + # version. + errors.append( + f'"Suffix" must contain a unit of measurement. Is currently "{suffix}".' + " If this layer truly has no unit of measurement (e.g. NDVI or a count)," + ' populate a space (" ") to silence this error' ) - if continuous_legend_suffix == unit_suffix: - if rampLegendSettings and rampLegendSettings.attrib["orientation"] != "1": - raise exc.QgrInvalidConfigError( - f"{error_prefix}\n" - " Continuous legend orientation must be horizontal.\n" - f"In QGIS >=3.28, edit this style ({style_filepath}) in" - " the layer symbology menu and set the orientation in the" - ' "Legend Settings" menu.' - ) - - # This style's suffixes and orientation are set up correctly! - return style_name - - # QGIS can be really finicky with the "Label unit suffix" field because its - # value is not saved into the XML as a dedicated field like one would expect. - # Instead, the labels are pre-calculated to add prefixes and suffixes, then - # saved in whole to the XML. This means that for QGIS to display a "Label unit - # suffix" field in the GUI, it has to calculate the suffixes and prefixes from - # the labels in the XML. Strange errors can be introduced during this process, - # like seemingly-random numbers being prepended to the "Label unit suffix" value - # in the GUI, and then propagating to all labels in the XML. + if errors: + # NOTE: chr(92) is a backslash to work around "f-string expression part + # cannot include a backslash" and still put a newline in there. + newline = "\n" raise exc.QgrInvalidConfigError( f"{error_prefix}\n" - f" {continuous_legend_suffix=} != {unit_suffix=}\n" - f"In QGIS >=3.28, edit this style ({style_filepath}) in the layer symbology" - ' menu and ensure that the "Label unit suffix" exactly matches the "suffix"' - ' field in the "Legend Settings" menu. If the suffixes reported in this' - ' error message look wrong to you, you may need to re-check the "Label unit' - ' suffix" and press the "Classify" button and re-save the style to correct' - " errors." + f"{newline.join(f' * {err}' for err in errors)}\n" + f"{error_suffix}" ) - -def _get_unit_suffix(*, label: str, value: str, label_precision: int = 0) -> str | None: - """Calculate the unit suffix for a QGIS colormap entry. - - A QGIS style's `` has a `labelPrecision` attribute. Each `` - within has a `label` and a `value` attribute. In order to calculate the suffix from - the `label`, we need to calculate the non-suffix part of the `label` based on - `value`. Then we can difference the calculated label (sans suffix) and the real - label to get the suffix. - - TODO: Support a "clip" argument (originates in `` element)? Not - sure how that's set in the GUI but seems to usually be 0. - - TODO: Does not support large numbers well, adds commas where the QGIS symbology menu - does not. - formatter.formatNumber(float(-9902)) - >>> '-9,902' - """ - formatter = QgsRendererRangeLabelFormat() - formatter.setTrimTrailingZeroes(False) # Does this setting correspond with "clip"? - formatter.setPrecision(label_precision) - - formatted_value = formatter.formatNumber(float(value)) - return label.removeprefix(formatted_value) + return style_name From 7c2e42997beb476c0efcbc8ccd33cdc594ab305a Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Mon, 7 Aug 2023 16:46:03 -0600 Subject: [PATCH 09/19] Replace classificationMode check with a colorRampType check Classification "mode" is how the values are classified: continuous, equal interval, and quantile. It doesn't matter which of these is chosen. What matters is the "Interpolation" setting. "Linear" is the only one that will display a continuous legend. --- qgreenland/util/model_validators/layer_style.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/qgreenland/util/model_validators/layer_style.py b/qgreenland/util/model_validators/layer_style.py index 59dc3bf8..e2792514 100644 --- a/qgreenland/util/model_validators/layer_style.py +++ b/qgreenland/util/model_validators/layer_style.py @@ -44,8 +44,9 @@ def validate_style_file_only_contains_allowed_fonts(style_name: str): def validate_style_file_continuous_legend(style_name: str): - """Ensure common errors in continuous style configuration are avoided. + """Ensure common errors in continuous legend configuration are avoided. + * Ensures continuous legend is enabled for "linear" interpolated colorramps. * Ensures continuous legends are horizontal. * Ensures a "Suffix" is populated in the "Legend Settings" menu. """ @@ -71,19 +72,19 @@ def validate_style_file_continuous_legend(style_name: str): # setting to be concerned with. return style_name - if colorrampshader.attrib["classificationMode"] != "1": - # This colorramp is not continuous, so the "Label unit suffix" will be - # used if specified. + if colorrampshader.attrib["colorRampType"] != "INTERPOLATED": + # This colorramp should not have a continuous legend, so the "Label unit + # suffix" will be used if specified. return style_name rampLegendSettings = colorrampshader.find(".//rampLegendSettings") if not rampLegendSettings: raise exc.QgrInvalidConfigError( f"{error_prefix}\n" - " * Continuous colorramps must be re-configured with a newer version" - " of QGIS to support gradient-style legends. Please ensure that the" - ' unit of measurement is populated in the "Suffix" field, and that the' - ' "Orientation" field is set to "Horizontal".\n' + " * Continuous (i.e. linearly interpolated) colorramps must be" + " re-configured with a newer version of QGIS to support continuous legends." + ' Please ensure that the unit of measurement is populated in the "Suffix"' + ' field, and that the "Orientation" field is set to "Horizontal".\n' f"{error_suffix}" ) From e1b26ac1bcda1a7d0514a6c931538613751c285e Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Mon, 7 Aug 2023 18:09:31 -0600 Subject: [PATCH 10/19] Update a batch of styles --- .../ancillary/styles/bedmachine_bed.qml | 1180 ++++++++-------- .../ancillary/styles/bedmachine_errbed.qml | 668 ++-------- .../ancillary/styles/bedmachine_surface.qml | 1182 ++++++++-------- .../ancillary/styles/bedmachine_thickness.qml | 1182 ++++++++-------- .../ancillary/styles/esa_cci_velocity.qml | 196 ++- .../styles/future_ice_sheet_coverage.qml | 1182 ++++++++-------- .../ancillary/styles/gebco_bathymetry.qml | 1186 ++++++++--------- .../ancillary/styles/ground_temperature.qml | 178 ++- .../styles/ground_temperature_std.qml | 166 ++- .../styles/ice_sheet_velocity_error.qml | 170 ++- .../styles/permafrost_probability.qml | 166 ++- qgreenland/ancillary/styles/racmo_precip.qml | 176 ++- qgreenland/ancillary/styles/racmo_runoff.qml | 170 ++- qgreenland/ancillary/styles/racmo_sndiv.qml | 176 ++- .../ancillary/styles/racmo_snowfall.qml | 170 ++- .../ancillary/styles/racmo_snowmelt.qml | 174 ++- qgreenland/ancillary/styles/racmo_subl.qml | 174 ++- qgreenland/ancillary/styles/racmo_t2m.qml | 180 ++- .../ancillary/styles/racmo_topography.qml | 174 ++- .../styles/surface_elevation_change.qml | 166 ++- .../surface_elevation_change_errors.qml | 166 ++- 21 files changed, 5610 insertions(+), 3572 deletions(-) diff --git a/qgreenland/ancillary/styles/bedmachine_bed.qml b/qgreenland/ancillary/styles/bedmachine_bed.qml index 65b35a30..e7418c97 100644 --- a/qgreenland/ancillary/styles/bedmachine_bed.qml +++ b/qgreenland/ancillary/styles/bedmachine_bed.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + None @@ -23,532 +133,550 @@ 2 - + - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + resamplingFilter 0 diff --git a/qgreenland/ancillary/styles/bedmachine_errbed.qml b/qgreenland/ancillary/styles/bedmachine_errbed.qml index 4ea413c7..bc66eeee 100644 --- a/qgreenland/ancillary/styles/bedmachine_errbed.qml +++ b/qgreenland/ancillary/styles/bedmachine_errbed.qml @@ -1,21 +1,131 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + - MinMax + None WholeRaster Estimated 0.02 @@ -23,531 +133,37 @@ 2 - + - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + - - + + + resamplingFilter 0 diff --git a/qgreenland/ancillary/styles/bedmachine_surface.qml b/qgreenland/ancillary/styles/bedmachine_surface.qml index da074261..87aec467 100644 --- a/qgreenland/ancillary/styles/bedmachine_surface.qml +++ b/qgreenland/ancillary/styles/bedmachine_surface.qml @@ -1,21 +1,131 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + - + @@ -27,532 +137,550 @@ 2 - + - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + resamplingFilter 0 diff --git a/qgreenland/ancillary/styles/bedmachine_thickness.qml b/qgreenland/ancillary/styles/bedmachine_thickness.qml index 1000f042..f94f9903 100644 --- a/qgreenland/ancillary/styles/bedmachine_thickness.qml +++ b/qgreenland/ancillary/styles/bedmachine_thickness.qml @@ -1,21 +1,131 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + - + @@ -27,532 +137,550 @@ 2 - + - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + resamplingFilter 0 diff --git a/qgreenland/ancillary/styles/esa_cci_velocity.qml b/qgreenland/ancillary/styles/esa_cci_velocity.qml index c05bc3c9..5bf6dc82 100644 --- a/qgreenland/ancillary/styles/esa_cci_velocity.qml +++ b/qgreenland/ancillary/styles/esa_cci_velocity.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + MinMax @@ -23,40 +133,58 @@ 2 - + - - - - - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + resamplingFilter 0 diff --git a/qgreenland/ancillary/styles/future_ice_sheet_coverage.qml b/qgreenland/ancillary/styles/future_ice_sheet_coverage.qml index a70744e0..7ef37910 100644 --- a/qgreenland/ancillary/styles/future_ice_sheet_coverage.qml +++ b/qgreenland/ancillary/styles/future_ice_sheet_coverage.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + @@ -27,532 +137,550 @@ 2 - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + resamplingFilter 0 diff --git a/qgreenland/ancillary/styles/gebco_bathymetry.qml b/qgreenland/ancillary/styles/gebco_bathymetry.qml index 2795dea5..04ce6b1e 100644 --- a/qgreenland/ancillary/styles/gebco_bathymetry.qml +++ b/qgreenland/ancillary/styles/gebco_bathymetry.qml @@ -1,102 +1,102 @@ - + 1 1 1 0 - + - + - + - + - + - + @@ -105,24 +105,24 @@ - + - + None @@ -133,540 +133,540 @@ 2 - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -674,7 +674,7 @@ - + resamplingFilter diff --git a/qgreenland/ancillary/styles/ground_temperature.qml b/qgreenland/ancillary/styles/ground_temperature.qml index 4fa4a37d..eca200f1 100644 --- a/qgreenland/ancillary/styles/ground_temperature.qml +++ b/qgreenland/ancillary/styles/ground_temperature.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + None @@ -23,31 +133,49 @@ 2 - + - - - - - + - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + + resamplingFilter 0 diff --git a/qgreenland/ancillary/styles/ground_temperature_std.qml b/qgreenland/ancillary/styles/ground_temperature_std.qml index 10ef0813..e510fc76 100644 --- a/qgreenland/ancillary/styles/ground_temperature_std.qml +++ b/qgreenland/ancillary/styles/ground_temperature_std.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + None @@ -23,25 +133,43 @@ 0 - + - - - - - + - - - - - + + + + + + + + + + - - + + + resamplingFilter 0 diff --git a/qgreenland/ancillary/styles/ice_sheet_velocity_error.qml b/qgreenland/ancillary/styles/ice_sheet_velocity_error.qml index bb20ebb4..33af1162 100644 --- a/qgreenland/ancillary/styles/ice_sheet_velocity_error.qml +++ b/qgreenland/ancillary/styles/ice_sheet_velocity_error.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + MinMax @@ -23,26 +133,44 @@ 2 - + - - - - - + - - - - - - + + + + + + + + + + + - - + + + resamplingFilter - 0 + 2 diff --git a/qgreenland/ancillary/styles/permafrost_probability.qml b/qgreenland/ancillary/styles/permafrost_probability.qml index b251b3b3..837576ec 100644 --- a/qgreenland/ancillary/styles/permafrost_probability.qml +++ b/qgreenland/ancillary/styles/permafrost_probability.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + MinMax @@ -23,25 +133,43 @@ 2 - + - - - - - + - - - - - + + + + + + + + + + - - + + + resamplingFilter 0 diff --git a/qgreenland/ancillary/styles/racmo_precip.qml b/qgreenland/ancillary/styles/racmo_precip.qml index fe861469..a4544c1f 100644 --- a/qgreenland/ancillary/styles/racmo_precip.qml +++ b/qgreenland/ancillary/styles/racmo_precip.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + None @@ -23,29 +133,47 @@ 2 - - - - - - - + + + - - - - - - - - - + + + + + + + + + + + + + + - - + + + resamplingFilter 0 diff --git a/qgreenland/ancillary/styles/racmo_runoff.qml b/qgreenland/ancillary/styles/racmo_runoff.qml index 0ff861ae..a283a014 100644 --- a/qgreenland/ancillary/styles/racmo_runoff.qml +++ b/qgreenland/ancillary/styles/racmo_runoff.qml @@ -1,30 +1,131 @@ - + 1 1 1 + 0 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + - + - + @@ -36,28 +137,45 @@ 2 - + - - - - - + - - - - - - - - - + + + + + + + + + + + + + + - - + + resamplingFilter diff --git a/qgreenland/ancillary/styles/racmo_sndiv.qml b/qgreenland/ancillary/styles/racmo_sndiv.qml index 2a371085..33eece5a 100644 --- a/qgreenland/ancillary/styles/racmo_sndiv.qml +++ b/qgreenland/ancillary/styles/racmo_sndiv.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + None @@ -23,29 +133,47 @@ 2 - - - - - - - + + + - - - - - - - - - + + + + + + + + + + + + + + - - + + + resamplingFilter 0 diff --git a/qgreenland/ancillary/styles/racmo_snowfall.qml b/qgreenland/ancillary/styles/racmo_snowfall.qml index 8242553a..62506b05 100644 --- a/qgreenland/ancillary/styles/racmo_snowfall.qml +++ b/qgreenland/ancillary/styles/racmo_snowfall.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + None @@ -23,26 +133,44 @@ 2 - - - - - - - + + + - - - - - - + + + + + + + + + + + - - + + + resamplingFilter 0 diff --git a/qgreenland/ancillary/styles/racmo_snowmelt.qml b/qgreenland/ancillary/styles/racmo_snowmelt.qml index d917b7f3..acdba134 100644 --- a/qgreenland/ancillary/styles/racmo_snowmelt.qml +++ b/qgreenland/ancillary/styles/racmo_snowmelt.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + MinMax @@ -23,29 +133,47 @@ 2 - + - - - - - + - - - - - - - - - + + + + + + + + + + + + + + - - + + + resamplingFilter 0 diff --git a/qgreenland/ancillary/styles/racmo_subl.qml b/qgreenland/ancillary/styles/racmo_subl.qml index 64d4e62a..8fa36a9d 100644 --- a/qgreenland/ancillary/styles/racmo_subl.qml +++ b/qgreenland/ancillary/styles/racmo_subl.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + None @@ -23,28 +133,46 @@ 2 - - - - - - - + + + - - - - - - - - + + + + + + + + + + + + + - - + + + resamplingFilter 0 diff --git a/qgreenland/ancillary/styles/racmo_t2m.qml b/qgreenland/ancillary/styles/racmo_t2m.qml index c366a8f8..40bfa666 100644 --- a/qgreenland/ancillary/styles/racmo_t2m.qml +++ b/qgreenland/ancillary/styles/racmo_t2m.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + None @@ -23,31 +133,49 @@ 2 - - - - - - - + + + - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + + resamplingFilter 0 diff --git a/qgreenland/ancillary/styles/racmo_topography.qml b/qgreenland/ancillary/styles/racmo_topography.qml index 9b4ce9ed..eeb5d156 100644 --- a/qgreenland/ancillary/styles/racmo_topography.qml +++ b/qgreenland/ancillary/styles/racmo_topography.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + MinMax @@ -23,29 +133,47 @@ 2 - + - - - - - + - - - - - - - - - + + + + + + + + + + + + + + - - + + + resamplingFilter 0 diff --git a/qgreenland/ancillary/styles/surface_elevation_change.qml b/qgreenland/ancillary/styles/surface_elevation_change.qml index 4ac8864a..a1b2bd63 100644 --- a/qgreenland/ancillary/styles/surface_elevation_change.qml +++ b/qgreenland/ancillary/styles/surface_elevation_change.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + None @@ -23,25 +133,43 @@ 2 - + - - - - - + - - - - - + + + + + + + + + + - - + + + resamplingFilter 0 diff --git a/qgreenland/ancillary/styles/surface_elevation_change_errors.qml b/qgreenland/ancillary/styles/surface_elevation_change_errors.qml index ce66280a..c07d0458 100644 --- a/qgreenland/ancillary/styles/surface_elevation_change_errors.qml +++ b/qgreenland/ancillary/styles/surface_elevation_change_errors.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + None @@ -23,25 +133,43 @@ 2 - + - - - - - + - - - - - + + + + + + + + + + - - + + + resamplingFilter 0 From ee4253935966498f9985082b1314955275467af0 Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Tue, 8 Aug 2023 09:48:38 -0600 Subject: [PATCH 11/19] Improve error messaging for validation failures --- qgreenland/util/model_validators/layer_style.py | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/qgreenland/util/model_validators/layer_style.py b/qgreenland/util/model_validators/layer_style.py index e2792514..46d4bfae 100644 --- a/qgreenland/util/model_validators/layer_style.py +++ b/qgreenland/util/model_validators/layer_style.py @@ -59,11 +59,10 @@ def validate_style_file_continuous_legend(style_name: str): errors = [] error_prefix = ( f"Style '{style_name}' has a continuous legend that is incorrectly" - f" configured:" - ) - error_suffix = ( - f"In QGIS >=3.28, edit this style ({style_filepath}) in the layer symbology" - ' menu and configure the continuous legend in the "Legend Settings" submenu.' + " configured." + f" In QGIS >=3.28, edit this style ({style_filepath}) in the layer symbology" + ' menu and configure the continuous legend in the "Legend Settings" submenu to' + " resolve the following:" ) colorrampshader = tree.find(".//colorrampshader") @@ -85,7 +84,6 @@ def validate_style_file_continuous_legend(style_name: str): " re-configured with a newer version of QGIS to support continuous legends." ' Please ensure that the unit of measurement is populated in the "Suffix"' ' field, and that the "Orientation" field is set to "Horizontal".\n' - f"{error_suffix}" ) if (orientation := rampLegendSettings.attrib["orientation"]) != "1": @@ -111,9 +109,7 @@ def validate_style_file_continuous_legend(style_name: str): # cannot include a backslash" and still put a newline in there. newline = "\n" raise exc.QgrInvalidConfigError( - f"{error_prefix}\n" - f"{newline.join(f' * {err}' for err in errors)}\n" - f"{error_suffix}" + f"{error_prefix}\n" f"{newline.join(f' * {err}' for err in errors)}\n" ) return style_name From c3ab4b75a928e544afd7fce79f394ea366f5a156 Mon Sep 17 00:00:00 2001 From: Trey Stafford Date: Tue, 8 Aug 2023 09:50:22 -0600 Subject: [PATCH 12/19] Fixup geoid style --- qgreenland/ancillary/styles/geoid.qml | 180 ++++++++++++++++++++++---- 1 file changed, 154 insertions(+), 26 deletions(-) diff --git a/qgreenland/ancillary/styles/geoid.qml b/qgreenland/ancillary/styles/geoid.qml index 56f2d676..5b39b9ff 100644 --- a/qgreenland/ancillary/styles/geoid.qml +++ b/qgreenland/ancillary/styles/geoid.qml @@ -1,21 +1,131 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + - None + MinMax WholeRaster Estimated 0.02 @@ -23,31 +133,49 @@ 2 - + - - - - - + - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + + resamplingFilter 0 From 1ee847aa2c6050ec979b21cf9c79d0833ce18161 Mon Sep 17 00:00:00 2001 From: Trey Stafford Date: Tue, 8 Aug 2023 10:50:02 -0600 Subject: [PATCH 13/19] Update/fix geoid style colormap settings --- qgreenland/ancillary/styles/geoid.qml | 186 +++++++++++++------------- 1 file changed, 93 insertions(+), 93 deletions(-) diff --git a/qgreenland/ancillary/styles/geoid.qml b/qgreenland/ancillary/styles/geoid.qml index 5b39b9ff..7c015a43 100644 --- a/qgreenland/ancillary/styles/geoid.qml +++ b/qgreenland/ancillary/styles/geoid.qml @@ -1,102 +1,102 @@ - + 1 1 1 0 - + - + - + - + - + - + @@ -105,24 +105,24 @@ - + - + MinMax @@ -133,47 +133,47 @@ 2 - - + + - - - - - - - - - - - - + + + + + + + + + + + + - - + + resamplingFilter From ccb05361d703aa61fab512a13382392cbe51bcb3 Mon Sep 17 00:00:00 2001 From: Trey Stafford Date: Tue, 8 Aug 2023 10:54:23 -0600 Subject: [PATCH 14/19] Update/fix gravity anomaly colormap style settings --- .../ancillary/styles/gravity_anomaly.qml | 168 +++++++++++++++--- 1 file changed, 148 insertions(+), 20 deletions(-) diff --git a/qgreenland/ancillary/styles/gravity_anomaly.qml b/qgreenland/ancillary/styles/gravity_anomaly.qml index 873156fd..ca240539 100644 --- a/qgreenland/ancillary/styles/gravity_anomaly.qml +++ b/qgreenland/ancillary/styles/gravity_anomaly.qml @@ -1,18 +1,128 @@ - + 1 1 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + None @@ -23,25 +133,43 @@ 2 - - - - - - - + + + - - - - - + + + + + + + + + + - - + + + resamplingFilter 0 From 5e36ed11238df6ec401657b3e3ca8deecc57848a Mon Sep 17 00:00:00 2001 From: Trey Stafford Date: Tue, 8 Aug 2023 11:27:00 -0600 Subject: [PATCH 15/19] Fix albedo style for colormap settings --- qgreenland/ancillary/styles/albedo.qml | 162 +++++++++++++++++++++---- 1 file changed, 140 insertions(+), 22 deletions(-) diff --git a/qgreenland/ancillary/styles/albedo.qml b/qgreenland/ancillary/styles/albedo.qml index 87493090..9a9be386 100644 --- a/qgreenland/ancillary/styles/albedo.qml +++ b/qgreenland/ancillary/styles/albedo.qml @@ -1,27 +1,128 @@ - + 1 1 1 + 0 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + - + MinMax @@ -32,24 +133,41 @@ 2 - - - - - - - + + + - - - - - + + + + + + + + + + - - + + resamplingFilter From 454835d632448d767299dfc417b094746920d9f8 Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Tue, 8 Aug 2023 11:36:27 -0600 Subject: [PATCH 16/19] Fix geothermal heat flow style --- .../styles/geothermal_heat_flow_map.qml | 180 +++++++++++++++--- 1 file changed, 149 insertions(+), 31 deletions(-) diff --git a/qgreenland/ancillary/styles/geothermal_heat_flow_map.qml b/qgreenland/ancillary/styles/geothermal_heat_flow_map.qml index 5dadd535..8251077b 100644 --- a/qgreenland/ancillary/styles/geothermal_heat_flow_map.qml +++ b/qgreenland/ancillary/styles/geothermal_heat_flow_map.qml @@ -1,27 +1,128 @@ - + 1 1 - 1 + 0 + 0 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + - + MinMax @@ -32,32 +133,49 @@ 2 - - - - - - - + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - + + resamplingFilter From 4bc2dde9489c04e98d16208d1b46ff0ef8d91738 Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Tue, 8 Aug 2023 17:50:37 -0600 Subject: [PATCH 17/19] Update contributor style docs to include continuous legends --- .../qgis_symbology_legend_settings.png | Bin 0 -> 99050 bytes .../qgis_symbology_linear_interpolation.png | Bin 0 -> 81620 bytes doc/contributor/how-to/contribute-styles.md | 23 +++++++++++++++++- 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 doc/_images/qgis_symbology_legend_settings.png create mode 100644 doc/_images/qgis_symbology_linear_interpolation.png diff --git a/doc/_images/qgis_symbology_legend_settings.png b/doc/_images/qgis_symbology_legend_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..6b7cd5775e24052a078b1a07ae01116ed1647aaf GIT binary patch literal 99050 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 literal 0 HcmV?d00001 diff --git a/doc/_images/qgis_symbology_linear_interpolation.png b/doc/_images/qgis_symbology_linear_interpolation.png new file mode 100644 index 0000000000000000000000000000000000000000..c1ce58558a1f4981c1499ac0fd139e3f9f0fb3b4 GIT binary patch literal 81620 zcmeFZbySsW+dYbivM51BL_$JJx=TV9-Q5V%-616?9Rkvwf`D{4NJ)vLgo3o7f`p=g z#JQGxzxAEp7-xKAoZo-%v)w~kJayM~%{i}muLxCT89Z!KY&0}9JULlObu_e#u4riJ z9}wv93CB1cE&SEzqp9nzZt{@I+11I?#@>R;-P_rM%EHUW5)IAky@TopydDn3$uA;` zCpz}RF_Q)A{F{fDBnn!#VhN8F zu)Q9sNLE|h9`jHyH#Pjo}3tA1%|)bw3fpPmk;jyS=|1s4w&b@w>JP6cdM)3(*7 zuwNa&*1z4oSDcb&>GAYpx?@I(q~RNLoxTd4VC$b|B!O>O%#`EfcPWg2A$CvMUe}&{ zJtG&feQSE}9&NTosLeGe0u`tCmp2}*Aee`k_5}A*8pN}ca>K$5TX}#e1?rnE^_A-%;@X?Kx{5tW~(qrufa6@hIUaU)PAUfsDN(m`>WqK zA88P8wq9zPY3tw}bvZ^WDA5@tTUsI@VO9OvGTJJ!{pfe&i@8oprZv|{{XX4Tn0Q_` zFu`<{6ot&39N0|EolGs*yd0ci=Aoepi+MSlnAuslQ<+*=**J>O?6h{$P}!J^(CF|g zaVR-USXkT0`nXzX_$X_d`Pi8Wn$w7hVhei-!3`WN+)b#w9PAz4guFy({@hmx{*C&W zordbqDeiV6G`dQvR1!|E7F0ZJJZv1SQeHNmTr{HCRKl+2mO|>1(tqCqeiEUvc6WCc zVrPH&@FCknZZ;=ZD|SvnK|yv7E_N<1Ryc#z&D+u4#EaF@?KbKbf89gU!p+Rp#@XG* z$&m_mPZLuo4|fq78u&fcKi<#5SxM=iw|8{=yBDB8*u6}g**V!b*c}|$|NRO#cPUS} z$=@&Zf4ss?6V@rax`msQhpU-|l&6KG`|W?fg}K>3uXpxvwg1x`b2D}edkY6R)eWA? z`5%vzkyBFr=M|_fu(EM*{&N*{_J5q|Ze#hc&iapcL;dDYbN>BB;PQXo_dm}5N8A6L z3}-1R2}wGcd7xfTPEv#h^?V_7Co>y!p+El=uoRv@qxA<}OwBBL%}h=I+{)ZcNZQHO!32iW#=*qOg5BBC>d!Aw9WErUDknn2#rD@z|9qlq zZ{ltV7l_a(+BkZ6{p(as8wU#wcN0`^a`Fjs@^bU@aqx2q2y$}r{p%!c3s*OoiKu&W zaqmQ=KTC;<>d&GOGBNwB32r8y7UqB66Yllbugt7X9IY%Mdi*_I z|M9ua|6wX{aqw^nn49pz^f860AjrqhYRbiL3M0uOz;9~K!D(i~`=57rbFy@QXyR%i zZUy}aeFf9=PhU|n{u!t{|9SR9YYWsUK!>q%2*98J*i-L9>6s+(A*Q>Wk`(3!0&#65JyIK8wBaqq7?S_f-{^7W)u|ih)%Yv7Y)VLSm zRnXAJgfM70f;n77;=`@899RX&`7kd1`GsFarx4vumfi>B0_2{Cv-#-B&Ce?I6@pIo zee;>hwUehvr!8cpq{MkpXYVfNQwL+~ergxF9J6D>l00ONaY6iuO_jiO%%=a=r^WUw zU8vLUeUN1iaevpG{S%i|>wX&6)uR|qtS=khE`&S6!K$b;a+L~_>UkP;nI=6!5)S~}yJWm3+)fnjwHpB3!D7(CF1|R0ynwtIZ-}|G<`c10`2yfqhJ~cH} zP*C8q`dY0-6XDWo?%;4=TRW6MT|=X`t`7Igm0NuFvz@Jx{7xSQ?%ur}OhiQF?%{EI za+1t$to(euWA33QoLOBxK0f|r0S_KmM_<(Dyo`?gW@-D)I#{qyIv0)ie62M325 zew;cbm2Bb93;7Hx*>&@Qk�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 literal 0 HcmV?d00001 diff --git a/doc/contributor/how-to/contribute-styles.md b/doc/contributor/how-to/contribute-styles.md index 6ff8d63f..c346295d 100644 --- a/doc/contributor/how-to/contribute-styles.md +++ b/doc/contributor/how-to/contribute-styles.md @@ -5,7 +5,7 @@ following process: * Download (or build) and open the most recent version of the project in QGIS. * In the 'Layers' menu, double click on the layer you wish to edit. -* Open the 'symbology' tab. +* Open the 'Symbology' tab. * Make your desired style changes. * In the lower-left corner, click the 'Style' dropdown. * In this menu, select 'Save Style...' @@ -25,6 +25,27 @@ following process: `foo.qml`, then populate `style='foo'`. +## Continuous colormap considerations + +Continuous colormaps, since QGIS 3.18, support displaying a gradient legend. + +A colormap is continuous if its interpolation mode is set to "Linear" (in the QML, the +value is `"INTERPOLATE"`). + +!["Linear" interpolation selected in the QGIS symbology +menu](/_images/qgis_symbology_linear_interpolation.png) + +These continuous legends won't display the units we populated in the "Label unit suffix" +field for QGreenland v2, so some extra effort has to be taken to display them in the new +continuous legend. In the "Legend Settings" menu, ensure: + +* Any units are populated in the "Suffix" field +* "Orientation" is set to "Horizontal" + +![QGIS "Legend Settings" menu with "Suffix" set to "m/s" and "Orientation" set to +"Horizontal"](/_images/qgis_symbology_legend_settings.png) + + ## Troubleshooting ### Layers using my style are displaying font warnings in QGIS on some operating systems From 4fc96f7e510e63183833a531ac9e0337d7029007 Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Thu, 10 Aug 2023 15:27:42 -0600 Subject: [PATCH 18/19] Banish another contraction Co-authored-by: Trey Stafford --- doc/contributor/how-to/contribute-styles.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/contributor/how-to/contribute-styles.md b/doc/contributor/how-to/contribute-styles.md index c346295d..d7cea363 100644 --- a/doc/contributor/how-to/contribute-styles.md +++ b/doc/contributor/how-to/contribute-styles.md @@ -35,7 +35,7 @@ value is `"INTERPOLATE"`). !["Linear" interpolation selected in the QGIS symbology menu](/_images/qgis_symbology_linear_interpolation.png) -These continuous legends won't display the units we populated in the "Label unit suffix" +These continuous legends will not display the units we populated in the "Label unit suffix" field for QGreenland v2, so some extra effort has to be taken to display them in the new continuous legend. In the "Legend Settings" menu, ensure: From ca1248dd0a268fc273ab931d5b0783a76a5f6a0c Mon Sep 17 00:00:00 2001 From: Matt Fisher Date: Thu, 10 Aug 2023 15:42:53 -0600 Subject: [PATCH 19/19] Add a link to documentation in error message --- qgreenland/util/model_validators/layer_style.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/qgreenland/util/model_validators/layer_style.py b/qgreenland/util/model_validators/layer_style.py index 46d4bfae..c8800f13 100644 --- a/qgreenland/util/model_validators/layer_style.py +++ b/qgreenland/util/model_validators/layer_style.py @@ -64,6 +64,11 @@ def validate_style_file_continuous_legend(style_name: str): ' menu and configure the continuous legend in the "Legend Settings" submenu to' " resolve the following:" ) + error_suffix = ( + "Please see our documentation:" + " " + ) colorrampshader = tree.find(".//colorrampshader") if colorrampshader is None: @@ -84,6 +89,7 @@ def validate_style_file_continuous_legend(style_name: str): " re-configured with a newer version of QGIS to support continuous legends." ' Please ensure that the unit of measurement is populated in the "Suffix"' ' field, and that the "Orientation" field is set to "Horizontal".\n' + f"{error_suffix}" ) if (orientation := rampLegendSettings.attrib["orientation"]) != "1": @@ -109,7 +115,9 @@ def validate_style_file_continuous_legend(style_name: str): # cannot include a backslash" and still put a newline in there. newline = "\n" raise exc.QgrInvalidConfigError( - f"{error_prefix}\n" f"{newline.join(f' * {err}' for err in errors)}\n" + f"{error_prefix}\n" + f"{newline.join(f' * {err}' for err in errors)}\n" + f"{error_suffix}" ) return style_name