rio-tiler 8.0.5__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/expression.py +1 -1
- rio_tiler/io/base.py +158 -284
- rio_tiler/io/rasterio.py +22 -11
- rio_tiler/io/stac.py +25 -6
- rio_tiler/io/xarray.py +27 -19
- rio_tiler/models.py +24 -7
- rio_tiler/reader.py +3 -4
- rio_tiler/types.py +8 -6
- {rio_tiler-8.0.5.dist-info → rio_tiler-9.0.0a1.dist-info}/METADATA +1 -1
- {rio_tiler-8.0.5.dist-info → rio_tiler-9.0.0a1.dist-info}/RECORD +14 -14
- {rio_tiler-8.0.5.dist-info → rio_tiler-9.0.0a1.dist-info}/WHEEL +0 -0
- {rio_tiler-8.0.5.dist-info → rio_tiler-9.0.0a1.dist-info}/licenses/AUTHORS.txt +0 -0
- {rio_tiler-8.0.5.dist-info → rio_tiler-9.0.0a1.dist-info}/licenses/LICENSE +0 -0
rio_tiler/io/rasterio.py
CHANGED
|
@@ -169,7 +169,7 @@ class Reader(BaseReader):
|
|
|
169
169
|
|
|
170
170
|
def _get_descr(ix):
|
|
171
171
|
"""Return band description."""
|
|
172
|
-
return self.dataset.descriptions[ix - 1] or ""
|
|
172
|
+
return self.dataset.descriptions[ix - 1] or f"b{ix}"
|
|
173
173
|
|
|
174
174
|
if self.options.get("nodata", self.dataset.nodata) is not None:
|
|
175
175
|
nodata_type = "Nodata"
|
|
@@ -254,7 +254,7 @@ class Reader(BaseReader):
|
|
|
254
254
|
tile_x: int,
|
|
255
255
|
tile_y: int,
|
|
256
256
|
tile_z: int,
|
|
257
|
-
tilesize: int =
|
|
257
|
+
tilesize: int | None = None,
|
|
258
258
|
indexes: Indexes | None = None,
|
|
259
259
|
expression: str | None = None,
|
|
260
260
|
buffer: float | None = None,
|
|
@@ -266,7 +266,7 @@ class Reader(BaseReader):
|
|
|
266
266
|
tile_x (int): Tile's horizontal index.
|
|
267
267
|
tile_y (int): Tile's vertical index.
|
|
268
268
|
tile_z (int): Tile's zoom level index.
|
|
269
|
-
tilesize (int, optional): Output image size.
|
|
269
|
+
tilesize (int, optional): Output image size.
|
|
270
270
|
indexes (int or sequence of int, optional): Band indexes.
|
|
271
271
|
expression (str, optional): rio-tiler expression (e.g. b1/b2+b3).
|
|
272
272
|
buffer (float, optional): Buffer on each side of the given tile. It must be a multiple of `0.5`. Output **tilesize** will be expanded to `tilesize + 2 * tile_buffer` (e.g 0.5 = 257x257, 1.0 = 258x258).
|
|
@@ -281,12 +281,18 @@ class Reader(BaseReader):
|
|
|
281
281
|
f"Tile(x={tile_x}, y={tile_y}, z={tile_z}) is outside bounds"
|
|
282
282
|
)
|
|
283
283
|
|
|
284
|
+
matrix = self.tms.matrix(tile_z)
|
|
285
|
+
bbox = cast(
|
|
286
|
+
BBox,
|
|
287
|
+
self.tms.xy_bounds(Tile(x=tile_x, y=tile_y, z=tile_z)),
|
|
288
|
+
)
|
|
289
|
+
|
|
284
290
|
return self.part(
|
|
285
|
-
|
|
291
|
+
bbox,
|
|
286
292
|
dst_crs=self.tms.rasterio_crs,
|
|
287
293
|
bounds_crs=self.tms.rasterio_crs,
|
|
288
|
-
height=tilesize,
|
|
289
|
-
width=tilesize,
|
|
294
|
+
height=tilesize or matrix.tileHeight,
|
|
295
|
+
width=tilesize or matrix.tileWidth,
|
|
290
296
|
max_size=None,
|
|
291
297
|
indexes=indexes,
|
|
292
298
|
expression=expression,
|
|
@@ -593,7 +599,7 @@ class LocalTileMatrixSet:
|
|
|
593
599
|
class ImageReader(Reader):
|
|
594
600
|
"""Non Geo Image Reader"""
|
|
595
601
|
|
|
596
|
-
tms:
|
|
602
|
+
tms: LocalTileMatrixSet = attr.ib(init=False) # type: ignore[assignment]
|
|
597
603
|
|
|
598
604
|
crs: CRS | None = attr.ib(init=False, default=None)
|
|
599
605
|
transform: Affine = attr.ib(init=False)
|
|
@@ -635,7 +641,7 @@ class ImageReader(Reader):
|
|
|
635
641
|
tile_x: int,
|
|
636
642
|
tile_y: int,
|
|
637
643
|
tile_z: int,
|
|
638
|
-
tilesize: int =
|
|
644
|
+
tilesize: int | None = None,
|
|
639
645
|
indexes: Indexes | None = None,
|
|
640
646
|
expression: str | None = None,
|
|
641
647
|
out_dtype: str | numpy.dtype | None = None,
|
|
@@ -666,10 +672,15 @@ class ImageReader(Reader):
|
|
|
666
672
|
f"Tile {tile_z}/{tile_x}/{tile_y} is outside {self.input} bounds"
|
|
667
673
|
)
|
|
668
674
|
|
|
675
|
+
bbox = cast(
|
|
676
|
+
BBox,
|
|
677
|
+
self.tms.xy_bounds(Tile(x=tile_x, y=tile_y, z=tile_z)),
|
|
678
|
+
)
|
|
679
|
+
|
|
669
680
|
return self.part(
|
|
670
|
-
|
|
671
|
-
height=tilesize,
|
|
672
|
-
width=tilesize,
|
|
681
|
+
bbox,
|
|
682
|
+
height=tilesize or self.tms.tile_size,
|
|
683
|
+
width=tilesize or self.tms.tile_size,
|
|
673
684
|
max_size=None,
|
|
674
685
|
indexes=indexes,
|
|
675
686
|
expression=expression,
|
rio_tiler/io/stac.py
CHANGED
|
@@ -323,33 +323,52 @@ class STACReader(MultiBaseReader):
|
|
|
323
323
|
|
|
324
324
|
"""
|
|
325
325
|
asset, vrt_options = self._parse_vrt_asset(asset)
|
|
326
|
+
|
|
327
|
+
method_options: dict[str, Any] = {}
|
|
328
|
+
|
|
329
|
+
# NOTE: asset can be in form of
|
|
330
|
+
# "{asset_name}|some_option=some_value&another_option=another_value"
|
|
331
|
+
if "|" in asset:
|
|
332
|
+
asset, params = asset.split("|", 1)
|
|
333
|
+
# NOTE: Construct method options from params
|
|
334
|
+
if params:
|
|
335
|
+
for param in params.split("&"):
|
|
336
|
+
key, value = param.split("=", 1)
|
|
337
|
+
if key == "indexes":
|
|
338
|
+
method_options["indexes"] = list(map(int, value.split(",")))
|
|
339
|
+
elif key == "expression":
|
|
340
|
+
method_options["expression"] = value
|
|
341
|
+
|
|
326
342
|
if asset not in self.assets:
|
|
327
343
|
raise InvalidAssetName(
|
|
328
344
|
f"'{asset}' is not valid, should be one of {self.assets}"
|
|
329
345
|
)
|
|
330
346
|
|
|
347
|
+
asset_modified = "expression" in method_options or vrt_options
|
|
348
|
+
|
|
331
349
|
asset_info = self.item.assets[asset]
|
|
332
350
|
extras = asset_info.extra_fields
|
|
333
351
|
|
|
334
352
|
info = AssetInfo(
|
|
335
353
|
url=asset_info.get_absolute_href() or asset_info.href,
|
|
336
|
-
|
|
354
|
+
name=asset,
|
|
355
|
+
media_type=asset_info.media_type,
|
|
356
|
+
method_options=method_options,
|
|
337
357
|
)
|
|
338
358
|
|
|
359
|
+
if not asset_modified:
|
|
360
|
+
info["metadata"] = extras
|
|
361
|
+
|
|
339
362
|
if STAC_ALTERNATE_KEY and extras.get("alternate"):
|
|
340
363
|
if alternate := extras["alternate"].get(STAC_ALTERNATE_KEY):
|
|
341
364
|
info["url"] = alternate["href"]
|
|
342
365
|
|
|
343
|
-
if asset_info.media_type:
|
|
344
|
-
info["media_type"] = asset_info.media_type
|
|
345
|
-
|
|
346
366
|
# https://github.com/stac-extensions/file
|
|
347
367
|
if head := extras.get("file:header_size"):
|
|
348
368
|
info["env"] = {"GDAL_INGESTED_BYTES_AT_OPEN": head}
|
|
349
369
|
|
|
350
370
|
# https://github.com/stac-extensions/raster
|
|
351
|
-
if extras.get("raster:bands") and not
|
|
352
|
-
bands = extras.get("raster:bands")
|
|
371
|
+
if (bands := extras.get("raster:bands", [])) and not asset_modified:
|
|
353
372
|
stats = [
|
|
354
373
|
(b["statistics"]["minimum"], b["statistics"]["maximum"])
|
|
355
374
|
for b in bands
|
rio_tiler/io/xarray.py
CHANGED
|
@@ -160,7 +160,7 @@ class XarrayReader(BaseReader):
|
|
|
160
160
|
if coords_name:
|
|
161
161
|
return [str(self.input.coords[coords_name[0]].data)]
|
|
162
162
|
|
|
163
|
-
return [self.input.name or ""] # type: ignore
|
|
163
|
+
return [self.input.name or "b1"] # type: ignore
|
|
164
164
|
|
|
165
165
|
return [str(band) for d in self._dims for band in self.input[d].values]
|
|
166
166
|
|
|
@@ -173,7 +173,8 @@ class XarrayReader(BaseReader):
|
|
|
173
173
|
"crs": CRS_to_uri(self.crs) or self.crs.to_wkt(),
|
|
174
174
|
"band_metadata": [(f"b{ix}", v) for ix, v in enumerate(metadata, 1)],
|
|
175
175
|
"band_descriptions": [
|
|
176
|
-
(f"b{ix}", v
|
|
176
|
+
(f"b{ix}", v or f"b{ix}")
|
|
177
|
+
for ix, v in enumerate(self.band_descriptions, 1)
|
|
177
178
|
],
|
|
178
179
|
"dtype": str(self.input.dtype),
|
|
179
180
|
"nodata_type": "Nodata" if self.input.rio.nodata is not None else "None",
|
|
@@ -193,11 +194,10 @@ class XarrayReader(BaseReader):
|
|
|
193
194
|
def _sel_indexes(
|
|
194
195
|
self,
|
|
195
196
|
indexes: Indexes | None = None,
|
|
196
|
-
) -> tuple[xarray.DataArray, list[str]
|
|
197
|
+
) -> tuple[xarray.DataArray, list[str]]:
|
|
197
198
|
"""Select `band` indexes in DataArray."""
|
|
198
199
|
da = self.input
|
|
199
200
|
band_descriptions = self.band_descriptions
|
|
200
|
-
band_names = [f"b{ix + 1}" for ix in range(self.input.rio.count)]
|
|
201
201
|
|
|
202
202
|
if indexes := cast_to_sequence(indexes):
|
|
203
203
|
assert all(v > 0 for v in indexes), "Indexes value must be >= 1"
|
|
@@ -207,15 +207,14 @@ class XarrayReader(BaseReader):
|
|
|
207
207
|
f"Invalid indexes {indexes} for array of shape {da.shape}"
|
|
208
208
|
)
|
|
209
209
|
|
|
210
|
-
return da,
|
|
210
|
+
return da, band_descriptions
|
|
211
211
|
|
|
212
212
|
indexes = [idx - 1 for idx in indexes]
|
|
213
213
|
|
|
214
214
|
da = da[indexes]
|
|
215
215
|
band_descriptions = [band_descriptions[idx] for idx in indexes]
|
|
216
|
-
band_names = [band_names[idx] for idx in indexes]
|
|
217
216
|
|
|
218
|
-
return da,
|
|
217
|
+
return da, band_descriptions
|
|
219
218
|
|
|
220
219
|
def statistics(
|
|
221
220
|
self,
|
|
@@ -230,7 +229,7 @@ class XarrayReader(BaseReader):
|
|
|
230
229
|
"""Return statistics from a dataset."""
|
|
231
230
|
hist_options = hist_options or {}
|
|
232
231
|
|
|
233
|
-
da,
|
|
232
|
+
da, band_descriptions = self._sel_indexes(indexes)
|
|
234
233
|
|
|
235
234
|
if nodata is not None:
|
|
236
235
|
da = da.rio.write_nodata(nodata)
|
|
@@ -246,14 +245,20 @@ class XarrayReader(BaseReader):
|
|
|
246
245
|
**hist_options,
|
|
247
246
|
)
|
|
248
247
|
|
|
249
|
-
return {
|
|
248
|
+
return {
|
|
249
|
+
f"b{ix +1}": BandStatistics(
|
|
250
|
+
**val,
|
|
251
|
+
description=band_descriptions[ix],
|
|
252
|
+
)
|
|
253
|
+
for ix, val in enumerate(stats)
|
|
254
|
+
}
|
|
250
255
|
|
|
251
256
|
def tile(
|
|
252
257
|
self,
|
|
253
258
|
tile_x: int,
|
|
254
259
|
tile_y: int,
|
|
255
260
|
tile_z: int,
|
|
256
|
-
tilesize: int =
|
|
261
|
+
tilesize: int | None = None,
|
|
257
262
|
reproject_method: WarpResampling = "nearest",
|
|
258
263
|
auto_expand: bool = True,
|
|
259
264
|
nodata: NoData | None = None,
|
|
@@ -281,16 +286,22 @@ class XarrayReader(BaseReader):
|
|
|
281
286
|
f"Tile(x={tile_x}, y={tile_y}, z={tile_z}) is outside bounds"
|
|
282
287
|
)
|
|
283
288
|
|
|
289
|
+
matrix = self.tms.matrix(tile_z)
|
|
290
|
+
bbox = cast(
|
|
291
|
+
BBox,
|
|
292
|
+
self.tms.xy_bounds(Tile(x=tile_x, y=tile_y, z=tile_z)),
|
|
293
|
+
)
|
|
294
|
+
|
|
284
295
|
return self.part(
|
|
285
|
-
|
|
296
|
+
bbox,
|
|
286
297
|
dst_crs=self.tms.rasterio_crs,
|
|
287
298
|
bounds_crs=self.tms.rasterio_crs,
|
|
288
299
|
reproject_method=reproject_method,
|
|
289
300
|
auto_expand=auto_expand,
|
|
290
301
|
nodata=nodata,
|
|
291
302
|
indexes=indexes,
|
|
292
|
-
height=tilesize,
|
|
293
|
-
width=tilesize,
|
|
303
|
+
height=tilesize or matrix.tileHeight,
|
|
304
|
+
width=tilesize or matrix.tileWidth,
|
|
294
305
|
out_dtype=out_dtype,
|
|
295
306
|
**kwargs,
|
|
296
307
|
)
|
|
@@ -338,7 +349,7 @@ class XarrayReader(BaseReader):
|
|
|
338
349
|
|
|
339
350
|
dst_crs = dst_crs or bounds_crs
|
|
340
351
|
|
|
341
|
-
da,
|
|
352
|
+
da, band_descriptions = self._sel_indexes(indexes)
|
|
342
353
|
|
|
343
354
|
if nodata is not None:
|
|
344
355
|
da = da.rio.write_nodata(nodata)
|
|
@@ -448,7 +459,6 @@ class XarrayReader(BaseReader):
|
|
|
448
459
|
bounds=bbox,
|
|
449
460
|
crs=da.rio.crs,
|
|
450
461
|
dataset_statistics=stats,
|
|
451
|
-
band_names=band_names,
|
|
452
462
|
band_descriptions=band_descriptions,
|
|
453
463
|
nodata=da.rio.nodata,
|
|
454
464
|
)
|
|
@@ -488,7 +498,7 @@ class XarrayReader(BaseReader):
|
|
|
488
498
|
)
|
|
489
499
|
max_size = None
|
|
490
500
|
|
|
491
|
-
da,
|
|
501
|
+
da, band_descriptions = self._sel_indexes(indexes)
|
|
492
502
|
|
|
493
503
|
if da.nbytes > MAX_ARRAY_SIZE:
|
|
494
504
|
raise MaxArraySizeError(
|
|
@@ -578,7 +588,6 @@ class XarrayReader(BaseReader):
|
|
|
578
588
|
bounds=da.rio.bounds(),
|
|
579
589
|
crs=da.rio.crs,
|
|
580
590
|
dataset_statistics=stats,
|
|
581
|
-
band_names=band_names,
|
|
582
591
|
band_descriptions=band_descriptions,
|
|
583
592
|
nodata=da.rio.nodata,
|
|
584
593
|
)
|
|
@@ -628,7 +637,7 @@ class XarrayReader(BaseReader):
|
|
|
628
637
|
):
|
|
629
638
|
raise PointOutsideBounds("Point is outside dataset bounds")
|
|
630
639
|
|
|
631
|
-
da,
|
|
640
|
+
da, band_descriptions = self._sel_indexes(indexes)
|
|
632
641
|
|
|
633
642
|
if nodata is not None:
|
|
634
643
|
da = da.rio.write_nodata(nodata)
|
|
@@ -648,7 +657,6 @@ class XarrayReader(BaseReader):
|
|
|
648
657
|
arr,
|
|
649
658
|
coordinates=(lon, lat),
|
|
650
659
|
crs=coord_crs,
|
|
651
|
-
band_names=band_names,
|
|
652
660
|
band_descriptions=band_descriptions,
|
|
653
661
|
pixel_location=(x, y),
|
|
654
662
|
nodata=da.rio.nodata,
|
rio_tiler/models.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""rio-tiler models."""
|
|
2
2
|
|
|
3
3
|
import itertools
|
|
4
|
+
import re
|
|
4
5
|
import warnings
|
|
5
6
|
from collections.abc import Sequence
|
|
6
7
|
from typing import Any, Literal, cast
|
|
@@ -87,6 +88,7 @@ class BandStatistics(BaseModel):
|
|
|
87
88
|
valid_percent: float
|
|
88
89
|
masked_pixels: float
|
|
89
90
|
valid_pixels: float
|
|
91
|
+
description: str
|
|
90
92
|
|
|
91
93
|
model_config = {"extra": "allow"}
|
|
92
94
|
|
|
@@ -187,7 +189,7 @@ class PointData:
|
|
|
187
189
|
|
|
188
190
|
@band_descriptions.default
|
|
189
191
|
def _default_band_descriptions(self):
|
|
190
|
-
return ["" for ix in range(self.count)]
|
|
192
|
+
return ["" or f"b{ix + 1}" for ix in range(self.count)]
|
|
191
193
|
|
|
192
194
|
@scales.default
|
|
193
195
|
def _default_scales(self):
|
|
@@ -290,14 +292,20 @@ class PointData:
|
|
|
290
292
|
# Using numexpr do not preserve mask info
|
|
291
293
|
data.mask = False
|
|
292
294
|
|
|
293
|
-
|
|
295
|
+
mapexpr = {
|
|
296
|
+
self.band_names[idx]: desc for idx, desc in enumerate(self.band_descriptions)
|
|
297
|
+
}
|
|
298
|
+
_re = re.compile(r"\bb[0-9A-Z]+\b")
|
|
299
|
+
band_descriptions = [
|
|
300
|
+
_re.sub(lambda x: mapexpr[x.group()], block) for block in blocks
|
|
301
|
+
]
|
|
294
302
|
|
|
295
303
|
return PointData(
|
|
296
304
|
data,
|
|
297
305
|
assets=self.assets,
|
|
298
306
|
crs=self.crs,
|
|
299
307
|
coordinates=self.coordinates,
|
|
300
|
-
|
|
308
|
+
band_descriptions=band_descriptions,
|
|
301
309
|
metadata=self.metadata,
|
|
302
310
|
pixel_location=self.pixel_location,
|
|
303
311
|
)
|
|
@@ -363,7 +371,7 @@ class ImageData:
|
|
|
363
371
|
|
|
364
372
|
@band_descriptions.default
|
|
365
373
|
def _default_band_descriptions(self):
|
|
366
|
-
return ["" for ix in range(self.count)]
|
|
374
|
+
return ["" or f"b{ix + 1}" for ix in range(self.count)]
|
|
367
375
|
|
|
368
376
|
@scales.default
|
|
369
377
|
def _default_scales(self):
|
|
@@ -691,14 +699,20 @@ class ImageData:
|
|
|
691
699
|
# NOTE: We use dataset mask when mixing bands
|
|
692
700
|
data.mask = numpy.logical_or.reduce(self.array.mask)
|
|
693
701
|
|
|
694
|
-
|
|
702
|
+
mapexpr = {
|
|
703
|
+
self.band_names[idx]: desc for idx, desc in enumerate(self.band_descriptions)
|
|
704
|
+
}
|
|
705
|
+
_re = re.compile(r"\bb[0-9A-Z]+\b")
|
|
706
|
+
band_descriptions = [
|
|
707
|
+
_re.sub(lambda x: mapexpr[x.group()], block) for block in blocks
|
|
708
|
+
]
|
|
695
709
|
|
|
696
710
|
return ImageData(
|
|
697
711
|
data,
|
|
698
712
|
assets=self.assets,
|
|
699
713
|
crs=self.crs,
|
|
700
714
|
bounds=self.bounds,
|
|
701
|
-
|
|
715
|
+
band_descriptions=band_descriptions,
|
|
702
716
|
metadata=self.metadata,
|
|
703
717
|
dataset_statistics=stats,
|
|
704
718
|
alpha_mask=self.alpha_mask,
|
|
@@ -917,7 +931,10 @@ class ImageData:
|
|
|
917
931
|
)
|
|
918
932
|
|
|
919
933
|
return {
|
|
920
|
-
f"{self.band_names[ix]}": BandStatistics(
|
|
934
|
+
f"{self.band_names[ix]}": BandStatistics(
|
|
935
|
+
**stats[ix],
|
|
936
|
+
description=self.band_descriptions[ix],
|
|
937
|
+
)
|
|
921
938
|
for ix in range(len(stats))
|
|
922
939
|
}
|
|
923
940
|
|
rio_tiler/reader.py
CHANGED
|
@@ -298,8 +298,9 @@ def read(
|
|
|
298
298
|
data,
|
|
299
299
|
bounds=out_bounds,
|
|
300
300
|
crs=dataset.crs,
|
|
301
|
-
|
|
302
|
-
|
|
301
|
+
band_descriptions=[
|
|
302
|
+
dataset.descriptions[ix - 1] or f"b{idx}" for idx in indexes
|
|
303
|
+
],
|
|
303
304
|
dataset_statistics=dataset_statistics,
|
|
304
305
|
metadata=dataset.tags(),
|
|
305
306
|
nodata=nodata,
|
|
@@ -509,7 +510,6 @@ def part(
|
|
|
509
510
|
img.array[:, padding:-padding, padding:-padding],
|
|
510
511
|
bounds=bounds,
|
|
511
512
|
crs=img.crs,
|
|
512
|
-
band_names=img.band_names,
|
|
513
513
|
band_descriptions=img.band_descriptions,
|
|
514
514
|
nodata=img.nodata,
|
|
515
515
|
scales=img.scales,
|
|
@@ -649,7 +649,6 @@ def point(
|
|
|
649
649
|
|
|
650
650
|
return PointData(
|
|
651
651
|
img.array[:, 0, 0],
|
|
652
|
-
band_names=img.band_names,
|
|
653
652
|
band_descriptions=img.band_descriptions,
|
|
654
653
|
coordinates=coordinates,
|
|
655
654
|
crs=coord_crs,
|
rio_tiler/types.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""rio-tiler types."""
|
|
2
2
|
|
|
3
3
|
from collections.abc import Sequence
|
|
4
|
-
from typing import Any, Literal, TypedDict
|
|
4
|
+
from typing import Any, Literal, NotRequired, TypedDict
|
|
5
5
|
|
|
6
6
|
import numpy
|
|
7
7
|
|
|
@@ -61,11 +61,13 @@ WarpResampling = Literal[
|
|
|
61
61
|
]
|
|
62
62
|
|
|
63
63
|
|
|
64
|
-
class AssetInfo(TypedDict
|
|
64
|
+
class AssetInfo(TypedDict):
|
|
65
65
|
"""Asset Reader Options."""
|
|
66
66
|
|
|
67
67
|
url: Any
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
name: str
|
|
69
|
+
media_type: str | None
|
|
70
|
+
method_options: dict
|
|
71
|
+
env: NotRequired[dict]
|
|
72
|
+
metadata: NotRequired[dict]
|
|
73
|
+
dataset_statistics: NotRequired[Sequence[tuple[float, float]]]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rio-tiler
|
|
3
|
-
Version:
|
|
3
|
+
Version: 9.0.0a1
|
|
4
4
|
Summary: User friendly Rasterio plugin to read raster datasets.
|
|
5
5
|
Project-URL: Homepage, https://cogeotiff.github.io/rio-tiler/
|
|
6
6
|
Project-URL: Documentation, https://cogeotiff.github.io/rio-tiler/
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
rio_tiler/__init__.py,sha256=
|
|
1
|
+
rio_tiler/__init__.py,sha256=ZuJ_EqBA2SkpM04p6fYKEq_v001Mr1KtKfeqX4ze270,194
|
|
2
2
|
rio_tiler/colormap.py,sha256=ttimH_pdXaPwCEtP20YAIPbk0t-FeglZaB2KEplOJjs,11308
|
|
3
3
|
rio_tiler/constants.py,sha256=55i-7JZDupTXZdLgxL03KsgM4lAzuGuIVP1zZKktzp0,426
|
|
4
4
|
rio_tiler/errors.py,sha256=GFAuE1AaSvx6dd0z5um9n3y1wVzUyQ5S8qY7_tXdrR8,2178
|
|
5
|
-
rio_tiler/expression.py,sha256=
|
|
5
|
+
rio_tiler/expression.py,sha256=sVEdEP83c8TCMkcKDCg-3aTTfQiNmJ5stFBMvtjc0fU,2309
|
|
6
6
|
rio_tiler/logger.py,sha256=RR8lnW3uVXkFkPa3nNJS_tTndmdiNNDVXpCDGDxGf0A,81
|
|
7
|
-
rio_tiler/models.py,sha256=
|
|
7
|
+
rio_tiler/models.py,sha256=B8krrhPAfaL9tofKEax_855pcWXueNhbaJT32Nvt_aw,35712
|
|
8
8
|
rio_tiler/profiles.py,sha256=EAx2JdcaOcMw5PZjxbCqQBXXWMac9mjtpHoVFPJEDNQ,1562
|
|
9
9
|
rio_tiler/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
-
rio_tiler/reader.py,sha256=
|
|
10
|
+
rio_tiler/reader.py,sha256=_Jd4JP4xDFMZWcL3eOv2Lgo_r-SwvbnjWcpOlaLK2dw,24895
|
|
11
11
|
rio_tiler/tasks.py,sha256=rU4rpYFuTvPnWi8dp-lq0EBTOpQvQ-Gmo2eu0GcDKpE,3589
|
|
12
|
-
rio_tiler/types.py,sha256=
|
|
12
|
+
rio_tiler/types.py,sha256=KPSKIOToEnAqtX04v7LoTJj9yCYocthMKUQAfv3AqcI,1699
|
|
13
13
|
rio_tiler/utils.py,sha256=AeWxiOW07cn_bIWxXBp2PWsc11X0DtI1UFp2sdWFQto,32248
|
|
14
14
|
rio_tiler/cmap_data/__init__.py,sha256=8FtVmfpTjXlvhxQ5QesN0UC1m_B3MuF3LbGbhMC5Rw4,1039
|
|
15
15
|
rio_tiler/cmap_data/accent.npy,sha256=Qde1ldOoXghe4L05v1QbVvnMA1ldwNjKWPf5xCBbmI4,1152
|
|
@@ -227,18 +227,18 @@ rio_tiler/experimental/__init__.py,sha256=dgW817h5U9OQt4V68L912g3DivPfhoWKvS-mI8
|
|
|
227
227
|
rio_tiler/experimental/vsifile.py,sha256=O_HeGz-eMM2voQ2lSREEUeHRb6fzvDj6jl_fhkspkII,937
|
|
228
228
|
rio_tiler/experimental/zarr.py,sha256=Lkz5WCNz6nRJTdvSKLCaSVaW2esSJDxyIsKr0pB6ppA,11753
|
|
229
229
|
rio_tiler/io/__init__.py,sha256=_L4iILm6vSiJ14GEDDOvkuUHRtbWC9oqx6Bu8PxHhvA,270
|
|
230
|
-
rio_tiler/io/base.py,sha256=
|
|
231
|
-
rio_tiler/io/rasterio.py,sha256=
|
|
232
|
-
rio_tiler/io/stac.py,sha256=
|
|
233
|
-
rio_tiler/io/xarray.py,sha256=
|
|
230
|
+
rio_tiler/io/base.py,sha256=XBzXGnshY7wcipNKuh_Y9hpQR685eLQJpFaVOMUSJOA,50078
|
|
231
|
+
rio_tiler/io/rasterio.py,sha256=YAp35j385LSvFdiDdSPDineLhIslbQ6sJIv44bTG1-I,29226
|
|
232
|
+
rio_tiler/io/stac.py,sha256=LPXOFn9CmqdHlaHzLvk7_c9JDSPXiR_ZsVMVWbwWIcI,13490
|
|
233
|
+
rio_tiler/io/xarray.py,sha256=_f9DqFMXMMUwLvf_hA7_uU3S8N7FswzBC0H3j5VJej0,26949
|
|
234
234
|
rio_tiler/mosaic/__init__.py,sha256=Yj6CKpnFl8PJhLSp-a55wo33hKZ8-6OOBJtWA1HZVy8,118
|
|
235
235
|
rio_tiler/mosaic/backend.py,sha256=IkkYgcoSsWuvyaFMd-ViQufDeMl-kZlNobbHYA6A21s,8450
|
|
236
236
|
rio_tiler/mosaic/reader.py,sha256=FzSSMijL8KyKAw0JZ7u7dxzid_UKAVHmNKXwX4NVH44,10990
|
|
237
237
|
rio_tiler/mosaic/methods/__init__.py,sha256=tgkXM9skaTLXIm5QFoheOEznQXM97KGflcAWHfkrt1g,612
|
|
238
238
|
rio_tiler/mosaic/methods/base.py,sha256=E9QrriktsY1ACNXg1HEjQgZpEZZ7_oADYcDKRMWeNdk,1387
|
|
239
239
|
rio_tiler/mosaic/methods/defaults.py,sha256=L2pPOpQpH3yQT6AYXMSWoCev_swOi9Xc9jzBaXXs7_w,7566
|
|
240
|
-
rio_tiler-
|
|
241
|
-
rio_tiler-
|
|
242
|
-
rio_tiler-
|
|
243
|
-
rio_tiler-
|
|
244
|
-
rio_tiler-
|
|
240
|
+
rio_tiler-9.0.0a1.dist-info/METADATA,sha256=CAKjSdzv2PK4-ueqsv3oiSkBWIvTCmUcqRWwj_n_Sy8,11212
|
|
241
|
+
rio_tiler-9.0.0a1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
242
|
+
rio_tiler-9.0.0a1.dist-info/licenses/AUTHORS.txt,sha256=FCVd4Tjg-8syl0ZugCunpXER8X2-XonW2ZfllyTnRvE,158
|
|
243
|
+
rio_tiler-9.0.0a1.dist-info/licenses/LICENSE,sha256=vq8Tt4KoYQT9JxAjQ4yXMmmhFYRTsBRgrOj-ao-bC5o,1517
|
|
244
|
+
rio_tiler-9.0.0a1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|