terrakit 0.1.3__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.
- terrakit/__init__.py +42 -0
- terrakit/__main__.py +109 -0
- terrakit/_version.py +11 -0
- terrakit/chip/__init__.py +5 -0
- terrakit/chip/tiling.py +539 -0
- terrakit/download/__init__.py +4 -0
- terrakit/download/collections.json +1070 -0
- terrakit/download/connector.py +98 -0
- terrakit/download/connector_template.py +120 -0
- terrakit/download/data_connectors/__init__.py +4 -0
- terrakit/download/data_connectors/connector_template.py +120 -0
- terrakit/download/data_connectors/ibmresearch_stac.py +435 -0
- terrakit/download/data_connectors/nasa_earthdata.py +440 -0
- terrakit/download/data_connectors/sentinel_aws.py +491 -0
- terrakit/download/data_connectors/sentinelhub.py +457 -0
- terrakit/download/data_connectors/theweathercompany.py +391 -0
- terrakit/download/download_data.py +592 -0
- terrakit/download/geodata_utils.py +420 -0
- terrakit/download/raster_file_reader.py +466 -0
- terrakit/download/transformations/__init__.py +4 -0
- terrakit/download/transformations/download_transformation_template.py +23 -0
- terrakit/download/transformations/impute_nans_xarray.py +50 -0
- terrakit/download/transformations/scale_data_xarray.py +37 -0
- terrakit/general_utils/__init__.py +4 -0
- terrakit/general_utils/curation_metadata.py +99 -0
- terrakit/general_utils/defaults.py +86 -0
- terrakit/general_utils/exceptions.py +35 -0
- terrakit/general_utils/geospatial_util.py +822 -0
- terrakit/general_utils/labels_downloader.py +269 -0
- terrakit/general_utils/plotting.py +268 -0
- terrakit/general_utils/rest.py +69 -0
- terrakit/general_utils/statistics.py +81 -0
- terrakit/store/__init__.py +4 -0
- terrakit/store/taco.py +258 -0
- terrakit/terrakit.py +110 -0
- terrakit/transform/__init__.py +4 -0
- terrakit/transform/labels.py +589 -0
- terrakit/upload/__init__.py +4 -0
- terrakit/validate/__init__.py +4 -0
- terrakit/validate/data_connector.py +31 -0
- terrakit/validate/download_model.py +122 -0
- terrakit/validate/helpers.py +147 -0
- terrakit/validate/labels_model.py +92 -0
- terrakit/validate/pipeline_model.py +105 -0
- terrakit/validate/tiling_model.py +39 -0
- terrakit-0.1.3.dist-info/METADATA +295 -0
- terrakit-0.1.3.dist-info/RECORD +49 -0
- terrakit-0.1.3.dist-info/WHEEL +4 -0
- terrakit-0.1.3.dist-info/entry_points.txt +3 -0
terrakit/__init__.py
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# © Copyright IBM Corporation 2025
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
# Copyright 2018-2025 IBM
|
|
6
|
+
|
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
# you may not use this file except in compliance with the License.
|
|
9
|
+
# You may obtain a copy of the License at
|
|
10
|
+
|
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
|
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
# See the License for the specific language governing permissions and
|
|
17
|
+
# limitations under the License.
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
import logging
|
|
21
|
+
import os
|
|
22
|
+
|
|
23
|
+
from .download.data_connectors.sentinelhub import SentinelHub # noqa
|
|
24
|
+
from .download.data_connectors.nasa_earthdata import NASA_EarthData # noqa
|
|
25
|
+
from .download.data_connectors.sentinel_aws import Sentinel_AWS # noqa
|
|
26
|
+
from .terrakit import DataConnector # noqa
|
|
27
|
+
from .download.download_data import download_data # noqa
|
|
28
|
+
from .chip import tiling # noqa
|
|
29
|
+
from .chip.tiling import chip_and_label_data # noqa
|
|
30
|
+
from .transform import labels # noqa
|
|
31
|
+
from .transform.labels import process_labels # noqa
|
|
32
|
+
from .store.taco import taco_store_data, load_tortilla # noqa
|
|
33
|
+
from .download.geodata_utils import * # noqa
|
|
34
|
+
|
|
35
|
+
# Set up logging
|
|
36
|
+
LOGLEVEL = os.environ.get("LOGLEVEL", "INFO").upper()
|
|
37
|
+
logging.basicConfig(
|
|
38
|
+
format="%(asctime)s [%(levelname)-8s] %(message)s (%(filename)s:%(lineno)s)",
|
|
39
|
+
datefmt="%Y-%m-%d %H:%M:%S",
|
|
40
|
+
level=LOGLEVEL,
|
|
41
|
+
)
|
|
42
|
+
logger = logging.getLogger(__name__)
|
terrakit/__main__.py
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# © Copyright IBM Corporation 2025
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
import sys
|
|
7
|
+
|
|
8
|
+
from jsonargparse import ArgumentParser
|
|
9
|
+
|
|
10
|
+
from terrakit.download.download_data import DownloadCls, download_data
|
|
11
|
+
from terrakit.chip.tiling import ChipAndLabelCls, chip_and_label_data
|
|
12
|
+
from terrakit.store.taco import TacoCls, taco_store_data
|
|
13
|
+
from terrakit.transform.labels import LabelsCls, process_labels
|
|
14
|
+
from terrakit.validate.pipeline_model import PipelineModel
|
|
15
|
+
from terrakit._version import VERSION, PACKAGE_NAME
|
|
16
|
+
|
|
17
|
+
logger = logging.getLogger(__name__)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def main() -> None:
|
|
21
|
+
if len(sys.argv) == 1:
|
|
22
|
+
print(
|
|
23
|
+
"usage: terrakit [-h] [--dataset_name DATASET_NAME] [--working_dir WORKING_DIR] [--config CONFIG] [--print_config[=flags]] {labels,download,chip,store,upload}...\n"
|
|
24
|
+
)
|
|
25
|
+
exit(0)
|
|
26
|
+
|
|
27
|
+
# Create labels parser
|
|
28
|
+
parser_labels = ArgumentParser()
|
|
29
|
+
parser_labels.add_class_arguments(LabelsCls)
|
|
30
|
+
|
|
31
|
+
# Create download parser
|
|
32
|
+
parser_download = ArgumentParser()
|
|
33
|
+
parser_download.add_class_arguments(DownloadCls)
|
|
34
|
+
|
|
35
|
+
parser_chip = ArgumentParser()
|
|
36
|
+
parser_chip.add_class_arguments(ChipAndLabelCls)
|
|
37
|
+
|
|
38
|
+
parser_store = ArgumentParser()
|
|
39
|
+
parser_store.add_class_arguments(TacoCls)
|
|
40
|
+
|
|
41
|
+
parser_upload = ArgumentParser()
|
|
42
|
+
parser_upload.add_argument("--op5")
|
|
43
|
+
|
|
44
|
+
parser = ArgumentParser(prog=PACKAGE_NAME, version=VERSION)
|
|
45
|
+
parser.add_class_arguments(PipelineModel)
|
|
46
|
+
|
|
47
|
+
subcommands = parser.add_subcommands()
|
|
48
|
+
subcommands.add_subcommand("labels", parser_labels)
|
|
49
|
+
subcommands.add_subcommand("download", parser_download)
|
|
50
|
+
subcommands.add_subcommand("chip", parser_chip)
|
|
51
|
+
subcommands.add_subcommand("store", parser_store)
|
|
52
|
+
subcommands.add_subcommand("upload", parser_upload)
|
|
53
|
+
|
|
54
|
+
parser.add_argument("--config", action="config")
|
|
55
|
+
|
|
56
|
+
cfg = parser.parse_args()
|
|
57
|
+
if cfg.subcommand == "labels":
|
|
58
|
+
process_labels(
|
|
59
|
+
dataset_name=cfg.dataset_name,
|
|
60
|
+
working_dir=cfg.working_dir,
|
|
61
|
+
active=cfg.labels.active,
|
|
62
|
+
labels_folder=cfg.labels.labels_folder,
|
|
63
|
+
label_type=cfg.labels.label_type,
|
|
64
|
+
datetime_info=cfg.labels.datetime_info,
|
|
65
|
+
)
|
|
66
|
+
elif cfg.subcommand == "download":
|
|
67
|
+
download_data(
|
|
68
|
+
dataset_name=cfg.dataset_name,
|
|
69
|
+
working_dir=cfg.working_dir,
|
|
70
|
+
date_allowance=cfg.download.date_allowance,
|
|
71
|
+
transform=cfg.download.transform,
|
|
72
|
+
data_sources=cfg.download.data_sources,
|
|
73
|
+
active=cfg.download.active,
|
|
74
|
+
max_cloud_cover=cfg.download.max_cloud_cover,
|
|
75
|
+
datetime_bbox_shp_file=cfg.download.datetime_bbox_shp_file,
|
|
76
|
+
labels_shp_file=cfg.download.labels_shp_file,
|
|
77
|
+
keep_files=cfg.download.keep_files,
|
|
78
|
+
)
|
|
79
|
+
elif cfg.subcommand == "chip":
|
|
80
|
+
chip_and_label_data(
|
|
81
|
+
dataset_name=cfg.dataset_name,
|
|
82
|
+
working_dir=cfg.working_dir,
|
|
83
|
+
active=cfg.chip.active,
|
|
84
|
+
data_suffix=cfg.chip.data_suffix,
|
|
85
|
+
label_suffix=cfg.chip.label_suffix,
|
|
86
|
+
chip_suffix=cfg.chip.chip_suffix,
|
|
87
|
+
chip_label_suffix=cfg.chip.chip_label_suffix,
|
|
88
|
+
sample_dim=cfg.chip.sample_dim,
|
|
89
|
+
)
|
|
90
|
+
elif cfg.subcommand == "store":
|
|
91
|
+
taco_store_data(
|
|
92
|
+
cfg.dataset_name,
|
|
93
|
+
cfg.working_dir,
|
|
94
|
+
active=cfg.store.active,
|
|
95
|
+
format=cfg.store.format,
|
|
96
|
+
dataset_save_dir=cfg.store.dataset_save_dir,
|
|
97
|
+
save_dir=cfg.store.save_dir,
|
|
98
|
+
tortilla_name=cfg.store.tortilla_name,
|
|
99
|
+
)
|
|
100
|
+
elif cfg.subcommand == "upload":
|
|
101
|
+
print("TODO: Upload labels..")
|
|
102
|
+
else:
|
|
103
|
+
print(
|
|
104
|
+
"Error: Missing subcommand. - Please specify one of {labels,download,chip,store,upload}."
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
if __name__ == "__main__":
|
|
109
|
+
main()
|
terrakit/_version.py
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# © Copyright IBM Corporation 2025
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
import importlib.metadata
|
|
6
|
+
|
|
7
|
+
PACKAGE_NAME = "terrakit"
|
|
8
|
+
try:
|
|
9
|
+
VERSION = importlib.metadata.version(PACKAGE_NAME)
|
|
10
|
+
except importlib.metadata.PackageNotFoundError:
|
|
11
|
+
VERSION = "unknown (not installed)"
|