From f7e4c6a588328526a8bd7af12b0a5d694719a87e Mon Sep 17 00:00:00 2001 From: Till Frankenbach <81414045+Merydian@users.noreply.github.com> Date: Fri, 8 Dec 2023 15:14:35 +0100 Subject: [PATCH] feat: add location_type to isochrone parameters (#191) fixes #171 --------- Co-authored-by: Jakob Schnell --- CHANGELOG.md | 1 + ORStools/common/__init__.py | 2 ++ ORStools/help/isochrones_from_layer.help | 2 ++ ORStools/help/isochrones_from_layer_de.help | 2 ++ ORStools/help/isochrones_from_point.help | 2 ++ ORStools/help/isochrones_from_point_de.help | 2 ++ ORStools/i18n/orstools_de.qm | Bin 21242 -> 21398 bytes ORStools/i18n/orstools_de.ts | 36 +++++++++++++------- ORStools/proc/isochrones_layer_proc.py | 11 +++++- ORStools/proc/isochrones_point_proc.py | 11 +++++- 10 files changed, 54 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f8e9bc8..ff378dc4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,7 @@ RELEASING: ### Added - Additional parameter for the "smoothing factor" to isochrones processing algorithms ([#172](https://github.com/GIScience/orstools-qgis-plugin/issues/172)) - Mention omission of configuration options when using traveling salesman +- option to set location type for isochrones ([#191](https://github.com/GIScience/orstools-qgis-plugin/pull/191)) ## [1.6.0] - 2023-07-25 diff --git a/ORStools/common/__init__.py b/ORStools/common/__init__.py index 5dbffe60..f684c4af 100644 --- a/ORStools/common/__init__.py +++ b/ORStools/common/__init__.py @@ -56,3 +56,5 @@ "INPUT_AVOID_POLYGONS", "INPUT_SMOOTHING", ] + +LOCATION_TYPES = ["start", "destination"] diff --git a/ORStools/help/isochrones_from_layer.help b/ORStools/help/isochrones_from_layer.help index 3c68816b..668fa225 100644 --- a/ORStools/help/isochrones_from_layer.help +++ b/ORStools/help/isochrones_from_layer.help @@ -9,6 +9,8 @@ Current restriction limits< Ranges: parameter needs to be a comma-separated list of integer values, no decimal points. +Location Type: start treats the location(s) as starting point, destination as goal. + Advanced Parameters: see the documentation for descriptions. Output layer: a Polygon layer with ID, isochrone center latitude and longitude, range value, travel mode and total population (from GHSL). diff --git a/ORStools/help/isochrones_from_layer_de.help b/ORStools/help/isochrones_from_layer_de.help index 66dc6a38..15ead1fb 100644 --- a/ORStools/help/isochrones_from_layer_de.help +++ b/ORStools/help/isochrones_from_layer_de.help @@ -10,6 +10,8 @@ Ein gültiger API-Key ('Web'-Menü > 'Dienst-Einstellungen') oder Registrierung Zusätzliche Parameter: Beschreibung in der Dokumentation. +Ortstyp: start behandelt den/die Ort(e) als Startpunkt, destination als Ziel. + Ausgabelayer: Polygonlayer mit ID, Längen- und Breitengrad des Isochronen-Mittelpunkts, Reichweiten-Wert, Verkehrsmittel und Bevölkerung (aus GHSL). KBS ist EPSG:4326. Der Mittelpunkt kann über das Punktlayer aus Tabelle erzeugen-Werkzeug ('Verarbeitungswerkzeuge' ► 'Vektorerzeugung') extrahiert werden. diff --git a/ORStools/help/isochrones_from_point.help b/ORStools/help/isochrones_from_point.help index 18051e8e..5088a78c 100644 --- a/ORStools/help/isochrones_from_point.help +++ b/ORStools/help/isochrones_from_point.help @@ -7,6 +7,8 @@ Current restriction limits< Ranges: parameter needs to be a comma-separated list of integer values, no decimal points. +Location Type: start treats the location(s) as starting point, destination as goal. + Advanced Parameters: see the documentation for descriptions. Output layer: a Polygon layer with ID, isochrone center latitude and longitude, range value, travel mode and total population (from GHSL). diff --git a/ORStools/help/isochrones_from_point_de.help b/ORStools/help/isochrones_from_point_de.help index 37a2ef38..0755e632 100644 --- a/ORStools/help/isochrones_from_point_de.help +++ b/ORStools/help/isochrones_from_point_de.help @@ -8,6 +8,8 @@ Ein gültiger API-Key ('Web'-Menü > 'Dienst-Einstellungen') oder Registrierung Zusätzliche Parameter: Beschreibung in der Dokumentation. +Ortstyp: start behandelt den/die Ort(e) als Startpunkt, destination als Ziel. + Ausgabelayer: Polygonlayer mit ID, Längen- und Breitengrad des Isochronen-Mittelpunkts, Reichweiten-Wert, Verkehrsmittel und Bevölkerung (aus GHSL). KBS ist EPSG:4326. Der Mittelpunkt kann über das Punktlayer aus Tabelle erzeugen-Werkzeug ('Verarbeitungswerkzeuge' ► 'Vektorerzeugung') extrahiert werden. diff --git a/ORStools/i18n/orstools_de.qm b/ORStools/i18n/orstools_de.qm index 1185a50706d7e9a21837addf236c31228ac54aa2..2e48662ebe88e7d130e2d03449b6b04330e9da48 100644 GIT binary patch delta 984 zcma))|4&VE7{}lDoX)-XoOAEFNx9u}Rd#DAAwxxlTS?!p$d^?L$y}?XQlfU}TSHBh zN`)0AhL(FbTbQXuzN{u{^Mj%JGNxr?3`3rF{sBLH_S$Ek=kq-8_wziz+7xx|iW8o; zBfyGQAg&!)vmP+p;WRoIuq0tcT`v&6RHnsHXU$tVZ45q0+EXupTR?bI*~C=XfujTYT84Jt6++Th&msc9l(YE<6M--fw)?&tY)J58?+vGuc)Lvf2KF0Q2q?qY zaVv?QSM9WE&Rrm;hzssgQE^e@Q00>lb zBRy1T#!cn?*AoIZDdUokQhc4#64(PcFPUI6;5kFt)R|9-8D;b4w}AV8ndVi>mxeLG zFH8BkyBbI|s(e1Y1QztE(qf0HLzOb!|EO|I9|8S2RsK_!rZ!SDs_?T#gs9oa2dF`h zWqS0f>(fW6{&V#m*Gxb<%&V+9(DDYto{R05*6@!4B9l7E5E9=8LkcA3#ezR4{J zNND3*&d#TyUgiJh)&R>d3+}t70ZSwy<=rW|YlR)sYHFLO){#G*3k5)-M2`B39HI$X}Uw(Y1pn94&UNdq&&CiPwk7zrR7e)1O5`erQaN zKp-GR6FGY=HPE3c>m(zdRhoxY7ifcaY5HII(gqA@g?J|$CFs^(3LPRRUnTwP52P$Z zYFR`HLz1PI4qD&vLaFl>z4N^?HT$Hy=jlDzBz>~{p$0#dX)x=|!yd&136f(7{~L;;-=*VINb%Fxo%f((_?vdtLUgtE-h zTq|(Ov?$G-C`=F)Z9$aW{wT_YGOWa`C`4>I^8Wg9@45G!?>py|)yZb>$cmhe$AQQi zAjTQkmH>pVfYsz0z|e)rvQ8lQu|$IjQODK-F4lHbEI_m?j^@V$ z3ukchK@Od(P*Y5~H}>PjZ~C|4JU-no1R{(w_EIw-9Fu6OvN48D%MMlPfX(@`mhy|h z0!LZL)H1-{R_;2NN17hW-TKZ0N`u^eUYmzvzDc5^E%S>#0&v01zjPAq z%~|bP-A0Z2!Ui@gNl+@AWE)Baz+R5%qQqTn(-V5!3m_ zb)4_$e3J&bn5`FqSb>YvbpST&=NSepy1`v<%m(ziT=m|MfK!k}eJ3}podP`GaNpXC zfh{J5+r%*77o^B^{|q?pRAl!vK*;uzIoS$hNWGHjK1&VhmbfTLS)M#e^fk zfmftwl1~ST4!OLLCj#Mb`HX$L$*;g?{A&UfbrQo({B?UDDy!wqH+^ZCOZmT9B_wmP z;BQiFdEs6(Jh+pIW(8^tw==4+*nopCmWhFXiYSKI{w8rl>r)1<<5w5w>R0-H6 kYwGKB=w7E884*6vh!e ORSIsochronesLayerAlgo - + Input Point layer Eingabelayer (Punkte) - + Input layer ID Field (mutually exclusive with Point option) ID-Attribut (schließt Punkt-Option aus) - + Dimension Dimension - + Comma-separated ranges [min or m] Komma-getrennte Reichweiten [min oder m] - + Isochrones from Point-Layer Isochronen aus Punkt-Layer - + Smoothing factor between 0 [detailed] and 100 [generalized] Glättungsfaktor zwischen 0 [detailliert] und 100 [verallgemeinert] + + + Location Type + Ortstyp + ORSIsochronesPointAlgo - + Input Point from map canvas (mutually exclusive with layer option) Eingabepunkt aus Kartenansicht (schließt Ebenen-Option aus) - + Dimension Dimension - + Comma-separated ranges [min or m] Komma-getrennte Reichweiten [min oder m] - + Isochrones from Point Isochronen von einzelnem Punkt - + Smoothing factor between 0 [detailed] and 100 [generalized] Glättungsfaktor zwischen 0 [detailliert] und 100 [verallgemeinert] + + + Location Type + Ortstyp + ORSMatrixAlgo @@ -254,12 +264,12 @@ ORStoolsDialog - + Apply Anwenden - + Close Schließen diff --git a/ORStools/proc/isochrones_layer_proc.py b/ORStools/proc/isochrones_layer_proc.py index 656f8c3c..f0582f33 100644 --- a/ORStools/proc/isochrones_layer_proc.py +++ b/ORStools/proc/isochrones_layer_proc.py @@ -40,7 +40,7 @@ QgsProcessingParameterNumber, ) -from ORStools.common import isochrones_core, PROFILES, DIMENSIONS +from ORStools.common import isochrones_core, PROFILES, DIMENSIONS, LOCATION_TYPES from ORStools.proc.base_processing_algorithm import ORSBaseProcessingAlgorithm from ORStools.utils import transform, exceptions, logger @@ -60,6 +60,7 @@ def __init__(self): self.IN_DIFFERENCE = "INPUT_DIFFERENCE" self.USE_SMOOTHING = "USE_SMOOTHING" self.IN_SMOOTHING = "INPUT_SMOOTHING" + self.LOCATION_TYPE = "LOCATION_TYPE" self.PARAMETERS = [ QgsProcessingParameterFeatureSource( name=self.IN_POINTS, @@ -95,6 +96,12 @@ def __init__(self): maxValue=100, optional=True, ), + QgsProcessingParameterEnum( + name=self.LOCATION_TYPE, + description=self.tr("Location Type"), + options=LOCATION_TYPES, + defaultValue=LOCATION_TYPES[0], + ), ] # Save some important references @@ -111,6 +118,7 @@ def processAlgorithm(self, parameters, context, feedback): profile = dict(enumerate(PROFILES))[parameters[self.IN_PROFILE]] dimension = dict(enumerate(DIMENSIONS))[parameters[self.IN_METRIC]] + location_type = dict(enumerate(LOCATION_TYPES))[parameters[self.LOCATION_TYPE]] factor = 60 if dimension == "time" else 1 ranges_raw = parameters[self.IN_RANGES] @@ -151,6 +159,7 @@ def processAlgorithm(self, parameters, context, feedback): "attributes": ["total_pop"], "id": id_value, "options": options, + "location_type": location_type, } # only include smoothing if set diff --git a/ORStools/proc/isochrones_point_proc.py b/ORStools/proc/isochrones_point_proc.py index 9017b95b..1eb30ddc 100644 --- a/ORStools/proc/isochrones_point_proc.py +++ b/ORStools/proc/isochrones_point_proc.py @@ -37,7 +37,7 @@ QgsProcessingParameterNumber, ) -from ORStools.common import isochrones_core, PROFILES, DIMENSIONS +from ORStools.common import isochrones_core, PROFILES, DIMENSIONS, LOCATION_TYPES from ORStools.utils import exceptions, logger from .base_processing_algorithm import ORSBaseProcessingAlgorithm @@ -54,6 +54,7 @@ def __init__(self): self.IN_KEY = "INPUT_APIKEY" self.IN_DIFFERENCE = "INPUT_DIFFERENCE" self.IN_SMOOTHING = "INPUT_SMOOTHING" + self.LOCATION_TYPE = "LOCATION_TYPE" self.PARAMETERS = [ QgsProcessingParameterPoint( name=self.IN_POINT, @@ -81,6 +82,12 @@ def __init__(self): maxValue=100, optional=True, ), + QgsProcessingParameterEnum( + name=self.LOCATION_TYPE, + description=self.tr("Location Type"), + options=LOCATION_TYPES, + defaultValue=LOCATION_TYPES[0], + ), ] # Save some important references @@ -97,6 +104,7 @@ def processAlgorithm(self, parameters, context, feedback): profile = dict(enumerate(PROFILES))[parameters[self.IN_PROFILE]] dimension = dict(enumerate(DIMENSIONS))[parameters[self.IN_METRIC]] + location_type = dict(enumerate(LOCATION_TYPES))[parameters[self.LOCATION_TYPE]] factor = 60 if dimension == "time" else 1 ranges_raw = parameters[self.IN_RANGES] @@ -117,6 +125,7 @@ def processAlgorithm(self, parameters, context, feedback): "attributes": ["total_pop"], "id": None, "options": options, + "location_type": location_type, } if smoothing or smoothing == 0: