Skip to content

Commit d80e984

Browse files
authored
Merge pull request #201 from geo-engine/multiband-colorizer
Multiband colorizer
2 parents 58de02f + fab365c commit d80e984

File tree

5 files changed

+146
-69
lines changed

5 files changed

+146
-69
lines changed

examples/colorizer.ipynb

Lines changed: 89 additions & 42 deletions
Large diffs are not rendered by default.

geoengine/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
RasterResultDescriptor, Provenance, UnitlessMeasurement, ContinuousMeasurement, \
2727
ClassificationMeasurement, BoundingBox2D, TimeInterval, SpatialResolution, SpatialPartition2D, \
2828
RasterSymbology, VectorSymbology, VectorDataType, VectorResultDescriptor, VectorColumnInfo, \
29-
FeatureDataType, RasterBandDescriptor, DEFAULT_ISO_TIME_FORMAT, RasterColorizer, SingleBandRasterColorizer \
29+
FeatureDataType, RasterBandDescriptor, DEFAULT_ISO_TIME_FORMAT, RasterColorizer, SingleBandRasterColorizer, \
30+
MultiBandRasterColorizer
3031

3132
from .util import clamp_datetime_ms_ns
3233
from .workflow import WorkflowId, Workflow, workflow_by_id, register_workflow, get_quota, update_quota

geoengine/colorizer.py

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -207,10 +207,6 @@ def palette_with_colormap(
207207
default_color=default_color,
208208
)
209209

210-
@staticmethod
211-
def rgba() -> RgbaColorizer:
212-
return RgbaColorizer()
213-
214210
@abstractmethod
215211
def to_api_dict(self) -> geoengine_openapi_client.Colorizer:
216212
pass
@@ -230,8 +226,6 @@ def from_response(response: geoengine_openapi_client.Colorizer) -> Colorizer:
230226
return PaletteColorizer.from_response_palette(inner)
231227
if isinstance(inner, geoengine_openapi_client.LogarithmicGradient):
232228
return LogarithmicGradientColorizer.from_response_logarithmic(inner)
233-
if isinstance(inner, geoengine_openapi_client.RgbaColorizer):
234-
return RgbaColorizer.from_response_rgba(inner)
235229

236230
raise TypeError("Unknown colorizer type")
237231

@@ -319,22 +313,3 @@ def to_api_dict(self) -> geoengine_openapi_client.Colorizer:
319313
default_color=self.default_color,
320314
no_data_color=self.no_data_color,
321315
))
322-
323-
324-
class RgbaColorizer(Colorizer):
325-
'''A Rgba colorizer.'''
326-
327-
def __init__(self, no_data_color: Rgba = (0, 0, 0, 0)):
328-
super().__init__(no_data_color)
329-
330-
@staticmethod
331-
def from_response_rgba(_response: geoengine_openapi_client.RgbaColorizer) -> RgbaColorizer:
332-
"""Create a colorizer from a response."""
333-
334-
return RgbaColorizer()
335-
336-
def to_api_dict(self) -> geoengine_openapi_client.Colorizer:
337-
"""Return the colorizer as a dictionary."""
338-
return geoengine_openapi_client.Colorizer(geoengine_openapi_client.RgbaColorizer(
339-
type='rgba',
340-
))

geoengine/types.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -979,6 +979,8 @@ def from_response(cls, response: geoengine_openapi_client.RasterColorizer) -> Ra
979979

980980
if isinstance(inner, geoengine_openapi_client.SingleBandRasterColorizer):
981981
return SingleBandRasterColorizer.from_single_band_response(inner)
982+
if isinstance(inner, geoengine_openapi_client.MultiBandRasterColorizer):
983+
return MultiBandRasterColorizer.from_multi_band_response(inner)
982984

983985
raise GeoEngineException({"message": "Unknown RasterColorizer type"})
984986

@@ -1009,6 +1011,58 @@ def to_api_dict(self) -> geoengine_openapi_client.RasterColorizer:
10091011
))
10101012

10111013

1014+
@dataclass
1015+
class MultiBandRasterColorizer(RasterColorizer):
1016+
'''A raster colorizer for multiple bands'''
1017+
1018+
blue_band: int
1019+
blue_max: float
1020+
blue_min: float
1021+
blue_scale: Optional[float]
1022+
green_band: int
1023+
green_max: float
1024+
green_min: float
1025+
green_scale: Optional[float]
1026+
red_band: int
1027+
red_max: float
1028+
red_min: float
1029+
red_scale: Optional[float]
1030+
1031+
@staticmethod
1032+
def from_multi_band_response(response: geoengine_openapi_client.MultiBandRasterColorizer) -> RasterColorizer:
1033+
return MultiBandRasterColorizer(
1034+
response.blue_band,
1035+
response.blue_max,
1036+
response.blue_min,
1037+
response.blue_scale,
1038+
response.green_band,
1039+
response.green_max,
1040+
response.green_min,
1041+
response.green_scale,
1042+
response.red_band,
1043+
response.red_max,
1044+
response.red_min,
1045+
response.red_scale
1046+
)
1047+
1048+
def to_api_dict(self) -> geoengine_openapi_client.RasterColorizer:
1049+
return geoengine_openapi_client.RasterColorizer(geoengine_openapi_client.MultiBandRasterColorizer(
1050+
type='multiBand',
1051+
blue_band=self.blue_band,
1052+
blue_max=self.blue_max,
1053+
blue_min=self.blue_min,
1054+
blue_scale=self.blue_scale,
1055+
green_band=self.green_band,
1056+
green_max=self.green_max,
1057+
green_min=self.green_min,
1058+
green_scale=self.green_scale,
1059+
red_band=self.red_band,
1060+
red_max=self.red_max,
1061+
red_min=self.red_min,
1062+
red_scale=self.red_scale
1063+
))
1064+
1065+
10121066
class RasterSymbology(Symbology):
10131067
'''A raster symbology'''
10141068
__opacity: float

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ package_dir =
1818
packages = find:
1919
python_requires = >=3.9
2020
install_requires =
21-
geoengine-openapi-client == 0.0.13
21+
geoengine-openapi-client @ git+https://github.com/geo-engine/openapi-client@multiband-colorizer#subdirectory=python # TODO update when merged
2222
geopandas >=0.9,<0.15
2323
matplotlib >=3.5,<3.8
2424
numpy >=1.21,<2

0 commit comments

Comments
 (0)