rio-tiler 8.0.4__py3-none-any.whl → 9.0.0a1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rio_tiler/__init__.py +1 -1
- rio_tiler/colormap.py +6 -6
- rio_tiler/experimental/vsifile.py +1 -3
- rio_tiler/experimental/zarr.py +29 -28
- rio_tiler/expression.py +4 -4
- rio_tiler/io/base.py +222 -347
- rio_tiler/io/rasterio.py +89 -81
- rio_tiler/io/stac.py +50 -41
- rio_tiler/io/xarray.py +35 -27
- rio_tiler/models.py +70 -53
- rio_tiler/mosaic/backend.py +2 -2
- rio_tiler/mosaic/methods/base.py +3 -4
- rio_tiler/mosaic/methods/defaults.py +18 -19
- rio_tiler/mosaic/reader.py +20 -19
- rio_tiler/reader.py +44 -44
- rio_tiler/tasks.py +9 -8
- rio_tiler/types.py +20 -21
- rio_tiler/utils.py +33 -42
- {rio_tiler-8.0.4.dist-info → rio_tiler-9.0.0a1.dist-info}/METADATA +1 -1
- {rio_tiler-8.0.4.dist-info → rio_tiler-9.0.0a1.dist-info}/RECORD +23 -23
- {rio_tiler-8.0.4.dist-info → rio_tiler-9.0.0a1.dist-info}/WHEEL +0 -0
- {rio_tiler-8.0.4.dist-info → rio_tiler-9.0.0a1.dist-info}/licenses/AUTHORS.txt +0 -0
- {rio_tiler-8.0.4.dist-info → rio_tiler-9.0.0a1.dist-info}/licenses/LICENSE +0 -0
rio_tiler/__init__.py
CHANGED
rio_tiler/colormap.py
CHANGED
|
@@ -6,9 +6,9 @@ import os
|
|
|
6
6
|
import pathlib
|
|
7
7
|
import re
|
|
8
8
|
import warnings
|
|
9
|
+
from collections.abc import Sequence
|
|
9
10
|
from importlib.resources import as_file
|
|
10
11
|
from importlib.resources import files as resources_files
|
|
11
|
-
from typing import Dict, List, Sequence, Tuple, Union
|
|
12
12
|
|
|
13
13
|
import attr
|
|
14
14
|
import numpy
|
|
@@ -137,7 +137,7 @@ def apply_cmap(data: numpy.ndarray, colormap: ColorMapType) -> DataMaskType:
|
|
|
137
137
|
|
|
138
138
|
|
|
139
139
|
def apply_discrete_cmap(
|
|
140
|
-
data: numpy.ndarray, colormap:
|
|
140
|
+
data: numpy.ndarray, colormap: GDALColorMapType | DiscreteColorMapType
|
|
141
141
|
) -> DataMaskType:
|
|
142
142
|
"""Apply discrete colormap.
|
|
143
143
|
|
|
@@ -217,7 +217,7 @@ def apply_intervals_cmap(
|
|
|
217
217
|
return data[:-1], data[-1]
|
|
218
218
|
|
|
219
219
|
|
|
220
|
-
def parse_color(rgba:
|
|
220
|
+
def parse_color(rgba: Sequence[int] | str | None) -> tuple[int, int, int, int]:
|
|
221
221
|
"""Parse RGB/RGBA color and return valid rio-tiler compatible RGBA colormap entry.
|
|
222
222
|
|
|
223
223
|
Args:
|
|
@@ -290,7 +290,7 @@ class ColorMaps:
|
|
|
290
290
|
|
|
291
291
|
"""
|
|
292
292
|
|
|
293
|
-
data:
|
|
293
|
+
data: dict[str, str | pathlib.Path | ColorMapType | None] = attr.ib(
|
|
294
294
|
default=attr.Factory(lambda: DEFAULT_CMAPS_FILES)
|
|
295
295
|
)
|
|
296
296
|
|
|
@@ -344,7 +344,7 @@ class ColorMaps:
|
|
|
344
344
|
|
|
345
345
|
return cmap
|
|
346
346
|
|
|
347
|
-
def list(self) ->
|
|
347
|
+
def list(self) -> list[str]:
|
|
348
348
|
"""List registered Colormaps.
|
|
349
349
|
|
|
350
350
|
Returns
|
|
@@ -355,7 +355,7 @@ class ColorMaps:
|
|
|
355
355
|
|
|
356
356
|
def register(
|
|
357
357
|
self,
|
|
358
|
-
custom_cmap:
|
|
358
|
+
custom_cmap: dict[str, str | pathlib.Path | ColorMapType | None],
|
|
359
359
|
overwrite: bool = False,
|
|
360
360
|
) -> "ColorMaps":
|
|
361
361
|
"""Register a custom colormap.
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"""rio_tiler.io.Reader with VSIFILE/Obstore Opener."""
|
|
2
2
|
|
|
3
|
-
from typing import Union
|
|
4
|
-
|
|
5
3
|
import attr
|
|
6
4
|
import rasterio
|
|
7
5
|
from rasterio.io import DatasetReader, DatasetWriter, MemoryFile
|
|
@@ -21,7 +19,7 @@ except ImportError: # pragma: nocover
|
|
|
21
19
|
class VSIReader(Reader):
|
|
22
20
|
"""Rasterio Reader with VSIFILE opener."""
|
|
23
21
|
|
|
24
|
-
dataset:
|
|
22
|
+
dataset: DatasetReader | DatasetWriter | MemoryFile | WarpedVRT | None = attr.ib(
|
|
25
23
|
default=None, init=False
|
|
26
24
|
)
|
|
27
25
|
|
rio_tiler/experimental/zarr.py
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import contextlib
|
|
6
|
+
from collections.abc import Callable
|
|
6
7
|
from functools import cache
|
|
7
8
|
from pathlib import Path
|
|
8
|
-
from typing import Any,
|
|
9
|
+
from typing import Any, Literal
|
|
9
10
|
from urllib.parse import urlparse
|
|
10
11
|
|
|
11
12
|
import attr
|
|
@@ -88,13 +89,13 @@ class ZarrReader(BaseReader):
|
|
|
88
89
|
|
|
89
90
|
"""
|
|
90
91
|
|
|
91
|
-
input: str = attr.ib()
|
|
92
|
-
dataset: xarray.Dataset = attr.ib(default=None)
|
|
92
|
+
input: str | None = attr.ib()
|
|
93
|
+
dataset: xarray.Dataset | None = attr.ib(default=None)
|
|
93
94
|
|
|
94
95
|
tms: TileMatrixSet = attr.ib(default=WEB_MERCATOR_TMS)
|
|
95
96
|
|
|
96
97
|
opener: Callable[..., xarray.Dataset] = attr.ib(default=open_dataset)
|
|
97
|
-
opener_options:
|
|
98
|
+
opener_options: dict = attr.ib(factory=dict)
|
|
98
99
|
_ctx_stack: contextlib.ExitStack = attr.ib(init=False, factory=contextlib.ExitStack)
|
|
99
100
|
|
|
100
101
|
def __attrs_post_init__(self):
|
|
@@ -142,7 +143,7 @@ class ZarrReader(BaseReader):
|
|
|
142
143
|
self.close()
|
|
143
144
|
|
|
144
145
|
@property
|
|
145
|
-
def variables(self) ->
|
|
146
|
+
def variables(self) -> list[str]:
|
|
146
147
|
"""Return dataset variable names"""
|
|
147
148
|
return list(self.dataset.data_vars) # type: ignore
|
|
148
149
|
|
|
@@ -191,16 +192,16 @@ class ZarrReader(BaseReader):
|
|
|
191
192
|
def _get_variable(
|
|
192
193
|
self,
|
|
193
194
|
variable: str,
|
|
194
|
-
sel:
|
|
195
|
-
method:
|
|
195
|
+
sel: list[str] | None = None,
|
|
196
|
+
method: sel_methods | None = None,
|
|
196
197
|
) -> xarray.DataArray:
|
|
197
198
|
"""Get DataArray from xarray Dataset."""
|
|
198
199
|
da = self.dataset[variable]
|
|
199
200
|
|
|
200
201
|
if sel:
|
|
201
|
-
_idx:
|
|
202
|
+
_idx: dict[str, list] = {}
|
|
202
203
|
for s in sel:
|
|
203
|
-
val:
|
|
204
|
+
val: str | slice
|
|
204
205
|
dim, val = s.split("=")
|
|
205
206
|
|
|
206
207
|
# cast string to dtype of the dimension
|
|
@@ -239,8 +240,8 @@ class ZarrReader(BaseReader):
|
|
|
239
240
|
self,
|
|
240
241
|
*,
|
|
241
242
|
variable: str,
|
|
242
|
-
sel:
|
|
243
|
-
method:
|
|
243
|
+
sel: list[str] | None = None,
|
|
244
|
+
method: sel_methods | None = None,
|
|
244
245
|
):
|
|
245
246
|
"""Return xarray.DataArray info."""
|
|
246
247
|
with XarrayReader(
|
|
@@ -258,8 +259,8 @@ class ZarrReader(BaseReader):
|
|
|
258
259
|
crs: CRS,
|
|
259
260
|
*,
|
|
260
261
|
variable: str,
|
|
261
|
-
sel:
|
|
262
|
-
method:
|
|
262
|
+
sel: list[str] | None = None,
|
|
263
|
+
method: sel_methods | None = None,
|
|
263
264
|
) -> BBox:
|
|
264
265
|
"""Return Geographic Bounds for a Geographic CRS."""
|
|
265
266
|
with XarrayReader(
|
|
@@ -271,8 +272,8 @@ class ZarrReader(BaseReader):
|
|
|
271
272
|
self,
|
|
272
273
|
*,
|
|
273
274
|
variable: str,
|
|
274
|
-
sel:
|
|
275
|
-
method:
|
|
275
|
+
sel: list[str] | None = None,
|
|
276
|
+
method: sel_methods | None = None,
|
|
276
277
|
) -> Info:
|
|
277
278
|
"""Return xarray.DataArray info."""
|
|
278
279
|
with XarrayReader(
|
|
@@ -284,10 +285,10 @@ class ZarrReader(BaseReader):
|
|
|
284
285
|
self,
|
|
285
286
|
*args: Any,
|
|
286
287
|
variable: str,
|
|
287
|
-
sel:
|
|
288
|
-
method:
|
|
288
|
+
sel: list[str] | None = None,
|
|
289
|
+
method: sel_methods | None = None,
|
|
289
290
|
**kwargs: Any,
|
|
290
|
-
) ->
|
|
291
|
+
) -> dict[str, BandStatistics]:
|
|
291
292
|
"""Return statistics from a dataset."""
|
|
292
293
|
with XarrayReader(
|
|
293
294
|
self._get_variable(variable, sel=sel, method=method),
|
|
@@ -298,8 +299,8 @@ class ZarrReader(BaseReader):
|
|
|
298
299
|
self,
|
|
299
300
|
*args: Any,
|
|
300
301
|
variable: str,
|
|
301
|
-
sel:
|
|
302
|
-
method:
|
|
302
|
+
sel: list[str] | None = None,
|
|
303
|
+
method: sel_methods | None = None,
|
|
303
304
|
**kwargs: Any,
|
|
304
305
|
) -> ImageData:
|
|
305
306
|
"""Read a Web Map tile from a dataset."""
|
|
@@ -313,8 +314,8 @@ class ZarrReader(BaseReader):
|
|
|
313
314
|
self,
|
|
314
315
|
*args: Any,
|
|
315
316
|
variable: str,
|
|
316
|
-
sel:
|
|
317
|
-
method:
|
|
317
|
+
sel: list[str] | None = None,
|
|
318
|
+
method: sel_methods | None = None,
|
|
318
319
|
**kwargs: Any,
|
|
319
320
|
) -> ImageData:
|
|
320
321
|
"""Read part of a dataset."""
|
|
@@ -327,8 +328,8 @@ class ZarrReader(BaseReader):
|
|
|
327
328
|
self,
|
|
328
329
|
*args: Any,
|
|
329
330
|
variable: str,
|
|
330
|
-
sel:
|
|
331
|
-
method:
|
|
331
|
+
sel: list[str] | None = None,
|
|
332
|
+
method: sel_methods | None = None,
|
|
332
333
|
**kwargs: Any,
|
|
333
334
|
) -> ImageData:
|
|
334
335
|
"""Return a preview of a dataset."""
|
|
@@ -341,8 +342,8 @@ class ZarrReader(BaseReader):
|
|
|
341
342
|
self,
|
|
342
343
|
*args: Any,
|
|
343
344
|
variable: str,
|
|
344
|
-
sel:
|
|
345
|
-
method:
|
|
345
|
+
sel: list[str] | None = None,
|
|
346
|
+
method: sel_methods | None = None,
|
|
346
347
|
**kwargs: Any,
|
|
347
348
|
) -> PointData:
|
|
348
349
|
"""Read a pixel value from a dataset."""
|
|
@@ -355,8 +356,8 @@ class ZarrReader(BaseReader):
|
|
|
355
356
|
self,
|
|
356
357
|
*args: Any,
|
|
357
358
|
variable: str,
|
|
358
|
-
sel:
|
|
359
|
-
method:
|
|
359
|
+
sel: list[str] | None = None,
|
|
360
|
+
method: sel_methods | None = None,
|
|
360
361
|
**kwargs: Any,
|
|
361
362
|
) -> ImageData:
|
|
362
363
|
"""Read part of a dataset defined by a geojson feature."""
|
rio_tiler/expression.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""rio-tiler.expression: Parse and Apply expression."""
|
|
2
2
|
|
|
3
3
|
import re
|
|
4
|
-
from
|
|
4
|
+
from collections.abc import Sequence
|
|
5
5
|
|
|
6
6
|
import numexpr
|
|
7
7
|
import numpy
|
|
@@ -9,7 +9,7 @@ import numpy
|
|
|
9
9
|
from rio_tiler.errors import InvalidExpression
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
def parse_expression(expression: str, cast: bool = True) ->
|
|
12
|
+
def parse_expression(expression: str, cast: bool = True) -> tuple:
|
|
13
13
|
"""Parse rio-tiler band math expression and extract bands.
|
|
14
14
|
|
|
15
15
|
Args:
|
|
@@ -37,7 +37,7 @@ def parse_expression(expression: str, cast: bool = True) -> Tuple:
|
|
|
37
37
|
return output_bands
|
|
38
38
|
|
|
39
39
|
|
|
40
|
-
def get_expression_blocks(expression: str) ->
|
|
40
|
+
def get_expression_blocks(expression: str) -> list[str]:
|
|
41
41
|
"""Split expression in blocks.
|
|
42
42
|
|
|
43
43
|
Args:
|
|
@@ -51,7 +51,7 @@ def get_expression_blocks(expression: str) -> List[str]:
|
|
|
51
51
|
['b1/b2', 'b2+b1']
|
|
52
52
|
|
|
53
53
|
"""
|
|
54
|
-
return [expr for expr in expression.split(";") if expr]
|
|
54
|
+
return [expr.lower() for expr in expression.split(";") if expr]
|
|
55
55
|
|
|
56
56
|
|
|
57
57
|
def apply_expression(
|