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/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 = 256,
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. Defaults to `256`.
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
- cast(BBox, self.tms.xy_bounds(Tile(x=tile_x, y=tile_y, z=tile_z))),
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: TileMatrixSet = attr.ib(init=False)
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 = 256,
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
- cast(BBox, self.tms.xy_bounds(Tile(x=tile_x, y=tile_y, z=tile_z))),
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
- metadata=extras if not vrt_options else None,
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 vrt_options:
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) for ix, v in enumerate(self.band_descriptions, 1)
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], 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, band_names, band_descriptions
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, band_names, band_descriptions
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, band_names, _ = self._sel_indexes(indexes)
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 {band_names[ix]: BandStatistics(**val) for ix, val in enumerate(stats)}
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 = 256,
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
- cast(BBox, self.tms.xy_bounds(Tile(x=tile_x, y=tile_y, z=tile_z))),
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, band_names, band_descriptions = self._sel_indexes(indexes)
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, band_names, band_descriptions = self._sel_indexes(indexes)
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, band_names, band_descriptions = self._sel_indexes(indexes)
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
- # TODO: Update band descriptions
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
- band_names=blocks,
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
- # TODO: update band descriptions
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
- band_names=blocks,
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(**stats[ix])
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
- band_names=[f"b{idx}" for idx in indexes],
302
- band_descriptions=[dataset.descriptions[ix - 1] or "" for idx in indexes],
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, total=False):
64
+ class AssetInfo(TypedDict):
65
65
  """Asset Reader Options."""
66
66
 
67
67
  url: Any
68
- media_type: str
69
- env: dict | None
70
- metadata: dict | None
71
- dataset_statistics: Sequence[tuple[float, float]] | None
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: 8.0.5
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=9I_AbcN_Q5q0cgOm8MkNY6J1X4ZALl8YEgSq2es0oac,192
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=kZhxXVL7j7c-9fMi8XeLlIzaYXNY2PhKg892jNeLEpk,2301
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=5ZSUWP-z5LP14X7vVaoOBFdJLsmAEBHTCW8N5J97dYs,35046
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=GTz_f3m3LH-UTn7dh6Jy1U_18R66X0QnmnFcWs4PhLM,24991
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=pFw_rjzAfoebIS3-sxWWZa1LHIIUen4F0NnPmiqRfvA,1635
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=qXaIybaTLRZjFvgLFX9XOEozrP-oGc8CTICFunvB0BE,53044
231
- rio_tiler/io/rasterio.py,sha256=xwA-EM8FUfpWIW7X4-R-UExOayUzQ1PoCeRZGi2TRNs,28952
232
- rio_tiler/io/stac.py,sha256=zMBmqMTakCX1fdjqlCO5KtoPaOsJUeL2AmUvWpoqlQc,12761
233
- rio_tiler/io/xarray.py,sha256=QjVlTnwmVMmoaFCuxuHRYEXx5Zb1dK3ScJD4HTa0WU8,26968
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-8.0.5.dist-info/METADATA,sha256=b7yu0aD1WmaaVza7whszSuRqZ8Sh54sDEFvwLox9WXY,11210
241
- rio_tiler-8.0.5.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
242
- rio_tiler-8.0.5.dist-info/licenses/AUTHORS.txt,sha256=FCVd4Tjg-8syl0ZugCunpXER8X2-XonW2ZfllyTnRvE,158
243
- rio_tiler-8.0.5.dist-info/licenses/LICENSE,sha256=vq8Tt4KoYQT9JxAjQ4yXMmmhFYRTsBRgrOj-ao-bC5o,1517
244
- rio_tiler-8.0.5.dist-info/RECORD,,
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,,