rio-tiler 6.8.0__py3-none-any.whl → 7.0.0__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/models.py CHANGED
@@ -21,6 +21,7 @@ from rasterio.io import MemoryFile
21
21
  from rasterio.plot import reshape_as_image
22
22
  from rasterio.transform import from_bounds
23
23
  from rasterio.warp import transform_geom
24
+ from typing_extensions import Self
24
25
 
25
26
  from rio_tiler.colormap import apply_cmap
26
27
  from rio_tiler.constants import WGS84_CRS
@@ -44,32 +45,14 @@ from rio_tiler.utils import (
44
45
  )
45
46
 
46
47
 
47
- class RioTilerBaseModel(BaseModel):
48
- """Provides dictionary access for pydantic models, for backwards compatability."""
49
-
50
- def __getitem__(self, item):
51
- """Access item like in Dict."""
52
- warnings.warn(
53
- "'key' access will has been deprecated and will be removed in rio-tiler 7.0.",
54
- DeprecationWarning,
55
- )
56
- return {**self.__dict__, **self.__pydantic_extra__}[item]
57
-
58
-
59
- class Bounds(RioTilerBaseModel):
48
+ class Bounds(BaseModel):
60
49
  """Dataset Bounding box"""
61
50
 
62
- bounds: BoundingBox
63
-
64
-
65
- class SpatialInfo(Bounds):
66
- """Dataset SpatialInfo"""
51
+ bounds: BBox
52
+ crs: str
67
53
 
68
- minzoom: int
69
- maxzoom: int
70
54
 
71
-
72
- class Info(SpatialInfo):
55
+ class Info(Bounds):
73
56
  """Dataset Info."""
74
57
 
75
58
  band_metadata: List[Tuple[str, Dict]]
@@ -84,7 +67,7 @@ class Info(SpatialInfo):
84
67
  model_config = {"extra": "allow"}
85
68
 
86
69
 
87
- class BandStatistics(RioTilerBaseModel):
70
+ class BandStatistics(BaseModel):
88
71
  """Band statistics"""
89
72
 
90
73
  min: float
@@ -218,7 +201,7 @@ class PointData:
218
201
  return self.array.shape[0]
219
202
 
220
203
  @classmethod
221
- def create_from_list(cls, data: Sequence["PointData"]):
204
+ def create_from_list(cls, data: Sequence["PointData"]) -> Self:
222
205
  """Create PointData from a sequence of PointsData objects.
223
206
 
224
207
  Args:
@@ -263,15 +246,6 @@ class PointData:
263
246
  metadata=metadata,
264
247
  )
265
248
 
266
- def as_masked(self) -> numpy.ma.MaskedArray:
267
- """return a numpy masked array."""
268
- warnings.warn(
269
- "'PointData.as_masked' has been deprecated and will be removed"
270
- "in rio-tiler 7.0. You can get the masked array directly with `PointData.array` attribute.",
271
- DeprecationWarning,
272
- )
273
- return self.array
274
-
275
249
  def apply_expression(self, expression: str) -> "PointData":
276
250
  """Apply expression to the image data."""
277
251
  blocks = get_expression_blocks(expression)
@@ -361,22 +335,7 @@ class ImageData:
361
335
  yield i
362
336
 
363
337
  @classmethod
364
- def from_array(cls, arr: numpy.ndarray) -> "ImageData":
365
- """Create ImageData from a numpy array.
366
-
367
- Args:
368
- arr (numpy.ndarray): Numpy array or Numpy masked array.
369
-
370
- """
371
- warnings.warn(
372
- "'ImageData.from_array()' has been deprecated and will be removed"
373
- "in rio-tiler 7.0.",
374
- DeprecationWarning,
375
- )
376
- return cls(arr)
377
-
378
- @classmethod
379
- def from_bytes(cls, data: bytes) -> "ImageData":
338
+ def from_bytes(cls, data: bytes) -> Self:
380
339
  """Create ImageData from bytes.
381
340
 
382
341
  Args:
@@ -425,7 +384,7 @@ class ImageData:
425
384
  )
426
385
 
427
386
  @classmethod
428
- def create_from_list(cls, data: Sequence["ImageData"]) -> "ImageData":
387
+ def create_from_list(cls, data: Sequence["ImageData"]) -> Self:
429
388
  """Create ImageData from a sequence of ImageData objects.
430
389
 
431
390
  Args:
@@ -498,15 +457,6 @@ class ImageData:
498
457
  metadata=metadata,
499
458
  )
500
459
 
501
- def as_masked(self) -> numpy.ma.MaskedArray:
502
- """return a numpy masked array."""
503
- warnings.warn(
504
- "'ImageData.as_masked' has been deprecated and will be removed"
505
- "in rio-tiler 7.0. You can get the masked array directly with `ImageData.array` attribute.",
506
- DeprecationWarning,
507
- )
508
- return self.array
509
-
510
460
  def data_as_image(self) -> numpy.ndarray:
511
461
  """Return the data array reshaped into an image processing/visualization software friendly order.
512
462
 
@@ -531,7 +481,7 @@ class ImageData:
531
481
  return self.array.shape[0]
532
482
 
533
483
  @property
534
- def transform(self):
484
+ def transform(self) -> Affine:
535
485
  """Returns the affine transform."""
536
486
  return (
537
487
  from_bounds(*self.bounds, self.width, self.height)
@@ -544,7 +494,7 @@ class ImageData:
544
494
  in_range: Sequence[IntervalTuple],
545
495
  out_range: Sequence[IntervalTuple] = ((0, 255),),
546
496
  out_dtype: Union[str, numpy.number] = "uint8",
547
- ):
497
+ ) -> Self:
548
498
  """Rescale data in place."""
549
499
  self.array = rescale_image(
550
500
  self.array.copy(),
@@ -552,6 +502,7 @@ class ImageData:
552
502
  out_range=out_range,
553
503
  out_dtype=out_dtype,
554
504
  )
505
+ return self
555
506
 
556
507
  def apply_colormap(self, colormap: ColorMapType) -> "ImageData":
557
508
  """Apply colormap to the image data."""
@@ -570,7 +521,7 @@ class ImageData:
570
521
  metadata=self.metadata,
571
522
  )
572
523
 
573
- def apply_color_formula(self, color_formula: Optional[str]):
524
+ def apply_color_formula(self, color_formula: Optional[str]) -> Self:
574
525
  """Apply color-operations formula in place."""
575
526
  out = self.array.data.copy()
576
527
  out[out < 0] = 0
@@ -581,6 +532,7 @@ class ImageData:
581
532
  data = numpy.ma.MaskedArray(out)
582
533
  data.mask = self.array.mask
583
534
  self.array = data
535
+ return self
584
536
 
585
537
  def apply_expression(self, expression: str) -> "ImageData":
586
538
  """Apply expression to the image data."""
@@ -796,9 +748,8 @@ class ImageData:
796
748
  """Post-process image data.
797
749
 
798
750
  Args:
799
- in_range (tuple): input min/max bounds value to rescale from.
800
- out_dtype (str, optional): output datatype after rescaling. Defaults to `uint8`.
801
- color_formula (str, optional): color-ops formula (see: https://github.com/vincentsarago/color-ops).
751
+ shape (Dict): GeoJSON geometry or Feature.
752
+ shape_crs (rasterio.crs.CRS): Coordinates Reference System of shape.
802
753
  cover_scale (int, optional):
803
754
  Scale used when generating coverage estimates of each
804
755
  raster cell by vector feature. Coverage is generated by
rio_tiler/reader.py CHANGED
@@ -23,6 +23,7 @@ from rio_tiler.types import BBox, Indexes, NoData, RIOResampling, WarpResampling
23
23
  from rio_tiler.utils import _requested_tile_aligned_with_internal_tile as is_aligned
24
24
  from rio_tiler.utils import (
25
25
  _round_window,
26
+ cast_to_sequence,
26
27
  get_vrt_transform,
27
28
  has_alpha_band,
28
29
  non_alpha_indexes,
@@ -120,8 +121,7 @@ def read(
120
121
  ImageData
121
122
 
122
123
  """
123
- if isinstance(indexes, int):
124
- indexes = (indexes,)
124
+ indexes = cast_to_sequence(indexes)
125
125
 
126
126
  if max_size and width and height:
127
127
  warnings.warn(
@@ -529,8 +529,7 @@ def point(
529
529
  PointData
530
530
 
531
531
  """
532
- if isinstance(indexes, int):
533
- indexes = (indexes,)
532
+ indexes = cast_to_sequence(indexes)
534
533
 
535
534
  with contextlib.ExitStack() as ctx:
536
535
  # Use WarpedVRT when User provided Nodata or VRT Option (cutline)
rio_tiler/types.py CHANGED
@@ -1,6 +1,6 @@
1
1
  """rio-tiler types."""
2
2
 
3
- from typing import Dict, Literal, Optional, Sequence, Tuple, TypedDict, Union
3
+ from typing import Any, Dict, Literal, Optional, Sequence, Tuple, TypedDict, Union
4
4
 
5
5
  import numpy
6
6
 
@@ -58,7 +58,8 @@ WarpResampling = Literal[
58
58
  class AssetInfo(TypedDict, total=False):
59
59
  """Asset Reader Options."""
60
60
 
61
- url: str
61
+ url: Any
62
+ media_type: str
62
63
  env: Optional[Dict]
63
64
  metadata: Optional[Dict]
64
65
  dataset_statistics: Optional[Sequence[Tuple[float, float]]]
rio_tiler/utils.py CHANGED
@@ -305,6 +305,7 @@ def get_vrt_transform(
305
305
  tuple: VRT transform (affine.Affine), width (int) and height (int)
306
306
 
307
307
  """
308
+ # 1. Get the Dataset Resolution in the output crs
308
309
  if src_dst.crs != dst_crs:
309
310
  src_width = src_dst.width
310
311
  src_height = src_dst.height
@@ -358,6 +359,7 @@ def get_vrt_transform(
358
359
  else:
359
360
  dst_transform = src_dst.transform
360
361
 
362
+ # 2. adjust output bounds if needed
361
363
  # If bounds window is aligned with the dataset internal tile we align the bounds with the pixels.
362
364
  # This is to limit the number of internal block fetched.
363
365
  if _requested_tile_aligned_with_internal_tile(src_dst, bounds, bounds_crs=dst_crs):
@@ -384,6 +386,7 @@ def get_vrt_transform(
384
386
 
385
387
  w, s, e, n = bounds
386
388
 
389
+ # 3. Calculate the VRT Height/Width
387
390
  # When no output size (resolution) - Use Dataset Resolution
388
391
  # NOTE: When we don't `fix` the output width/height, we're using the reprojected dataset resolution
389
392
  # to calculate what is the size/transform of the VRT
@@ -397,18 +400,13 @@ def get_vrt_transform(
397
400
  output_transform = from_bounds(w, s, e, n, width, height)
398
401
 
399
402
  # NOTE: Here we check if the Output Resolution is higher thant the dataset resolution (OverZoom)
400
- # When not overzooming we don't want to use the output Width/Height to calculate the transform
403
+ # When not over-zooming we don't want to use the output Width/Height to calculate the transform
401
404
  # See issues https://github.com/cogeotiff/rio-tiler/pull/648
402
- w_res = (
403
- output_transform.a
404
- if abs(output_transform.a) < abs(dst_transform.a)
405
- else dst_transform.a
406
- )
407
- h_res = (
408
- output_transform.e
409
- if abs(output_transform.e) < abs(dst_transform.e)
410
- else dst_transform.e
411
- )
405
+ if abs(dst_transform.a) > abs(output_transform.a):
406
+ w_res = output_transform.a
407
+
408
+ if abs(dst_transform.e) > abs(output_transform.e):
409
+ h_res = output_transform.e
412
410
 
413
411
  vrt_width = max(1, round((e - w) / w_res))
414
412
  vrt_height = max(1, round((s - n) / h_res))
@@ -477,7 +475,7 @@ def _requested_tile_aligned_with_internal_tile(
477
475
  bounds_crs: CRS = WEB_MERCATOR_CRS,
478
476
  ) -> bool:
479
477
  """Check if tile is aligned with internal tiles."""
480
- if not src_dst.is_tiled:
478
+ if src_dst.block_shapes and src_dst.block_shapes[0][1] == src_dst.width:
481
479
  return False
482
480
 
483
481
  if src_dst.crs != bounds_crs:
@@ -783,3 +781,29 @@ def _validate_shape_input(shape: Dict) -> Dict:
783
781
  raise RioTilerError("Invalid geometry")
784
782
 
785
783
  return shape
784
+
785
+
786
+ def cast_to_sequence(val: Optional[Any] = None) -> Sequence:
787
+ """Cast input to sequence if not Tuple of List."""
788
+ if val is not None and not isinstance(val, (list, tuple)):
789
+ val = (val,)
790
+
791
+ return val
792
+
793
+
794
+ def CRS_to_uri(crs: CRS) -> Optional[str]:
795
+ """Convert CRS to URI.
796
+
797
+ Code adapted from https://github.com/developmentseed/morecantile/blob/1829fe12408e4a1feee7493308f3f02257ef4caf/morecantile/models.py#L148-L161
798
+ """
799
+ # attempt to grab the authority, version, and code from the CRS
800
+ if authority_code := crs.to_authority(confidence_threshold=70):
801
+ version = "0"
802
+ authority, code = authority_code
803
+ # if we have a version number in the authority, split it out
804
+ if "_" in authority:
805
+ authority, version = authority.split("_")
806
+
807
+ return f"http://www.opengis.net/def/crs/{authority}/{version}/{code}"
808
+
809
+ return None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: rio-tiler
3
- Version: 6.8.0
3
+ Version: 7.0.0
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/
@@ -55,12 +55,13 @@ Requires-Dist: cachetools
55
55
  Requires-Dist: color-operations
56
56
  Requires-Dist: httpx
57
57
  Requires-Dist: importlib-resources>=1.1.0; python_version < '3.9'
58
- Requires-Dist: morecantile<6.0,>=5.0
58
+ Requires-Dist: morecantile<7.0,>=5.0
59
59
  Requires-Dist: numexpr
60
60
  Requires-Dist: numpy
61
61
  Requires-Dist: pydantic~=2.0
62
62
  Requires-Dist: pystac>=0.5.4
63
63
  Requires-Dist: rasterio>=1.3.0
64
+ Requires-Dist: typing-extensions
64
65
  Provides-Extra: benchmark
65
66
  Requires-Dist: pytest; extra == 'benchmark'
66
67
  Requires-Dist: pytest-benchmark; extra == 'benchmark'
@@ -68,15 +69,17 @@ Provides-Extra: dev
68
69
  Requires-Dist: bump-my-version; extra == 'dev'
69
70
  Requires-Dist: pre-commit; extra == 'dev'
70
71
  Provides-Extra: docs
71
- Requires-Dist: mkdocs; extra == 'docs'
72
- Requires-Dist: mkdocs-jupyter; extra == 'docs'
73
- Requires-Dist: mkdocs-material; extra == 'docs'
74
- Requires-Dist: nbconvert; extra == 'docs'
72
+ Requires-Dist: griffe-inherited-docstrings>=1.0.0; extra == 'docs'
73
+ Requires-Dist: mkdocs-jupyter>=0.24.5; extra == 'docs'
74
+ Requires-Dist: mkdocs-material[imaging]>=9.5; extra == 'docs'
75
+ Requires-Dist: mkdocs>=1.4.3; extra == 'docs'
76
+ Requires-Dist: mkdocstrings[python]>=0.25.1; extra == 'docs'
75
77
  Requires-Dist: pygments; extra == 'docs'
76
78
  Provides-Extra: s3
77
79
  Requires-Dist: boto3; extra == 's3'
78
80
  Provides-Extra: test
79
81
  Requires-Dist: boto3; extra == 'test'
82
+ Requires-Dist: morecantile<7.0,>=6.0; extra == 'test'
80
83
  Requires-Dist: pytest; extra == 'test'
81
84
  Requires-Dist: pytest-cov; extra == 'test'
82
85
  Requires-Dist: rioxarray; extra == 'test'
@@ -260,8 +263,8 @@ At the low level, `rio-tiler` is *just* a wrapper around the [rasterio](https://
260
263
  You can install `rio-tiler` using pip
261
264
 
262
265
  ```bash
263
- $ pip install -U pip
264
- $ pip install -U rio-tiler
266
+ $ python -m pip install -U pip
267
+ $ python -m pip install -U rio-tiler
265
268
  ```
266
269
 
267
270
  or install from source:
@@ -269,8 +272,8 @@ or install from source:
269
272
  ```bash
270
273
  $ git clone https://github.com/cogeotiff/rio-tiler.git
271
274
  $ cd rio-tiler
272
- $ pip install -U pip
273
- $ pip install -e .
275
+ $ python -m pip install -U pip
276
+ $ python -m pip install -e .
274
277
  ```
275
278
 
276
279
  ## Plugins
@@ -1,16 +1,16 @@
1
- rio_tiler/__init__.py,sha256=WefaHHGITJ0r36AfTpJwoVUhiaJ44_3n4Pc0yGes0so,192
2
- rio_tiler/colormap.py,sha256=uXeK2p-h6fMqTaCogHWkDP6AqJDtKCpCHa5ylRdEnj0,9775
1
+ rio_tiler/__init__.py,sha256=aPeEGMQpVX93krXti2rZ8cQmXMVjDgepeUDvqG9eUgg,192
2
+ rio_tiler/colormap.py,sha256=xx43D4A5w3VgYB2CvuKvYFmAsYSuZLWbIfextsVYDB4,11085
3
3
  rio_tiler/constants.py,sha256=55i-7JZDupTXZdLgxL03KsgM4lAzuGuIVP1zZKktzp0,426
4
4
  rio_tiler/errors.py,sha256=4I3i0e1FtkLX5sIX6dfhUMUj3SWWoKqkjCkSG7k5i2M,1901
5
5
  rio_tiler/expression.py,sha256=EVHWgjMqIn4TTPfqT_HV1RWCQlxqOj3OtEr1iUDiFHE,2282
6
6
  rio_tiler/logger.py,sha256=RR8lnW3uVXkFkPa3nNJS_tTndmdiNNDVXpCDGDxGf0A,81
7
- rio_tiler/models.py,sha256=slIxi1xjIdJ0fr1UmOxZzD3KGkJ3DADsC9DKEO5CjJM,28173
7
+ rio_tiler/models.py,sha256=Y1IohWm4KtpdS7qngOe7nuijqcLFr6sutEtw5FGiNN0,26442
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=JgaLEjNp35-pEVSQFwUnSD3MmuQYl3SXzJcNKGLPeV8,22743
10
+ rio_tiler/reader.py,sha256=FiDQQU_v8mDk2JTxBpLmsTqaCQFOsjOw0LocasLeXjk,22721
11
11
  rio_tiler/tasks.py,sha256=tiQo24rZHBVxids40QkNInuMzDFEei08zYW3I_pkSVE,3157
12
- rio_tiler/types.py,sha256=508_E5R-nKrAo8TWB-6h7pF6SYwNM8kJPiHjQw-k-tA,1443
13
- rio_tiler/utils.py,sha256=3TBlnQVFA-2igDpMrwxhjN_Quvc8t21xv7sQkM7e6dQ,27748
12
+ rio_tiler/types.py,sha256=HbgECLqI4KoYVdMZv2pHSME4aiVvWea1ircqP9jQQCA,1468
13
+ rio_tiler/utils.py,sha256=FyOP7sbTZnWVB8fPOs19cJlABL15oJ66tce5pIpNO3c,28713
14
14
  rio_tiler/cmap_data/__init__.py,sha256=8FtVmfpTjXlvhxQ5QesN0UC1m_B3MuF3LbGbhMC5Rw4,1039
15
15
  rio_tiler/cmap_data/accent.npy,sha256=Qde1ldOoXghe4L05v1QbVvnMA1ldwNjKWPf5xCBbmI4,1152
16
16
  rio_tiler/cmap_data/accent_r.npy,sha256=ba-GWSMSPRAcm9CGzlXJeNG4ABbBHDCV602hAWV2idc,1152
@@ -224,17 +224,17 @@ rio_tiler/cmap_data/ylorbr_r.npy,sha256=LjRoulX86uju7woCI_m4zzmAJMDpg-ky7p4f9vUk
224
224
  rio_tiler/cmap_data/ylorrd.npy,sha256=9ImXljw40oe60w8uV4EMDPY4aFFVkGbyCBi6SlTX83w,1152
225
225
  rio_tiler/cmap_data/ylorrd_r.npy,sha256=K5uiHNHbLxV5SizyT09cSVAxldE-BW5GpOXxUp7UsTE,1152
226
226
  rio_tiler/io/__init__.py,sha256=_L4iILm6vSiJ14GEDDOvkuUHRtbWC9oqx6Bu8PxHhvA,270
227
- rio_tiler/io/base.py,sha256=5VW27CGXkYN45pTegacCZpl0tv9liAFLeWOSchOeFZg,45651
228
- rio_tiler/io/rasterio.py,sha256=J0DyUq2lBrsmaey2411abBZw5Kp8V4PD2Y0dlTRU7S0,32038
229
- rio_tiler/io/stac.py,sha256=yzbHnlzVdMft9PZmS0Pi79aZo_lFgerguMQS_O91ul4,11722
230
- rio_tiler/io/xarray.py,sha256=B6W03YJIkgdsGR-2_GcYt3q4vRCYJ728IbAhQoVWPX4,18514
227
+ rio_tiler/io/base.py,sha256=nyaAtfodM-5fXd1WsGG5Qh544PNv9Hy4FLQ_nPj8hw8,52154
228
+ rio_tiler/io/rasterio.py,sha256=9GtbUPialsFMnxVUKrJ8ZItC3sWS8zddrO8aiPG07AU,29011
229
+ rio_tiler/io/stac.py,sha256=b7RASmoJHGnHvn3LBNaBlMzigZr_qNn1efczxD-Zplc,12629
230
+ rio_tiler/io/xarray.py,sha256=TgQ34hGEpsZv_j3hivzl5decPisQvseFN8HS9zuOBQo,13997
231
231
  rio_tiler/mosaic/__init__.py,sha256=Yj6CKpnFl8PJhLSp-a55wo33hKZ8-6OOBJtWA1HZVy8,118
232
232
  rio_tiler/mosaic/reader.py,sha256=_YBwTJwHvXOzKwpNpOmmh0F4yicyxgWo9vHyof3w_Do,9686
233
233
  rio_tiler/mosaic/methods/__init__.py,sha256=tgkXM9skaTLXIm5QFoheOEznQXM97KGflcAWHfkrt1g,612
234
234
  rio_tiler/mosaic/methods/base.py,sha256=9YZJWVRwH5Fk9KO9q5CW52Q8Mf60tAJ21oM4ixEDXBo,1424
235
235
  rio_tiler/mosaic/methods/defaults.py,sha256=z34lna2wGXnAPwculjk_6hDrloqS8wzer68FFoIo7pg,6744
236
- rio_tiler-6.8.0.dist-info/METADATA,sha256=-8MnnRnyMujOnmYzecic3Ik7eYU-Ch61pM44GiU7_ZI,11967
237
- rio_tiler-6.8.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
238
- rio_tiler-6.8.0.dist-info/licenses/AUTHORS.txt,sha256=FCVd4Tjg-8syl0ZugCunpXER8X2-XonW2ZfllyTnRvE,158
239
- rio_tiler-6.8.0.dist-info/licenses/LICENSE,sha256=vq8Tt4KoYQT9JxAjQ4yXMmmhFYRTsBRgrOj-ao-bC5o,1517
240
- rio_tiler-6.8.0.dist-info/RECORD,,
236
+ rio_tiler-7.0.0.dist-info/METADATA,sha256=cnnDZJzFmoSypX6FdXK8wzg95s7ZbqDDoR9bCLCMd3s,12209
237
+ rio_tiler-7.0.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
238
+ rio_tiler-7.0.0.dist-info/licenses/AUTHORS.txt,sha256=FCVd4Tjg-8syl0ZugCunpXER8X2-XonW2ZfllyTnRvE,158
239
+ rio_tiler-7.0.0.dist-info/licenses/LICENSE,sha256=vq8Tt4KoYQT9JxAjQ4yXMmmhFYRTsBRgrOj-ao-bC5o,1517
240
+ rio_tiler-7.0.0.dist-info/RECORD,,