mapchete-eo 2026.2.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.
Files changed (89) hide show
  1. mapchete_eo/__init__.py +1 -0
  2. mapchete_eo/array/__init__.py +0 -0
  3. mapchete_eo/array/buffer.py +16 -0
  4. mapchete_eo/array/color.py +29 -0
  5. mapchete_eo/array/convert.py +163 -0
  6. mapchete_eo/base.py +653 -0
  7. mapchete_eo/blacklist.txt +175 -0
  8. mapchete_eo/cli/__init__.py +30 -0
  9. mapchete_eo/cli/bounds.py +22 -0
  10. mapchete_eo/cli/options_arguments.py +227 -0
  11. mapchete_eo/cli/s2_brdf.py +77 -0
  12. mapchete_eo/cli/s2_cat_results.py +130 -0
  13. mapchete_eo/cli/s2_find_broken_products.py +77 -0
  14. mapchete_eo/cli/s2_jp2_static_catalog.py +166 -0
  15. mapchete_eo/cli/s2_mask.py +71 -0
  16. mapchete_eo/cli/s2_mgrs.py +45 -0
  17. mapchete_eo/cli/s2_rgb.py +114 -0
  18. mapchete_eo/cli/s2_verify.py +129 -0
  19. mapchete_eo/cli/static_catalog.py +82 -0
  20. mapchete_eo/eostac.py +30 -0
  21. mapchete_eo/exceptions.py +87 -0
  22. mapchete_eo/image_operations/__init__.py +12 -0
  23. mapchete_eo/image_operations/blend_functions.py +579 -0
  24. mapchete_eo/image_operations/color_correction.py +136 -0
  25. mapchete_eo/image_operations/compositing.py +266 -0
  26. mapchete_eo/image_operations/dtype_scale.py +43 -0
  27. mapchete_eo/image_operations/fillnodata.py +130 -0
  28. mapchete_eo/image_operations/filters.py +319 -0
  29. mapchete_eo/image_operations/linear_normalization.py +81 -0
  30. mapchete_eo/image_operations/sigmoidal.py +114 -0
  31. mapchete_eo/io/__init__.py +37 -0
  32. mapchete_eo/io/assets.py +496 -0
  33. mapchete_eo/io/items.py +162 -0
  34. mapchete_eo/io/levelled_cubes.py +259 -0
  35. mapchete_eo/io/path.py +155 -0
  36. mapchete_eo/io/products.py +423 -0
  37. mapchete_eo/io/profiles.py +45 -0
  38. mapchete_eo/platforms/sentinel2/__init__.py +17 -0
  39. mapchete_eo/platforms/sentinel2/_mapper_registry.py +89 -0
  40. mapchete_eo/platforms/sentinel2/bandpass_adjustment.py +104 -0
  41. mapchete_eo/platforms/sentinel2/brdf/__init__.py +8 -0
  42. mapchete_eo/platforms/sentinel2/brdf/config.py +32 -0
  43. mapchete_eo/platforms/sentinel2/brdf/correction.py +260 -0
  44. mapchete_eo/platforms/sentinel2/brdf/hls.py +251 -0
  45. mapchete_eo/platforms/sentinel2/brdf/models.py +44 -0
  46. mapchete_eo/platforms/sentinel2/brdf/protocols.py +27 -0
  47. mapchete_eo/platforms/sentinel2/brdf/ross_thick.py +136 -0
  48. mapchete_eo/platforms/sentinel2/brdf/sun_angle_arrays.py +76 -0
  49. mapchete_eo/platforms/sentinel2/config.py +241 -0
  50. mapchete_eo/platforms/sentinel2/driver.py +43 -0
  51. mapchete_eo/platforms/sentinel2/masks.py +329 -0
  52. mapchete_eo/platforms/sentinel2/metadata_parser/__init__.py +6 -0
  53. mapchete_eo/platforms/sentinel2/metadata_parser/base.py +56 -0
  54. mapchete_eo/platforms/sentinel2/metadata_parser/default_path_mapper.py +135 -0
  55. mapchete_eo/platforms/sentinel2/metadata_parser/models.py +78 -0
  56. mapchete_eo/platforms/sentinel2/metadata_parser/s2metadata.py +639 -0
  57. mapchete_eo/platforms/sentinel2/preconfigured_sources/__init__.py +57 -0
  58. mapchete_eo/platforms/sentinel2/preconfigured_sources/guessers.py +108 -0
  59. mapchete_eo/platforms/sentinel2/preconfigured_sources/item_mappers.py +171 -0
  60. mapchete_eo/platforms/sentinel2/preconfigured_sources/metadata_xml_mappers.py +217 -0
  61. mapchete_eo/platforms/sentinel2/preprocessing_tasks.py +50 -0
  62. mapchete_eo/platforms/sentinel2/processing_baseline.py +163 -0
  63. mapchete_eo/platforms/sentinel2/product.py +747 -0
  64. mapchete_eo/platforms/sentinel2/source.py +114 -0
  65. mapchete_eo/platforms/sentinel2/types.py +114 -0
  66. mapchete_eo/processes/__init__.py +0 -0
  67. mapchete_eo/processes/config.py +51 -0
  68. mapchete_eo/processes/dtype_scale.py +112 -0
  69. mapchete_eo/processes/eo_to_xarray.py +19 -0
  70. mapchete_eo/processes/merge_rasters.py +239 -0
  71. mapchete_eo/product.py +323 -0
  72. mapchete_eo/protocols.py +61 -0
  73. mapchete_eo/search/__init__.py +14 -0
  74. mapchete_eo/search/base.py +285 -0
  75. mapchete_eo/search/config.py +113 -0
  76. mapchete_eo/search/s2_mgrs.py +313 -0
  77. mapchete_eo/search/stac_search.py +278 -0
  78. mapchete_eo/search/stac_static.py +197 -0
  79. mapchete_eo/search/utm_search.py +251 -0
  80. mapchete_eo/settings.py +25 -0
  81. mapchete_eo/sort.py +60 -0
  82. mapchete_eo/source.py +109 -0
  83. mapchete_eo/time.py +62 -0
  84. mapchete_eo/types.py +76 -0
  85. mapchete_eo-2026.2.0.dist-info/METADATA +91 -0
  86. mapchete_eo-2026.2.0.dist-info/RECORD +89 -0
  87. mapchete_eo-2026.2.0.dist-info/WHEEL +4 -0
  88. mapchete_eo-2026.2.0.dist-info/entry_points.txt +11 -0
  89. mapchete_eo-2026.2.0.dist-info/licenses/LICENSE +21 -0
mapchete_eo/time.py ADDED
@@ -0,0 +1,62 @@
1
+ import datetime
2
+ from typing import List, Tuple, Union
3
+
4
+ import dateutil.parser
5
+
6
+ from mapchete_eo.types import DateTimeLike
7
+
8
+ _time = {"min": datetime.datetime.min.time(), "max": datetime.datetime.max.time()}
9
+
10
+
11
+ def to_datetime(t: DateTimeLike, append_time="min") -> datetime.datetime:
12
+ """
13
+ Convert input into datetime object.
14
+ """
15
+ if isinstance(t, datetime.datetime):
16
+ return t
17
+ elif isinstance(t, datetime.date):
18
+ return datetime.datetime.combine(t, _time[append_time])
19
+ else:
20
+ return dateutil.parser.parse(t)
21
+
22
+
23
+ def time_ranges_intersect(
24
+ t1: Tuple[DateTimeLike, DateTimeLike],
25
+ t2: Tuple[DateTimeLike, DateTimeLike],
26
+ ) -> bool:
27
+ """
28
+ Check if two time ranges intersect.
29
+ """
30
+ t1_start = to_datetime(t1[0], "min").replace(tzinfo=None)
31
+ t1_end = to_datetime(t1[1], "max").replace(tzinfo=None)
32
+ t2_start = to_datetime(t2[0], "min").replace(tzinfo=None)
33
+ t2_end = to_datetime(t2[1], "max").replace(tzinfo=None)
34
+ return (t1_start <= t2_start <= t1_end) or (t2_start <= t1_start <= t2_end)
35
+
36
+
37
+ def timedelta(date: DateTimeLike, target: DateTimeLike, seconds: bool = True):
38
+ """
39
+ Return difference between two time stamps in seconds or days.
40
+ """
41
+ delta = to_datetime(date) - to_datetime(target)
42
+ if seconds:
43
+ return abs(delta.total_seconds())
44
+ else:
45
+ return abs(delta.days)
46
+
47
+
48
+ def day_range(
49
+ start_date: Union[datetime.datetime, datetime.date],
50
+ end_date: Union[datetime.datetime, datetime.date],
51
+ ) -> List[datetime.date]:
52
+ """
53
+ Return a list of dates between start and end.
54
+ """
55
+ start_date = (
56
+ start_date.date() if isinstance(start_date, datetime.datetime) else start_date
57
+ )
58
+ end_date = end_date.date() if isinstance(end_date, datetime.datetime) else end_date
59
+ return [
60
+ start_date + datetime.timedelta(n)
61
+ for n in range(int((end_date - start_date).days) + 1)
62
+ ]
mapchete_eo/types.py ADDED
@@ -0,0 +1,76 @@
1
+ from __future__ import annotations
2
+
3
+ import datetime
4
+ from dataclasses import dataclass, field
5
+ from enum import Enum
6
+ from typing import List, Optional, Union
7
+
8
+ from pydantic import PositiveInt
9
+ from pystac import Asset
10
+
11
+
12
+ class GeodataType(str, Enum):
13
+ """
14
+ Type of geodata (vector or raster).
15
+ """
16
+
17
+
18
+ class MergeMethod(str, Enum):
19
+ """
20
+ Available methods to merge assets from multiple items.
21
+
22
+ first: first pixel value from the list is returned
23
+ average: average value from the list is returned
24
+ all: any consecutive value is added and all collected are returned
25
+ """
26
+
27
+ first = "first"
28
+ average = "average"
29
+ all = "all"
30
+
31
+
32
+ DateLike = Union[str, datetime.date]
33
+ DateTimeLike = Union[DateLike, datetime.datetime]
34
+
35
+
36
+ @dataclass
37
+ class BandLocation:
38
+ """A class representing the location of a specific band."""
39
+
40
+ asset_name: str
41
+ band_index: PositiveInt = 1
42
+ nodataval: float = 0
43
+ roles: List[str] = field(default_factory=list)
44
+ eo_band_name: Optional[str] = None
45
+
46
+ def from_asset(
47
+ asset: Asset,
48
+ name: str,
49
+ band_index: PositiveInt,
50
+ ) -> BandLocation:
51
+ """
52
+ Extract band location info from STAC Asset.
53
+ """
54
+ try:
55
+ bands_info = asset.extra_fields.get(
56
+ "eo:bands", asset.extra_fields.get("bands", [])
57
+ )
58
+ band_info = bands_info[band_index - 1]
59
+ eo_band_name = band_info.get("eo:common_name", band_info.get("name"))
60
+ except KeyError:
61
+ eo_band_name = None
62
+ return BandLocation(
63
+ asset_name=name,
64
+ band_index=band_index,
65
+ nodataval=asset.extra_fields.get("nodata", 0),
66
+ roles=asset.roles or [],
67
+ eo_band_name=eo_band_name,
68
+ )
69
+
70
+
71
+ @dataclass
72
+ class TimeRange:
73
+ """A class handling time ranges."""
74
+
75
+ start: DateTimeLike
76
+ end: DateTimeLike
@@ -0,0 +1,91 @@
1
+ Metadata-Version: 2.4
2
+ Name: mapchete-eo
3
+ Version: 2026.2.0
4
+ Summary: mapchete EO data reader
5
+ Project-URL: Homepage, https://gitlab.eox.at/maps/mapchete_eo
6
+ Author-email: Joachim Ungar <joachim.ungar@eox.at>, Petr Sevcik <petr.sevcik@eox.at>
7
+ License-Expression: MIT
8
+ License-File: LICENSE
9
+ Classifier: Development Status :: 3 - Alpha
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Programming Language :: Python :: 3.10
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Topic :: Scientific/Engineering :: GIS
17
+ Requires-Python: >=3.10
18
+ Requires-Dist: click
19
+ Requires-Dist: croniter
20
+ Requires-Dist: lxml
21
+ Requires-Dist: mapchete[complete]>=2025.10.0
22
+ Requires-Dist: opencv-python-headless
23
+ Requires-Dist: pillow
24
+ Requires-Dist: pydantic
25
+ Requires-Dist: pygeofilter
26
+ Requires-Dist: pystac-client>=0.7.5
27
+ Requires-Dist: pystac[urllib3]>=1.12.2
28
+ Requires-Dist: retry
29
+ Requires-Dist: rtree
30
+ Requires-Dist: scipy
31
+ Requires-Dist: tqdm
32
+ Requires-Dist: xarray
33
+ Provides-Extra: docs
34
+ Requires-Dist: myst-parser; extra == 'docs'
35
+ Requires-Dist: sphinx-rtd-theme>=3.0.2; extra == 'docs'
36
+ Requires-Dist: sphinx>=8.0; extra == 'docs'
37
+ Provides-Extra: test
38
+ Requires-Dist: pytest; extra == 'test'
39
+ Requires-Dist: pytest-coverage; extra == 'test'
40
+ Requires-Dist: pytest-lazy-fixtures; extra == 'test'
41
+ Description-Content-Type: text/x-rst
42
+
43
+ .. image:: logo/mapchete_eo.svg
44
+
45
+ Earth Observation–specific driver extensions for `Mapchete <https://github.com/ungarj/mapchete>`_.
46
+
47
+ .. image:: https://img.shields.io/pypi/v/mapchete-eo.svg
48
+ :target: https://pypi.org/project/mapchete-eo/
49
+
50
+ .. image:: https://img.shields.io/conda/v/conda-forge/mapchete-eo
51
+ :target: https://anaconda.org/conda-forge/mapchete-eo
52
+
53
+ .. image:: https://img.shields.io/pypi/l/mapchete-eo.svg
54
+ :target: https://github.com/mapchete/mapchete-eo/blob/main/LICENSE
55
+
56
+ .. image:: https://img.shields.io/github/actions/workflow/status/mapchete/mapchete-eo/python-package.yml?label=tests
57
+ :target: https://github.com/mapchete/mapchete-eo/actions
58
+
59
+ .. image:: https://codecov.io/gh/mapchete/mapchete-eo/graph/badge.svg?token=VD1YOF3QA2
60
+ :target: https://codecov.io/gh/mapchete/mapchete-eo
61
+
62
+ .. image:: https://img.shields.io/github/repo-size/mapchete/mapchete-eo
63
+ :target: https://github.com/mapchete/mapchete-eo
64
+
65
+ This package provides custom input and output drivers tailored for common EO data formats and workflows, enabling seamless integration of satellite data sources into the Mapchete tile-based geoprocessing framework.
66
+
67
+ What is this?
68
+ -------------
69
+
70
+ **mapchete-eo** extends Mapchete by adding support for:
71
+
72
+ - Custom **input drivers** to read EO datasets, from STAC search or metadata (catalogs, collections, items)
73
+ - Metadata extraction and band management for optical satellite products
74
+ - Reading data from sources via **STAC assets**
75
+
76
+ This package is intended for advanced users or developers who are working with remote sensing workflows using Mapchete.
77
+
78
+ Installation
79
+ ------------
80
+
81
+ You must have ``mapchete`` with ``s3`` installed, so let's grab the ``complete`` dependencies in this case for convenience:
82
+
83
+ .. code-block:: bash
84
+
85
+ uv pip install mapchete[complete]
86
+
87
+ Then install mapchete-eo:
88
+
89
+ .. code-block:: bash
90
+
91
+ uv pip install mapchete-eo
@@ -0,0 +1,89 @@
1
+ mapchete_eo/__init__.py,sha256=DSGNdy9qGUhTw8aE44dhBtocg2IakgLYXzbMF0Bdml8,25
2
+ mapchete_eo/base.py,sha256=EPPbR4KdGpj9k6S1lwsxB6mSathxdXmxiPzhcfBmdiE,23201
3
+ mapchete_eo/blacklist.txt,sha256=6KhBY0jNjXgRpKRvKJoOTswvNUoP56IrIcNeCYnd2qo,17471
4
+ mapchete_eo/eostac.py,sha256=M-EL8y8pPw8H9hb85FPxSl-1FL_kIYOzxsTIhkrbBZY,570
5
+ mapchete_eo/exceptions.py,sha256=ul7_9o6_SfJXQPsDOQqRBhh09xv2t4AwHl6YJ7yWN5s,2150
6
+ mapchete_eo/product.py,sha256=CSYyWZsnBZYZtN7LmmXDOrONHRBYz5jLJS_aLfanJ1Y,10813
7
+ mapchete_eo/protocols.py,sha256=KUbteFTOCSYEiSUJZj2MeckmrJHfJFrXCvZE70tByP8,1617
8
+ mapchete_eo/settings.py,sha256=lbwYoqiQXBRexxL7Y524Ry0dk4vBKpjN1u09UOP1_CM,734
9
+ mapchete_eo/sort.py,sha256=ZGpGMqavC_vA0mcpwwrYGZRW9yH0nrGniQyaugoTzMg,1670
10
+ mapchete_eo/source.py,sha256=X0h0VqCXZFYT-27kI8klrWFhm_nJIM87qsA8OCvUxQc,4168
11
+ mapchete_eo/time.py,sha256=L1nNw67AEOdhaiQOJX1LcjUVTiI8stJW6pP7HGqb8-g,1914
12
+ mapchete_eo/types.py,sha256=QAh_LlfjGvfrC-7F-alm33wrzPfvPrlnV-TNYLZa7Kk,1884
13
+ mapchete_eo/array/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
+ mapchete_eo/array/buffer.py,sha256=GeeM7RVQ-Z_SKlkaeztWUrxEsa_yck-nXwXRIM3w0_I,483
15
+ mapchete_eo/array/color.py,sha256=ArJ3-0qjJJGAlRQodLios6JwD0uHLSRRb9BwfB31v-U,810
16
+ mapchete_eo/array/convert.py,sha256=oimklMfyS2XxQLd73zQ2cr9aE-39z1UIt6ry_2ZQI10,5390
17
+ mapchete_eo/cli/__init__.py,sha256=SRRilPKUtwsUCi1GdMNPxjIrCM-XyYM2hK1T9vvKUI8,946
18
+ mapchete_eo/cli/bounds.py,sha256=QcOXOXMcnd8ecwiCFVWukTLUFIkpj9SbB3ot-GA4heA,551
19
+ mapchete_eo/cli/options_arguments.py,sha256=6VqiwswEKpr5bS0w1ugRSf2z7rMKA-wiEFZdcmri94c,6916
20
+ mapchete_eo/cli/s2_brdf.py,sha256=siUGau8HzXNyQZkDUx1zAeaLcCfonJG5kWHSCvwJOhA,2729
21
+ mapchete_eo/cli/s2_cat_results.py,sha256=tR5Qm6kiCAcDO5V9AkYhoUbHyEx7OItSf6IqtIjhRLg,4648
22
+ mapchete_eo/cli/s2_find_broken_products.py,sha256=4nhtMLkys75enPV5lETw4iOn3CxxNnc-sMyhk_kaKx0,2946
23
+ mapchete_eo/cli/s2_jp2_static_catalog.py,sha256=_j_rfFnYHtE8k79TS9KFuX_IxOx_e-r7u6beoLYyxPY,5911
24
+ mapchete_eo/cli/s2_mask.py,sha256=1K5BiyTKyClGBdh6-Vh_ORTcgJOr6R5JfXtpEpDEQvk,2243
25
+ mapchete_eo/cli/s2_mgrs.py,sha256=EJxbrg4I8IttWIcLUEmmqkjsTUbVLufgrkDVrRbbkYE,1276
26
+ mapchete_eo/cli/s2_rgb.py,sha256=nzK5m4s0m2VOXgtit0uUOOhNJ14wquikWmbEQON5WJw,3747
27
+ mapchete_eo/cli/s2_verify.py,sha256=atfJA5luHZjDSqiM2udaufmnQ2B4uW2Tur_OgtYLa2g,4080
28
+ mapchete_eo/cli/static_catalog.py,sha256=O7oCJB6mxWwnEMowPBo6UMtWOu52mSNUBB9tpSw91a4,3005
29
+ mapchete_eo/image_operations/__init__.py,sha256=c36Vs53mT5UQR9Iwd2Ln_vnT4K_Ni8g-K7J9Fl6UsJo,432
30
+ mapchete_eo/image_operations/blend_functions.py,sha256=YaKLOEapMbsUR-_mkBatXwPcmim8GKpIAVua_GOdaHs,24131
31
+ mapchete_eo/image_operations/color_correction.py,sha256=vMXxcdyH3qOJDSKcXGU3FgXWIcgQxMy-QVe2fGQTbdk,4447
32
+ mapchete_eo/image_operations/compositing.py,sha256=WJZ8vpFE0AT2s6cbKNdVCpARs5yHSzddQLNPtYW_uTQ,8826
33
+ mapchete_eo/image_operations/dtype_scale.py,sha256=_CCdTBkMLDkZdjV_PsVEkqLWT6jWuTJPeMzCcRwBOns,1243
34
+ mapchete_eo/image_operations/fillnodata.py,sha256=Xdd-kacfo7VKqX7HRP0hqnnvV5OwNqnHLRTW64QhG24,4856
35
+ mapchete_eo/image_operations/filters.py,sha256=sa_Igv0zMIANHLEALVi8mxohZMoSrdQc6XVjXDYwzy8,7201
36
+ mapchete_eo/image_operations/linear_normalization.py,sha256=-eQX3WLCUYWUv-um3s1u33rgjAwCz84Ht8gcPsMWtJE,2468
37
+ mapchete_eo/image_operations/sigmoidal.py,sha256=IKU8F89HhQJWGUVmIrnkuhqzn_ztlGrTf8xXZaVQWzU,3575
38
+ mapchete_eo/io/__init__.py,sha256=1-1g4cESZZREvyumEUABZhDwgVuSxtxdqbNlLuVKlow,950
39
+ mapchete_eo/io/assets.py,sha256=OVXLxrwCCUa6frP-xpm2CL30MR8eMABnwVD6EpN1cqU,17215
40
+ mapchete_eo/io/items.py,sha256=5H2xWAyLptDuuHh0rjY1MXReJomV0XBZgMr_rpdpYXU,6244
41
+ mapchete_eo/io/levelled_cubes.py,sha256=ZF7BLn9MHnJCCDjAoR9D7MNbHdusjJ9EACdM7rKNlyM,9018
42
+ mapchete_eo/io/path.py,sha256=fCjvowd9rGJbGio5Z-jDLxa49M2BVurYM9hJy53Im48,4831
43
+ mapchete_eo/io/products.py,sha256=2gELjHoEe4QH-Yjk82tA2nZUnBgfPbaGvk5GMHUWs4w,14642
44
+ mapchete_eo/io/profiles.py,sha256=l9YiXbKYs674xz6NLy5EAq3fBEvHTVSf_gopXD-CuSY,935
45
+ mapchete_eo/platforms/sentinel2/__init__.py,sha256=dviB4f5k45t_iOScTtnPc1kaWcohWKRq-8RaQzdggmU,401
46
+ mapchete_eo/platforms/sentinel2/_mapper_registry.py,sha256=3kuyW2g_xJoFUzZrAmhKn9ASHl4gBKuOlHsSZnpt21w,2746
47
+ mapchete_eo/platforms/sentinel2/bandpass_adjustment.py,sha256=DA0cQtjr8UH7r_kizAD-EmBsZvEtVVThf0hD0SCY7b4,3202
48
+ mapchete_eo/platforms/sentinel2/config.py,sha256=ifmzxDEuOFfoGAvbGyWyUWwF3Dw0NxEUEA3bWNByNR0,8482
49
+ mapchete_eo/platforms/sentinel2/driver.py,sha256=PX84IbgSe6id5IGhwk1MkRPzhWbYHF2OxY1RZRhiAgE,1218
50
+ mapchete_eo/platforms/sentinel2/masks.py,sha256=bklqeLri0s6vkkhfe6Y1u1Bpq7PX-Qc2ymLH7g_J6xc,11219
51
+ mapchete_eo/platforms/sentinel2/preprocessing_tasks.py,sha256=Eh5ajsNWNBXGDWNar-dY-oygZxzGMZ-wymlTRP4dHd4,1712
52
+ mapchete_eo/platforms/sentinel2/processing_baseline.py,sha256=uTE7zgzgi_W3NENLIAnJbWjyUD5_znpGa3cV-VoaEws,5179
53
+ mapchete_eo/platforms/sentinel2/product.py,sha256=yHpY7BqHoRwTEVmv3TXe1t17uTojv15Ytm6lGo1tr-w,28425
54
+ mapchete_eo/platforms/sentinel2/source.py,sha256=qSziCNTpInGy2LWIMiC3M4EP9G9_VtbCRNXB1XAO1P4,4269
55
+ mapchete_eo/platforms/sentinel2/types.py,sha256=EV7TleKZnCNuDlEMJ0UtJjDsvOUGbvh_pZToeOULQ18,2122
56
+ mapchete_eo/platforms/sentinel2/brdf/__init__.py,sha256=W7zAJZ5F5Xla7j4ua2opRANUbcD3jZbhTwhW5_cpOUI,242
57
+ mapchete_eo/platforms/sentinel2/brdf/config.py,sha256=v3WCEu4r-tEPQgWBEkYNAPLgCQobvYtQ2YiDeAdImMk,1133
58
+ mapchete_eo/platforms/sentinel2/brdf/correction.py,sha256=vi-BwAA6Cbayzk6WOuOESLhRkGLhiUAbVYfJUSfYhXA,8651
59
+ mapchete_eo/platforms/sentinel2/brdf/hls.py,sha256=pzrRTNfJhuqRLidLQvKJpSnaz816x7jUesXt_aRgFjc,8818
60
+ mapchete_eo/platforms/sentinel2/brdf/models.py,sha256=BBwGX1OLMRLncK1jD2reidaF82IKR4sjgNGHdTgBXaw,1446
61
+ mapchete_eo/platforms/sentinel2/brdf/protocols.py,sha256=fxLDFeaL44eIPC2UwcbEQ-AXPREWgBv6Iytc74AQ5eA,752
62
+ mapchete_eo/platforms/sentinel2/brdf/ross_thick.py,sha256=OvuuQxqWN8qrKpz8kDhmCd8R1uMLa8h5LISJSJ_NvYk,4685
63
+ mapchete_eo/platforms/sentinel2/brdf/sun_angle_arrays.py,sha256=RxhQ8vBU0r5vsQ3FnyfDdYS0EGDGKCwAXND0Gn1m5mQ,2148
64
+ mapchete_eo/platforms/sentinel2/metadata_parser/__init__.py,sha256=Vio87daAQ1eBQfDfA97c9byVnAUEPCidjTBg6jnZhXk,167
65
+ mapchete_eo/platforms/sentinel2/metadata_parser/base.py,sha256=AvPfsQEAyXOrwOQ_MQgWLUFFJL0VhTzzWHpuSe14IS0,1520
66
+ mapchete_eo/platforms/sentinel2/metadata_parser/default_path_mapper.py,sha256=Gt9jUZwO3u_p6iH3hkOGNS5Tad5yn-Y1F7uADtalBSo,5344
67
+ mapchete_eo/platforms/sentinel2/metadata_parser/models.py,sha256=FOdEeIKk_Sa_O3iGRqoR-5YLQuwjPG6pNbdFRgQVYm8,2325
68
+ mapchete_eo/platforms/sentinel2/metadata_parser/s2metadata.py,sha256=i6O9t0Bbb5BCiktKmXgDBKWdzdtVoGJ-Nt-xib-w3qw,23786
69
+ mapchete_eo/platforms/sentinel2/preconfigured_sources/__init__.py,sha256=W-PFNuC0zXfF07uTUH_-r2Macv-_5qlz_YsP04Jxh8Y,1821
70
+ mapchete_eo/platforms/sentinel2/preconfigured_sources/guessers.py,sha256=lkftO9NCJqwV663K3YqUFkNQxQWrCuwp_enbfTkjdbQ,3746
71
+ mapchete_eo/platforms/sentinel2/preconfigured_sources/item_mappers.py,sha256=b_lvs6-rKQjb-8vBjOLV0Zi4a2ZXZxMqinyeRljA5lY,5957
72
+ mapchete_eo/platforms/sentinel2/preconfigured_sources/metadata_xml_mappers.py,sha256=8UbF5Riox1FZIYGuDMBiGgxNfAQkOmu07ZMc2Eqiel0,8647
73
+ mapchete_eo/processes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
+ mapchete_eo/processes/config.py,sha256=WorMzHJzJaZPh-aEyEEwcXN08ALxn6zAhVMrjkDUWDU,1745
75
+ mapchete_eo/processes/dtype_scale.py,sha256=7hJlIe2DsE6Kmk1c3PLwLr8rnn_4_9S6Cz7bmRuzP9M,4176
76
+ mapchete_eo/processes/eo_to_xarray.py,sha256=Gcp4qju2C9S8KeUnVY5f3nAsrdckPhGRguzsgRtWBFs,514
77
+ mapchete_eo/processes/merge_rasters.py,sha256=jSXUI8pEWXbQWrM9iMtrH4ACH2VkCaBUH9CQg4z6zLA,8486
78
+ mapchete_eo/search/__init__.py,sha256=bHvaqoHrtoNyO8_3kyJfvhh1yCz0hYvU2fzXhjOXNhU,528
79
+ mapchete_eo/search/base.py,sha256=ojPTWvdVVKRab7vmasTbume6c5rHPpPyDn4KdA0f634,10708
80
+ mapchete_eo/search/config.py,sha256=L3DBEuKNGh_WXi8_Ha-qj6HW9ksRioYeFyPYGGN09qA,3696
81
+ mapchete_eo/search/s2_mgrs.py,sha256=x12m-tJZNc41lFHNR2h7eSyEZ-ceBO4Gdz785btcVN8,10859
82
+ mapchete_eo/search/stac_search.py,sha256=9d4HW-Hzwj0Gha3doBWAa-f3i01pItqgtWR19ebEYkQ,10224
83
+ mapchete_eo/search/stac_static.py,sha256=AN52yHW_EBR1jRelHLbFfXgZtZfzZ2_a8S5doouekGI,7051
84
+ mapchete_eo/search/utm_search.py,sha256=xF0Nz1JC1QLYs6IJduA5z2JM-ANJX1X-f8KyvbNRAPU,9586
85
+ mapchete_eo-2026.2.0.dist-info/METADATA,sha256=QbI-Al2zirMhHx_8fLlOmx-mygngqeEb1SXAKFv5ODY,3348
86
+ mapchete_eo-2026.2.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
87
+ mapchete_eo-2026.2.0.dist-info/entry_points.txt,sha256=edU29CA3j8hwBafEd6jO2Zcou1sGkyjNro-y4_LnAnw,320
88
+ mapchete_eo-2026.2.0.dist-info/licenses/LICENSE,sha256=gmZNf2EjyzaNbUyhfsBJlS0yQeG7GEmd-29miNXtEwA,1089
89
+ mapchete_eo-2026.2.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.28.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,11 @@
1
+ [mapchete.cli.commands]
2
+ eo = mapchete_eo.cli:eo
3
+
4
+ [mapchete.formats.drivers]
5
+ eostac = mapchete_eo.eostac
6
+ sentinel2 = mapchete_eo.platforms.sentinel2
7
+
8
+ [mapchete.processes]
9
+ dtype_scale = mapchete_eo.processes.dtype_scale
10
+ eo_to_xarray = mapchete_eo.processes.eo_to_xarray
11
+ merge_rasters = mapchete_eo.processes.merge_rasters
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2022 - 2026 EOX IT Services
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.