openforis-whisp 3.0.0a8__py3-none-any.whl → 3.0.0a9__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.
- openforis_whisp/advanced_stats.py +164 -93
- openforis_whisp/datasets.py +413 -16
- openforis_whisp/parameters/lookup_gee_datasets.csv +194 -171
- {openforis_whisp-3.0.0a8.dist-info → openforis_whisp-3.0.0a9.dist-info}/METADATA +1 -1
- {openforis_whisp-3.0.0a8.dist-info → openforis_whisp-3.0.0a9.dist-info}/RECORD +7 -7
- {openforis_whisp-3.0.0a8.dist-info → openforis_whisp-3.0.0a9.dist-info}/LICENSE +0 -0
- {openforis_whisp-3.0.0a8.dist-info → openforis_whisp-3.0.0a9.dist-info}/WHEEL +0 -0
|
@@ -1302,6 +1302,9 @@ def whisp_stats_geojson_to_df_concurrent(
|
|
|
1302
1302
|
# Track if we had errors that suggest bad bands
|
|
1303
1303
|
batch_errors = []
|
|
1304
1304
|
|
|
1305
|
+
# Fail-fast flag for band errors - shared across threads
|
|
1306
|
+
band_error_detected = threading.Event()
|
|
1307
|
+
|
|
1305
1308
|
# Suppress fiona logging during batch processing (threads create new loggers)
|
|
1306
1309
|
fiona_logger = logging.getLogger("fiona")
|
|
1307
1310
|
pyogrio_logger = logging.getLogger("pyogrio._io")
|
|
@@ -1310,6 +1313,15 @@ def whisp_stats_geojson_to_df_concurrent(
|
|
|
1310
1313
|
fiona_logger.setLevel(logging.CRITICAL)
|
|
1311
1314
|
pyogrio_logger.setLevel(logging.CRITICAL)
|
|
1312
1315
|
|
|
1316
|
+
# Keywords that indicate missing asset/band errors
|
|
1317
|
+
BAND_ERROR_KEYWORDS = [
|
|
1318
|
+
"image.load",
|
|
1319
|
+
"asset",
|
|
1320
|
+
"not found",
|
|
1321
|
+
"does not exist",
|
|
1322
|
+
"imagecollection.load",
|
|
1323
|
+
]
|
|
1324
|
+
|
|
1313
1325
|
try:
|
|
1314
1326
|
# Don't suppress stdout here - we want progress messages to show in Colab
|
|
1315
1327
|
with ThreadPoolExecutor(max_workers=pool_workers) as executor:
|
|
@@ -1323,6 +1335,13 @@ def whisp_stats_geojson_to_df_concurrent(
|
|
|
1323
1335
|
batch_futures = {future: i for future, i in futures.items()}
|
|
1324
1336
|
|
|
1325
1337
|
for future in as_completed(futures):
|
|
1338
|
+
# Check if we should abort due to band error
|
|
1339
|
+
if band_error_detected.is_set():
|
|
1340
|
+
# Cancel remaining futures and skip processing
|
|
1341
|
+
for f in futures:
|
|
1342
|
+
f.cancel()
|
|
1343
|
+
break
|
|
1344
|
+
|
|
1326
1345
|
batch_idx = batch_futures[future]
|
|
1327
1346
|
try:
|
|
1328
1347
|
batch_idx, df_server, df_client = future.result()
|
|
@@ -1398,8 +1417,22 @@ def whisp_stats_geojson_to_df_concurrent(
|
|
|
1398
1417
|
)
|
|
1399
1418
|
|
|
1400
1419
|
except Exception as e:
|
|
1401
|
-
# Batch failed -
|
|
1420
|
+
# Batch failed - check if it's a band error for fail-fast
|
|
1402
1421
|
error_msg = str(e)
|
|
1422
|
+
error_msg_lower = error_msg.lower()
|
|
1423
|
+
|
|
1424
|
+
# Check if this is a band/asset error - trigger fail-fast
|
|
1425
|
+
is_this_band_error = any(
|
|
1426
|
+
keyword in error_msg_lower for keyword in BAND_ERROR_KEYWORDS
|
|
1427
|
+
)
|
|
1428
|
+
|
|
1429
|
+
if is_this_band_error and not band_error_detected.is_set():
|
|
1430
|
+
band_error_detected.set()
|
|
1431
|
+
logger.warning(
|
|
1432
|
+
f"Band/asset error detected in batch {batch_idx}. "
|
|
1433
|
+
f"Cancelling remaining batches for retry with validation..."
|
|
1434
|
+
)
|
|
1435
|
+
|
|
1403
1436
|
logger.error(f"Batch {batch_idx} failed: {error_msg[:100]}")
|
|
1404
1437
|
logger.debug(f"Full error: {error_msg}")
|
|
1405
1438
|
|
|
@@ -1419,14 +1452,136 @@ def whisp_stats_geojson_to_df_concurrent(
|
|
|
1419
1452
|
# Log completion
|
|
1420
1453
|
total_time = time.time() - start_time
|
|
1421
1454
|
time_str = _format_time(total_time)
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1455
|
+
if band_error_detected.is_set():
|
|
1456
|
+
logger.info(
|
|
1457
|
+
f"Processing stopped early due to band error after {completed_batches:,}/{len(batches):,} batches in {time_str}"
|
|
1458
|
+
)
|
|
1459
|
+
else:
|
|
1460
|
+
logger.info(
|
|
1461
|
+
f"Processing complete: {completed_batches:,}/{len(batches):,} batches in {time_str}"
|
|
1462
|
+
)
|
|
1463
|
+
|
|
1464
|
+
# If band error was detected, retry immediately with validation (fail-fast path)
|
|
1465
|
+
if band_error_detected.is_set():
|
|
1466
|
+
logger.warning("Retrying all batches with validate_bands=True...")
|
|
1467
|
+
try:
|
|
1468
|
+
with redirect_stdout(io.StringIO()):
|
|
1469
|
+
whisp_image = combine_datasets(
|
|
1470
|
+
national_codes=national_codes, validate_bands=True
|
|
1471
|
+
)
|
|
1472
|
+
logger.info("Image recreated with validation. Reprocessing all batches...")
|
|
1473
|
+
|
|
1474
|
+
# Clear state for full retry
|
|
1475
|
+
results = []
|
|
1476
|
+
batch_errors = []
|
|
1477
|
+
completed_batches = 0
|
|
1478
|
+
shown_milestones = set()
|
|
1479
|
+
start_time = time.time()
|
|
1480
|
+
|
|
1481
|
+
# Suppress fiona logging during retry
|
|
1482
|
+
fiona_logger.setLevel(logging.CRITICAL)
|
|
1483
|
+
pyogrio_logger.setLevel(logging.CRITICAL)
|
|
1484
|
+
|
|
1485
|
+
try:
|
|
1486
|
+
with ThreadPoolExecutor(max_workers=pool_workers) as executor:
|
|
1487
|
+
futures = {
|
|
1488
|
+
executor.submit(process_batch, i, batch): i
|
|
1489
|
+
for i, batch in enumerate(batches)
|
|
1490
|
+
}
|
|
1425
1491
|
|
|
1426
|
-
|
|
1492
|
+
for future in as_completed(futures):
|
|
1493
|
+
batch_idx = futures[future]
|
|
1494
|
+
try:
|
|
1495
|
+
batch_idx, df_server, df_client = future.result()
|
|
1496
|
+
if plot_id_column not in df_server.columns:
|
|
1497
|
+
df_server[plot_id_column] = [
|
|
1498
|
+
str(i) for i in range(1, len(df_server) + 1)
|
|
1499
|
+
]
|
|
1500
|
+
else:
|
|
1501
|
+
df_server[plot_id_column] = df_server[
|
|
1502
|
+
plot_id_column
|
|
1503
|
+
].astype(str)
|
|
1504
|
+
if plot_id_column in df_client.columns:
|
|
1505
|
+
df_client[plot_id_column] = df_client[
|
|
1506
|
+
plot_id_column
|
|
1507
|
+
].astype(str)
|
|
1508
|
+
|
|
1509
|
+
# Drop external_id from server if present
|
|
1510
|
+
df_server_clean = df_server.copy()
|
|
1511
|
+
if "external_id" in df_server_clean.columns:
|
|
1512
|
+
df_server_clean = df_server_clean.drop(
|
|
1513
|
+
columns=["external_id"]
|
|
1514
|
+
)
|
|
1515
|
+
|
|
1516
|
+
# Keep essential columns from client
|
|
1517
|
+
keep_external_columns = [plot_id_column]
|
|
1518
|
+
if (
|
|
1519
|
+
external_id_column
|
|
1520
|
+
and "external_id" in df_client.columns
|
|
1521
|
+
):
|
|
1522
|
+
keep_external_columns.append("external_id")
|
|
1523
|
+
if "geometry" in df_client.columns:
|
|
1524
|
+
keep_external_columns.append("geometry")
|
|
1525
|
+
if geometry_type_column in df_client.columns:
|
|
1526
|
+
keep_external_columns.append(geometry_type_column)
|
|
1527
|
+
centroid_cols = [
|
|
1528
|
+
c
|
|
1529
|
+
for c in df_client.columns
|
|
1530
|
+
if c.startswith("Centroid_")
|
|
1531
|
+
]
|
|
1532
|
+
keep_external_columns.extend(centroid_cols)
|
|
1533
|
+
|
|
1534
|
+
df_client_clean = df_client[
|
|
1535
|
+
[
|
|
1536
|
+
c
|
|
1537
|
+
for c in keep_external_columns
|
|
1538
|
+
if c in df_client.columns
|
|
1539
|
+
]
|
|
1540
|
+
]
|
|
1541
|
+
|
|
1542
|
+
merged = df_server_clean.merge(
|
|
1543
|
+
df_client_clean,
|
|
1544
|
+
on=plot_id_column,
|
|
1545
|
+
how="left",
|
|
1546
|
+
suffixes=("_ee", "_client"),
|
|
1547
|
+
)
|
|
1548
|
+
results.append(merged)
|
|
1549
|
+
|
|
1550
|
+
with progress_lock:
|
|
1551
|
+
completed_batches += 1
|
|
1552
|
+
_log_progress(
|
|
1553
|
+
completed_batches,
|
|
1554
|
+
len(batches),
|
|
1555
|
+
milestones,
|
|
1556
|
+
shown_milestones,
|
|
1557
|
+
start_time,
|
|
1558
|
+
logger,
|
|
1559
|
+
)
|
|
1560
|
+
|
|
1561
|
+
except Exception as e:
|
|
1562
|
+
error_msg = str(e)
|
|
1563
|
+
logger.error(
|
|
1564
|
+
f"Retry batch {batch_idx} failed: {error_msg[:100]}"
|
|
1565
|
+
)
|
|
1566
|
+
original_batch = batch_map[batch_idx]
|
|
1567
|
+
batch_errors.append((batch_idx, original_batch, error_msg))
|
|
1568
|
+
finally:
|
|
1569
|
+
fiona_logger.setLevel(old_fiona_level)
|
|
1570
|
+
pyogrio_logger.setLevel(old_pyogrio_level)
|
|
1571
|
+
|
|
1572
|
+
# Log retry completion
|
|
1573
|
+
retry_time = time.time() - start_time
|
|
1574
|
+
logger.info(
|
|
1575
|
+
f"Retry complete: {completed_batches:,}/{len(batches):,} batches in {_format_time(retry_time)}"
|
|
1576
|
+
)
|
|
1577
|
+
|
|
1578
|
+
except Exception as retry_error:
|
|
1579
|
+
logger.error(f"Failed to recreate image with validation: {retry_error}")
|
|
1580
|
+
# Fall through to error handling below
|
|
1581
|
+
|
|
1582
|
+
# If we have batch errors (either from initial run or retry), raise RuntimeError
|
|
1427
1583
|
if batch_errors:
|
|
1428
1584
|
total_failed_rows = sum(len(batch) for _, batch, _ in batch_errors)
|
|
1429
|
-
failed_batch_indices = [str(idx) for idx, _, _ in batch_errors]
|
|
1430
1585
|
|
|
1431
1586
|
# Format detailed error information for debugging
|
|
1432
1587
|
error_details_list = []
|
|
@@ -1475,94 +1630,10 @@ def whisp_stats_geojson_to_df_concurrent(
|
|
|
1475
1630
|
f"Please reduce batch_size and try again."
|
|
1476
1631
|
)
|
|
1477
1632
|
|
|
1478
|
-
# Check
|
|
1633
|
+
# Check we have results
|
|
1479
1634
|
if not results:
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
keyword in str(batch_errors)
|
|
1483
|
-
for keyword in ["Image.load", "asset", "not found", "does not exist"]
|
|
1484
|
-
)
|
|
1485
|
-
|
|
1486
|
-
if is_band_error:
|
|
1487
|
-
logger.warning(
|
|
1488
|
-
"Detected potential bad band error. Retrying with validate_bands=True..."
|
|
1489
|
-
)
|
|
1490
|
-
try:
|
|
1491
|
-
with redirect_stdout(io.StringIO()):
|
|
1492
|
-
whisp_image = combine_datasets(
|
|
1493
|
-
national_codes=national_codes, validate_bands=True
|
|
1494
|
-
)
|
|
1495
|
-
logger.info(
|
|
1496
|
-
"Image recreated with validation. Retrying batch processing..."
|
|
1497
|
-
)
|
|
1498
|
-
|
|
1499
|
-
# Retry batch processing with validated image
|
|
1500
|
-
results = []
|
|
1501
|
-
retry_completed = 0
|
|
1502
|
-
retry_shown = set()
|
|
1503
|
-
retry_start = time.time()
|
|
1504
|
-
|
|
1505
|
-
# Suppress fiona logging during batch processing (threads create new loggers)
|
|
1506
|
-
fiona_logger = logging.getLogger("fiona")
|
|
1507
|
-
pyogrio_logger = logging.getLogger("pyogrio._io")
|
|
1508
|
-
old_fiona_level = fiona_logger.level
|
|
1509
|
-
old_pyogrio_level = pyogrio_logger.level
|
|
1510
|
-
fiona_logger.setLevel(logging.CRITICAL)
|
|
1511
|
-
pyogrio_logger.setLevel(logging.CRITICAL)
|
|
1512
|
-
|
|
1513
|
-
try:
|
|
1514
|
-
with ThreadPoolExecutor(max_workers=pool_workers) as executor:
|
|
1515
|
-
futures = {
|
|
1516
|
-
executor.submit(process_batch, i, batch): i
|
|
1517
|
-
for i, batch in enumerate(batches)
|
|
1518
|
-
}
|
|
1519
|
-
|
|
1520
|
-
for future in as_completed(futures):
|
|
1521
|
-
try:
|
|
1522
|
-
batch_idx, df_server, df_client = future.result()
|
|
1523
|
-
if plot_id_column not in df_server.columns:
|
|
1524
|
-
# Use 1-indexed range to match client-side assignment
|
|
1525
|
-
df_server[plot_id_column] = range(
|
|
1526
|
-
1, len(df_server) + 1
|
|
1527
|
-
)
|
|
1528
|
-
merged = df_server.merge(
|
|
1529
|
-
df_client,
|
|
1530
|
-
on=plot_id_column,
|
|
1531
|
-
how="left",
|
|
1532
|
-
suffixes=("", "_client"),
|
|
1533
|
-
)
|
|
1534
|
-
results.append(merged)
|
|
1535
|
-
|
|
1536
|
-
# Update retry progress
|
|
1537
|
-
with progress_lock:
|
|
1538
|
-
retry_completed += 1
|
|
1539
|
-
_log_progress(
|
|
1540
|
-
retry_completed,
|
|
1541
|
-
len(batches),
|
|
1542
|
-
milestones,
|
|
1543
|
-
retry_shown,
|
|
1544
|
-
retry_start,
|
|
1545
|
-
logger,
|
|
1546
|
-
)
|
|
1547
|
-
except Exception as e:
|
|
1548
|
-
logger.error(
|
|
1549
|
-
f"Batch processing error (retry): {str(e)[:100]}"
|
|
1550
|
-
)
|
|
1551
|
-
|
|
1552
|
-
# Log retry completion
|
|
1553
|
-
retry_time = time.time() - retry_start
|
|
1554
|
-
logger.info(
|
|
1555
|
-
f"Retry complete: {retry_completed:,}/{len(batches):,} batches in {_format_time(retry_time)}"
|
|
1556
|
-
)
|
|
1557
|
-
finally:
|
|
1558
|
-
# Restore logger levels
|
|
1559
|
-
fiona_logger.setLevel(old_fiona_level)
|
|
1560
|
-
pyogrio_logger.setLevel(old_pyogrio_level)
|
|
1561
|
-
except Exception as validation_e:
|
|
1562
|
-
logger.error(
|
|
1563
|
-
f"Failed to recover with validation: {str(validation_e)[:100]}"
|
|
1564
|
-
)
|
|
1565
|
-
return pd.DataFrame()
|
|
1635
|
+
logger.error("No results obtained from batch processing")
|
|
1636
|
+
return pd.DataFrame()
|
|
1566
1637
|
|
|
1567
1638
|
if results:
|
|
1568
1639
|
# Filter out empty DataFrames and all-NA columns to avoid FutureWarning in pd.concat
|
openforis_whisp/datasets.py
CHANGED
|
@@ -373,7 +373,19 @@ def g_esri_2020_2023_crop_prep():
|
|
|
373
373
|
#### disturbances by year
|
|
374
374
|
|
|
375
375
|
# RADD_year_2019 to RADD_year_< current year >
|
|
376
|
+
# Coverage: Primary humid tropical forest areas of South America, sub-Saharan Africa,
|
|
377
|
+
# and insular Southeast Asia at 10m spatial resolution.
|
|
378
|
+
# Available from January 2019 to present for Africa,
|
|
379
|
+
# and from January 2020 to present for South America and Southeast Asia.
|
|
376
380
|
def g_radd_year_prep():
|
|
381
|
+
"""
|
|
382
|
+
RADD alerts per year as multiband image.
|
|
383
|
+
Each band is binary (1 = alert detected).
|
|
384
|
+
Coverage: Primary humid tropical forest areas of South America, sub-Saharan Africa,
|
|
385
|
+
and insular Southeast Asia at 10m spatial resolution.
|
|
386
|
+
Available from January 2019 to present for Africa,
|
|
387
|
+
and from January 2020 to present for South America and Southeast Asia.
|
|
388
|
+
"""
|
|
377
389
|
radd = ee.ImageCollection("projects/radar-wur/raddalert/v1")
|
|
378
390
|
radd_date = (
|
|
379
391
|
radd.filterMetadata("layer", "contains", "alert").select("Date").mosaic()
|
|
@@ -582,27 +594,412 @@ def g_radd_before_2020_prep():
|
|
|
582
594
|
).selfMask()
|
|
583
595
|
|
|
584
596
|
|
|
585
|
-
#
|
|
586
|
-
|
|
587
|
-
#
|
|
597
|
+
# DIST_after_2020
|
|
598
|
+
|
|
599
|
+
# DIST alerts are for all veg types so masked by EUFO forest 2020
|
|
600
|
+
# NB alerts only for 2024 onwards (in GEE at least, available for 2023 ofrom the GLAD site)
|
|
601
|
+
# for conistency using "...after_2020..." terminology.
|
|
602
|
+
def g_glad_dist_after_2020_prep():
|
|
603
|
+
|
|
604
|
+
# no need to filter by date as all dates are later than 2023
|
|
605
|
+
|
|
606
|
+
# Load the vegetation disturbance collections
|
|
607
|
+
VEGDISTSTATUS = ee.ImageCollection(
|
|
608
|
+
"projects/glad/HLSDIST/current/VEG-DIST-STATUS"
|
|
609
|
+
).mosaic()
|
|
610
|
+
|
|
611
|
+
# Key for high-confidence alerts (values 3, 6, 7, 8)
|
|
612
|
+
high_conf_values = [3, 6, 7, 8]
|
|
613
|
+
|
|
614
|
+
# Create high-confidence mask
|
|
615
|
+
dist_high_conf = VEGDISTSTATUS.remap(
|
|
616
|
+
high_conf_values, [1] * len(high_conf_values), 0
|
|
617
|
+
)
|
|
618
|
+
|
|
619
|
+
return dist_high_conf.updateMask(g_jrc_gfc_2020_prep()).rename(
|
|
620
|
+
"DIST_after_2020"
|
|
621
|
+
) # Mask alerts to forest and rename band
|
|
622
|
+
|
|
623
|
+
|
|
624
|
+
# # DIST_alert_2024 to DIST_alert_< current year >
|
|
625
|
+
# # Notes:
|
|
626
|
+
# # 1) so far only available for 2024 onwards in GEE
|
|
627
|
+
# # 2) masked alerts (as dist alerts are for all vegetation) to JRC EUFO 2020 layer, as close to EUDR definition
|
|
628
|
+
|
|
629
|
+
|
|
630
|
+
def g_glad_dist_year_prep():
|
|
631
|
+
"""
|
|
632
|
+
GLAD DIST alerts per year as multiband image.
|
|
633
|
+
Each band is binary (1 = high-confidence disturbance alert).
|
|
634
|
+
Uses VEG-DIST-DATE to filter by year, VEG-DIST-STATUS for confidence.
|
|
635
|
+
Masked to EUFO 2020 forest.
|
|
636
|
+
Note: Only available from 2024 onwards.
|
|
637
|
+
Fully server-side using ee.List.iterate (no Python for loop).
|
|
638
|
+
"""
|
|
639
|
+
# Load the vegetation disturbance collections
|
|
640
|
+
# Vegetation disturbance status (0-8, class flag, 8-bit)
|
|
641
|
+
VEGDISTSTATUS = ee.ImageCollection(
|
|
642
|
+
"projects/glad/HLSDIST/current/VEG-DIST-STATUS"
|
|
643
|
+
).mosaic()
|
|
644
|
+
# Initial vegetation disturbance date (>0: days since 2020-12-31, 16-bit)
|
|
645
|
+
VEGDISTDATE = ee.ImageCollection(
|
|
646
|
+
"projects/glad/HLSDIST/current/VEG-DIST-DATE"
|
|
647
|
+
).mosaic()
|
|
648
|
+
|
|
649
|
+
# Key for high-confidence alerts (values 3, 6, 7, 8)
|
|
650
|
+
# 3 = <50% loss, high confidence, ongoing
|
|
651
|
+
# 6 = ≥50% loss, high confidence, ongoing
|
|
652
|
+
# 7 = <50% loss, high confidence, finished
|
|
653
|
+
# 8 = ≥50% loss, high confidence, finished
|
|
654
|
+
high_conf_values = [3, 6, 7, 8]
|
|
655
|
+
dist_high_conf = VEGDISTSTATUS.remap(
|
|
656
|
+
high_conf_values, [1] * len(high_conf_values), 0
|
|
657
|
+
)
|
|
588
658
|
|
|
589
|
-
#
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
# ).mosaic()
|
|
659
|
+
# Year range: 2024 to current year
|
|
660
|
+
start_year = 2024
|
|
661
|
+
end_year = CURRENT_YEAR
|
|
593
662
|
|
|
594
|
-
#
|
|
595
|
-
|
|
663
|
+
# Reference date for day offset calculation (2020-12-31)
|
|
664
|
+
ref_date = ee.Date("2020-12-31")
|
|
596
665
|
|
|
597
|
-
#
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
666
|
+
# Create first band (2024)
|
|
667
|
+
first_year = ee.Number(start_year)
|
|
668
|
+
first_start_days = ee.Date.fromYMD(first_year, 1, 1).difference(ref_date, "day")
|
|
669
|
+
first_end_days = ee.Date.fromYMD(first_year.add(1), 1, 1).difference(
|
|
670
|
+
ref_date, "day"
|
|
671
|
+
)
|
|
672
|
+
first_year_mask = VEGDISTDATE.gte(first_start_days).And(
|
|
673
|
+
VEGDISTDATE.lt(first_end_days)
|
|
674
|
+
)
|
|
675
|
+
first_band_name = ee.String("DIST_year_").cat(first_year.format("%d"))
|
|
676
|
+
first_band = (
|
|
677
|
+
first_year_mask.updateMask(dist_high_conf).rename(first_band_name).selfMask()
|
|
678
|
+
)
|
|
601
679
|
|
|
602
|
-
#
|
|
603
|
-
|
|
604
|
-
# ) # Mask alerts to forest and rename band
|
|
680
|
+
# Server-side iteration to add remaining years
|
|
681
|
+
years = ee.List.sequence(start_year + 1, end_year)
|
|
605
682
|
|
|
683
|
+
def add_year_band(year, img_stack):
|
|
684
|
+
year_num = ee.Number(year)
|
|
685
|
+
start_days = ee.Date.fromYMD(year_num, 1, 1).difference(ref_date, "day")
|
|
686
|
+
end_days = ee.Date.fromYMD(year_num.add(1), 1, 1).difference(ref_date, "day")
|
|
687
|
+
year_mask = VEGDISTDATE.gte(start_days).And(VEGDISTDATE.lt(end_days))
|
|
688
|
+
band_name = ee.String("DIST_year_").cat(year_num.format("%d"))
|
|
689
|
+
year_band = year_mask.updateMask(dist_high_conf).rename(band_name).selfMask()
|
|
690
|
+
return ee.Image(img_stack).addBands(year_band)
|
|
691
|
+
|
|
692
|
+
img_stack = ee.Image(years.iterate(add_year_band, first_band))
|
|
693
|
+
|
|
694
|
+
# Mask to EUFO 2020 forest
|
|
695
|
+
return img_stack.updateMask(g_jrc_gfc_2020_prep())
|
|
696
|
+
|
|
697
|
+
|
|
698
|
+
# GLAD-L (GLAD Landsat) Alerts
|
|
699
|
+
# Coverage: Entire tropics (30°N to 30°S) from January 1, 2018 to present,
|
|
700
|
+
# and from 2015 to present for select countries in the Amazon, Congo Basin,
|
|
701
|
+
# and insular Southeast Asia.
|
|
702
|
+
# Uses confidence bands per year where values >= 2 are confirmed alerts
|
|
703
|
+
# Asset paths per year:
|
|
704
|
+
# 2021: projects/glad/alert/2021final (conf21)
|
|
705
|
+
# 2022: projects/glad/alert/2022final (conf22)
|
|
706
|
+
# 2023: projects/glad/alert/2023final (conf23)
|
|
707
|
+
# 2024: NOT AVAILABLE
|
|
708
|
+
# 2025+: projects/glad/alert/UpdResult (conf25, conf26, etc.)
|
|
709
|
+
# More info: https://glad.umd.edu/dataset/glad-forest-alerts
|
|
710
|
+
|
|
711
|
+
|
|
712
|
+
# GLAD-L_after_2020 (combined alerts from 2021 to current year, excluding 2024)
|
|
713
|
+
def g_glad_l_after_2020_prep():
|
|
714
|
+
"""
|
|
715
|
+
GLAD Landsat alerts after 2020 (combined from 2021 onwards).
|
|
716
|
+
Uses confidence bands with threshold >= 2 for confirmed alerts.
|
|
717
|
+
Note: 2024 data is not available.
|
|
718
|
+
"""
|
|
719
|
+
# Load yearly assets and combine into single multiband image
|
|
720
|
+
glad_combined = (
|
|
721
|
+
ee.ImageCollection("projects/glad/alert/2021final")
|
|
722
|
+
.mosaic()
|
|
723
|
+
.select("conf21")
|
|
724
|
+
.addBands(
|
|
725
|
+
ee.ImageCollection("projects/glad/alert/2022final")
|
|
726
|
+
.mosaic()
|
|
727
|
+
.select("conf22")
|
|
728
|
+
)
|
|
729
|
+
.addBands(
|
|
730
|
+
ee.ImageCollection("projects/glad/alert/2023final")
|
|
731
|
+
.mosaic()
|
|
732
|
+
.select("conf23")
|
|
733
|
+
)
|
|
734
|
+
.addBands(
|
|
735
|
+
ee.ImageCollection("projects/glad/alert/UpdResult")
|
|
736
|
+
.mosaic()
|
|
737
|
+
.select(["conf25", "conf26"])
|
|
738
|
+
)
|
|
739
|
+
)
|
|
740
|
+
|
|
741
|
+
# Combine alerts from all available years (confidence >= 2)
|
|
742
|
+
# 2024 not available
|
|
743
|
+
combined_alerts = (
|
|
744
|
+
glad_combined.select("conf21")
|
|
745
|
+
.gte(2)
|
|
746
|
+
.Or(glad_combined.select("conf22").gte(2))
|
|
747
|
+
.Or(glad_combined.select("conf23").gte(2))
|
|
748
|
+
.Or(glad_combined.select("conf25").gte(2))
|
|
749
|
+
.Or(glad_combined.select("conf26").gte(2))
|
|
750
|
+
)
|
|
751
|
+
|
|
752
|
+
return combined_alerts.rename("GLAD-L_after_2020").selfMask()
|
|
753
|
+
|
|
754
|
+
|
|
755
|
+
# GLAD-L_before_2020 (combined alerts from 2017 to 2020)
|
|
756
|
+
def g_glad_l_before_2020_prep():
|
|
757
|
+
"""
|
|
758
|
+
GLAD Landsat alerts before 2020 (combined from 2017-2020 inclusive).
|
|
759
|
+
Uses confidence bands with threshold >= 2 for confirmed alerts.
|
|
760
|
+
Note: 2015 and 2016 assets are not available in GEE.
|
|
761
|
+
Coverage: Tropics (30°N to 30°S).
|
|
762
|
+
"""
|
|
763
|
+
# Load yearly assets and combine
|
|
764
|
+
glad_combined = (
|
|
765
|
+
ee.ImageCollection("projects/glad/alert/2017final")
|
|
766
|
+
.mosaic()
|
|
767
|
+
.select("conf17")
|
|
768
|
+
.addBands(
|
|
769
|
+
ee.ImageCollection("projects/glad/alert/2018final")
|
|
770
|
+
.mosaic()
|
|
771
|
+
.select("conf18")
|
|
772
|
+
)
|
|
773
|
+
.addBands(
|
|
774
|
+
ee.ImageCollection("projects/glad/alert/2019final")
|
|
775
|
+
.mosaic()
|
|
776
|
+
.select("conf19")
|
|
777
|
+
)
|
|
778
|
+
.addBands(
|
|
779
|
+
ee.ImageCollection("projects/glad/alert/2020final")
|
|
780
|
+
.mosaic()
|
|
781
|
+
.select("conf20")
|
|
782
|
+
)
|
|
783
|
+
)
|
|
784
|
+
|
|
785
|
+
# Combine alerts from all available years (confidence >= 2)
|
|
786
|
+
combined_alerts = (
|
|
787
|
+
glad_combined.select("conf17")
|
|
788
|
+
.gte(2)
|
|
789
|
+
.Or(glad_combined.select("conf18").gte(2))
|
|
790
|
+
.Or(glad_combined.select("conf19").gte(2))
|
|
791
|
+
.Or(glad_combined.select("conf20").gte(2))
|
|
792
|
+
)
|
|
793
|
+
|
|
794
|
+
return combined_alerts.rename("GLAD-L_before_2020").selfMask()
|
|
795
|
+
|
|
796
|
+
|
|
797
|
+
# GLAD-L timeseries - multiband image with one band per year
|
|
798
|
+
def g_glad_l_year_prep():
|
|
799
|
+
"""
|
|
800
|
+
GLAD Landsat alerts per year as multiband image.
|
|
801
|
+
Each band is binary (1 = alert with confidence >= 2).
|
|
802
|
+
Coverage: Entire tropics (30°N to 30°S) from January 1, 2018 to present,
|
|
803
|
+
and from 2017 to present for select countries in the Amazon,
|
|
804
|
+
Congo Basin, and insular Southeast Asia.
|
|
805
|
+
Note: 2015 and 2016 assets are not available in GEE.
|
|
806
|
+
Note: 2024 data is not available.
|
|
807
|
+
Includes years from 2017 onwards.
|
|
808
|
+
"""
|
|
809
|
+
# Build multiband image with all available years
|
|
810
|
+
# Years 2017-2023 use YYYYfinal assets, 2025+ use UpdResult
|
|
811
|
+
# Note: 2015final and 2016final assets do not exist in GEE
|
|
812
|
+
img_stack = (
|
|
813
|
+
# 2017
|
|
814
|
+
ee.ImageCollection("projects/glad/alert/2017final")
|
|
815
|
+
.mosaic()
|
|
816
|
+
.select("conf17")
|
|
817
|
+
.gte(2)
|
|
818
|
+
.rename("GLAD-L_year_2017")
|
|
819
|
+
.selfMask()
|
|
820
|
+
# 2018
|
|
821
|
+
.addBands(
|
|
822
|
+
ee.ImageCollection("projects/glad/alert/2018final")
|
|
823
|
+
.mosaic()
|
|
824
|
+
.select("conf18")
|
|
825
|
+
.gte(2)
|
|
826
|
+
.rename("GLAD-L_year_2018")
|
|
827
|
+
.selfMask()
|
|
828
|
+
)
|
|
829
|
+
# 2019
|
|
830
|
+
.addBands(
|
|
831
|
+
ee.ImageCollection("projects/glad/alert/2019final")
|
|
832
|
+
.mosaic()
|
|
833
|
+
.select("conf19")
|
|
834
|
+
.gte(2)
|
|
835
|
+
.rename("GLAD-L_year_2019")
|
|
836
|
+
.selfMask()
|
|
837
|
+
)
|
|
838
|
+
# 2020
|
|
839
|
+
.addBands(
|
|
840
|
+
ee.ImageCollection("projects/glad/alert/2020final")
|
|
841
|
+
.mosaic()
|
|
842
|
+
.select("conf20")
|
|
843
|
+
.gte(2)
|
|
844
|
+
.rename("GLAD-L_year_2020")
|
|
845
|
+
.selfMask()
|
|
846
|
+
)
|
|
847
|
+
# 2021
|
|
848
|
+
.addBands(
|
|
849
|
+
ee.ImageCollection("projects/glad/alert/2021final")
|
|
850
|
+
.mosaic()
|
|
851
|
+
.select("conf21")
|
|
852
|
+
.gte(2)
|
|
853
|
+
.rename("GLAD-L_year_2021")
|
|
854
|
+
.selfMask()
|
|
855
|
+
)
|
|
856
|
+
# 2022
|
|
857
|
+
.addBands(
|
|
858
|
+
ee.ImageCollection("projects/glad/alert/2022final")
|
|
859
|
+
.mosaic()
|
|
860
|
+
.select("conf22")
|
|
861
|
+
.gte(2)
|
|
862
|
+
.rename("GLAD-L_year_2022")
|
|
863
|
+
.selfMask()
|
|
864
|
+
)
|
|
865
|
+
# 2023
|
|
866
|
+
.addBands(
|
|
867
|
+
ee.ImageCollection("projects/glad/alert/2023final")
|
|
868
|
+
.mosaic()
|
|
869
|
+
.select("conf23")
|
|
870
|
+
.gte(2)
|
|
871
|
+
.rename("GLAD-L_year_2023")
|
|
872
|
+
.selfMask()
|
|
873
|
+
)
|
|
874
|
+
# 2024 NOT AVAILABLE
|
|
875
|
+
# 2025
|
|
876
|
+
.addBands(
|
|
877
|
+
ee.ImageCollection("projects/glad/alert/UpdResult")
|
|
878
|
+
.mosaic()
|
|
879
|
+
.select("conf25")
|
|
880
|
+
.gte(2)
|
|
881
|
+
.rename("GLAD-L_year_2025")
|
|
882
|
+
.selfMask()
|
|
883
|
+
)
|
|
884
|
+
# 2026
|
|
885
|
+
.addBands(
|
|
886
|
+
ee.ImageCollection("projects/glad/alert/UpdResult")
|
|
887
|
+
.mosaic()
|
|
888
|
+
.select("conf26")
|
|
889
|
+
.gte(2)
|
|
890
|
+
.rename("GLAD-L_year_2026")
|
|
891
|
+
.selfMask()
|
|
892
|
+
)
|
|
893
|
+
)
|
|
894
|
+
|
|
895
|
+
return img_stack
|
|
896
|
+
|
|
897
|
+
|
|
898
|
+
# GLAD-S2 (GLAD Sentinel-2) Alerts
|
|
899
|
+
# GLAD-S2_after_2020 (combined alerts from 2021 to current year)
|
|
900
|
+
def g_glad_s2_after_2020_prep():
|
|
901
|
+
"""
|
|
902
|
+
GLAD Sentinel-2 alerts after 2020 (filtered and combined from 2021 onwards - original data starts 2019).
|
|
903
|
+
Uses alert band with threshold >= 2 for confirmed alerts.
|
|
904
|
+
Coverage: Primary humid tropical forest within Amazon basin region.
|
|
905
|
+
https://glad.umd.edu/dataset/glad-forest-alerts
|
|
906
|
+
"""
|
|
907
|
+
col = "projects/glad/S2alert"
|
|
908
|
+
s2alert = ee.Image(col + "/alert")
|
|
909
|
+
alert_date = ee.Image(col + "/alertDate")
|
|
910
|
+
|
|
911
|
+
# Date encoding: days since 2019-01-01
|
|
912
|
+
# 2020-12-31 = 730 days (end of 2020)
|
|
913
|
+
days_end_2020 = 730
|
|
914
|
+
|
|
915
|
+
# Filter alerts after 2020 with confidence >= 2
|
|
916
|
+
# - alert: confidence band (0-4, where 4 is highest confidence)
|
|
917
|
+
alerts_after_2020 = s2alert.gte(2).And(alert_date.gt(days_end_2020))
|
|
918
|
+
|
|
919
|
+
return alerts_after_2020.rename("GLAD-S2_after_2020").selfMask()
|
|
920
|
+
|
|
921
|
+
|
|
922
|
+
# GLAD-S2_before_2020 (combined alerts from 2019 to 2020)
|
|
923
|
+
def g_glad_s2_before_2020_prep():
|
|
924
|
+
"""
|
|
925
|
+
GLAD Sentinel-2 alerts before 2020 (from 2019-01-01 to 2020-12-31 inclusive).
|
|
926
|
+
Uses alert band with threshold >= 2 for confirmed alerts.
|
|
927
|
+
Coverage: Primary humid tropical forest within Amazon basin region.
|
|
928
|
+
Note: Data starts from 2019.
|
|
929
|
+
"""
|
|
930
|
+
col = "projects/glad/S2alert"
|
|
931
|
+
s2alert = ee.Image(col + "/alert")
|
|
932
|
+
alert_date = ee.Image(col + "/alertDate")
|
|
933
|
+
|
|
934
|
+
# Date encoding: days since 2019-01-01
|
|
935
|
+
# 2019-01-01 = 0, 2020-12-31 = 730 days
|
|
936
|
+
days_end_2020 = 730
|
|
937
|
+
|
|
938
|
+
# Filter alerts up to end of 2020 with confidence >= 2
|
|
939
|
+
alerts_before_2020 = s2alert.gte(2).And(alert_date.lte(days_end_2020))
|
|
940
|
+
|
|
941
|
+
return alerts_before_2020.rename("GLAD-S2_before_2020").selfMask()
|
|
942
|
+
|
|
943
|
+
|
|
944
|
+
# GLAD-S2 timeseries - multiband image with one band per year
|
|
945
|
+
def g_glad_s2_year_prep():
|
|
946
|
+
"""
|
|
947
|
+
GLAD Sentinel-2 alerts per year as multiband image.
|
|
948
|
+
Each band is binary (1 = alert with confidence >= 2).
|
|
949
|
+
Coverage: Primary humid tropical forest areas of South America
|
|
950
|
+
from January 2019 to present.
|
|
951
|
+
Date encoding: days since 2019-01-01.
|
|
952
|
+
Includes years from 2019 onwards.
|
|
953
|
+
"""
|
|
954
|
+
col = "projects/glad/S2alert"
|
|
955
|
+
s2alert = ee.Image(col + "/alert")
|
|
956
|
+
alert_date = ee.Image(col + "/alertDate")
|
|
957
|
+
|
|
958
|
+
# Confidence threshold for confirmed alerts
|
|
959
|
+
confirmed = s2alert.gte(2)
|
|
960
|
+
|
|
961
|
+
# Date encoding: days since 2019-01-01
|
|
962
|
+
# Year boundaries (days since 2019-01-01):
|
|
963
|
+
# 2019-01-01 = 0, 2020-01-01 = 365, 2021-01-01 = 731, 2022-01-01 = 1096
|
|
964
|
+
# 2023-01-01 = 1461, 2024-01-01 = 1827, 2025-01-01 = 2192, 2026-01-01 = 2557
|
|
965
|
+
ref_date = ee.Date("2019-01-01")
|
|
966
|
+
|
|
967
|
+
# Build multiband image with available years (data starts 2019)
|
|
968
|
+
start_year = 2019
|
|
969
|
+
end_year = CURRENT_YEAR
|
|
970
|
+
|
|
971
|
+
# Create first band (2019)
|
|
972
|
+
first_year = ee.Number(start_year)
|
|
973
|
+
first_start_days = ee.Date.fromYMD(first_year, 1, 1).difference(ref_date, "day")
|
|
974
|
+
first_end_days = ee.Date.fromYMD(first_year.add(1), 1, 1).difference(
|
|
975
|
+
ref_date, "day"
|
|
976
|
+
)
|
|
977
|
+
first_year_mask = alert_date.gte(first_start_days).And(
|
|
978
|
+
alert_date.lt(first_end_days)
|
|
979
|
+
)
|
|
980
|
+
first_band_name = ee.String("GLAD-S2_year_").cat(first_year.format("%d"))
|
|
981
|
+
first_band = (
|
|
982
|
+
confirmed.updateMask(first_year_mask).rename(first_band_name).selfMask()
|
|
983
|
+
)
|
|
984
|
+
|
|
985
|
+
# Server-side iteration to add remaining years
|
|
986
|
+
years = ee.List.sequence(start_year + 1, end_year)
|
|
987
|
+
|
|
988
|
+
def add_year_band(year, img_stack):
|
|
989
|
+
year_num = ee.Number(year)
|
|
990
|
+
start_days = ee.Date.fromYMD(year_num, 1, 1).difference(ref_date, "day")
|
|
991
|
+
end_days = ee.Date.fromYMD(year_num.add(1), 1, 1).difference(ref_date, "day")
|
|
992
|
+
year_mask = alert_date.gte(start_days).And(alert_date.lt(end_days))
|
|
993
|
+
band_name = ee.String("GLAD-S2_year_").cat(year_num.format("%d"))
|
|
994
|
+
year_band = confirmed.updateMask(year_mask).rename(band_name).selfMask()
|
|
995
|
+
return ee.Image(img_stack).addBands(year_band)
|
|
996
|
+
|
|
997
|
+
img_stack = ee.Image(years.iterate(add_year_band, first_band))
|
|
998
|
+
|
|
999
|
+
return img_stack
|
|
1000
|
+
|
|
1001
|
+
|
|
1002
|
+
#### disturbances combined (split into before and after 2020)
|
|
606
1003
|
|
|
607
1004
|
# TMF_deg_before_2020
|
|
608
1005
|
def g_tmf_deg_before_2020_prep():
|
|
@@ -2,68 +2,68 @@ name,order,ISO2_code,theme,theme_timber,use_for_risk,use_for_risk_timber,exclude
|
|
|
2
2
|
EUFO_2020,10,,treecover,naturally_reg_2020,1,1,0,float32,1,0,g_jrc_gfc_2020_prep
|
|
3
3
|
GLAD_Primary,20,,treecover,primary,1,1,0,float32,1,0,g_glad_pht_prep
|
|
4
4
|
TMF_undist,30,,treecover,primary,1,1,0,float32,1,0,g_jrc_tmf_undisturbed_prep
|
|
5
|
-
GFC_TC_2020,
|
|
6
|
-
Forest_FDaP,
|
|
7
|
-
ESA_TC_2020,
|
|
8
|
-
TMF_plant,
|
|
9
|
-
Oil_palm_Descals,
|
|
10
|
-
Oil_palm_FDaP,
|
|
11
|
-
Coffee_FDaP,
|
|
5
|
+
GFC_TC_2020,40,,treecover,naturally_reg_2020,0,0,0,float32,1,0,g_glad_gfc_10pc_prep
|
|
6
|
+
Forest_FDaP,50,,treecover,naturally_reg_2020,1,1,0,float32,1,0,g_glad_gfc_10pc_prep
|
|
7
|
+
ESA_TC_2020,60,,treecover,naturally_reg_2020,0,0,0,float32,1,0,g_esa_worldcover_trees_prep
|
|
8
|
+
TMF_plant,70,,commodities,NA,1,1,0,float32,1,0,g_jrc_tmf_plantation_prep
|
|
9
|
+
Oil_palm_Descals,80,,commodities,NA,1,1,0,float32,1,0,g_creaf_descals_palm_prep
|
|
10
|
+
Oil_palm_FDaP,90,,commodities,NA,1,1,0,float32,1,0,g_fdap_palm_prep
|
|
11
|
+
Coffee_FDaP,100,,commodities,NA,1,1,0,float32,1,0,g_fdap_coffee_prep
|
|
12
12
|
Cocoa_FDaP,110,,commodities,NA,1,1,0,float32,1,0,g_fdap_cocoa_prep
|
|
13
13
|
Cocoa_ETH,120,,commodities,NA,1,1,0,float32,1,0,g_eth_kalischek_cocoa_prep
|
|
14
|
-
Rubber_FDaP,
|
|
15
|
-
Rubber_RBGE,
|
|
16
|
-
Soy_Song_2020,
|
|
17
|
-
TMF_def_2000,
|
|
18
|
-
TMF_def_2001,
|
|
19
|
-
TMF_def_2002,
|
|
20
|
-
TMF_def_2003,
|
|
21
|
-
TMF_def_2004,
|
|
22
|
-
TMF_def_2005,
|
|
23
|
-
TMF_def_2006,
|
|
24
|
-
TMF_def_2007,
|
|
25
|
-
TMF_def_2008,
|
|
26
|
-
TMF_def_2009,
|
|
27
|
-
TMF_def_2010,
|
|
28
|
-
TMF_def_2011,
|
|
29
|
-
TMF_def_2012,
|
|
30
|
-
TMF_def_2013,
|
|
31
|
-
TMF_def_2014,
|
|
32
|
-
TMF_def_2015,
|
|
33
|
-
TMF_def_2016,
|
|
34
|
-
TMF_def_2017,
|
|
35
|
-
TMF_def_2018,
|
|
36
|
-
TMF_def_2019,
|
|
37
|
-
TMF_def_2020,
|
|
38
|
-
TMF_def_2021,
|
|
39
|
-
TMF_def_2022,
|
|
40
|
-
TMF_def_2023,
|
|
41
|
-
TMF_def_2024,
|
|
42
|
-
TMF_deg_2000,
|
|
43
|
-
TMF_deg_2001,
|
|
44
|
-
TMF_deg_2002,
|
|
45
|
-
TMF_deg_2003,
|
|
46
|
-
TMF_deg_2004,
|
|
47
|
-
TMF_deg_2005,
|
|
48
|
-
TMF_deg_2006,
|
|
49
|
-
TMF_deg_2007,
|
|
50
|
-
TMF_deg_2008,
|
|
51
|
-
TMF_deg_2009,
|
|
52
|
-
TMF_deg_2010,
|
|
53
|
-
TMF_deg_2011,
|
|
54
|
-
TMF_deg_2012,
|
|
55
|
-
TMF_deg_2013,
|
|
56
|
-
TMF_deg_2014,
|
|
57
|
-
TMF_deg_2015,
|
|
58
|
-
TMF_deg_2016,
|
|
59
|
-
TMF_deg_2017,
|
|
60
|
-
TMF_deg_2018,
|
|
61
|
-
TMF_deg_2019,
|
|
62
|
-
TMF_deg_2020,
|
|
63
|
-
TMF_deg_2021,
|
|
64
|
-
TMF_deg_2022,
|
|
65
|
-
TMF_deg_2023,
|
|
66
|
-
TMF_deg_2024,
|
|
14
|
+
Rubber_FDaP,130,,commodities,NA,1,1,0,float32,1,0,g_fdap_rubber_prep
|
|
15
|
+
Rubber_RBGE,140,,commodities,NA,1,1,0,float32,1,0,g_rbge_rubber_prep
|
|
16
|
+
Soy_Song_2020,150,,commodities,NA,1,1,0,float32,1,0,g_soy_song_2020_prep
|
|
17
|
+
TMF_def_2000,160,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
18
|
+
TMF_def_2001,170,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
19
|
+
TMF_def_2002,180,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
20
|
+
TMF_def_2003,190,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
21
|
+
TMF_def_2004,200,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
22
|
+
TMF_def_2005,210,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
23
|
+
TMF_def_2006,220,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
24
|
+
TMF_def_2007,230,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
25
|
+
TMF_def_2008,240,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
26
|
+
TMF_def_2009,250,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
27
|
+
TMF_def_2010,260,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
28
|
+
TMF_def_2011,270,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
29
|
+
TMF_def_2012,280,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
30
|
+
TMF_def_2013,290,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
31
|
+
TMF_def_2014,300,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
32
|
+
TMF_def_2015,310,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
33
|
+
TMF_def_2016,320,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
34
|
+
TMF_def_2017,330,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
35
|
+
TMF_def_2018,340,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
36
|
+
TMF_def_2019,350,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
37
|
+
TMF_def_2020,360,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
38
|
+
TMF_def_2021,370,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
39
|
+
TMF_def_2022,380,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
40
|
+
TMF_def_2023,390,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
41
|
+
TMF_def_2024,400,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_def_per_year_prep
|
|
42
|
+
TMF_deg_2000,410,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
43
|
+
TMF_deg_2001,420,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
44
|
+
TMF_deg_2002,430,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
45
|
+
TMF_deg_2003,440,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
46
|
+
TMF_deg_2004,450,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
47
|
+
TMF_deg_2005,460,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
48
|
+
TMF_deg_2006,470,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
49
|
+
TMF_deg_2007,480,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
50
|
+
TMF_deg_2008,490,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
51
|
+
TMF_deg_2009,500,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
52
|
+
TMF_deg_2010,510,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
53
|
+
TMF_deg_2011,520,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
54
|
+
TMF_deg_2012,530,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
55
|
+
TMF_deg_2013,540,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
56
|
+
TMF_deg_2014,550,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
57
|
+
TMF_deg_2015,560,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
58
|
+
TMF_deg_2016,570,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
59
|
+
TMF_deg_2017,580,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
60
|
+
TMF_deg_2018,590,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
61
|
+
TMF_deg_2019,600,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
62
|
+
TMF_deg_2020,610,,disturbance_before,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
63
|
+
TMF_deg_2021,620,,disturbance_after,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
64
|
+
TMF_deg_2022,630,,disturbance_after,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
65
|
+
TMF_deg_2023,640,,disturbance_after,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
66
|
+
TMF_deg_2024,650,,disturbance_after,NA,0,0,0,float32,1,0,g_tmf_deg_per_year_prep
|
|
67
67
|
GFC_loss_year_2001,660,,disturbance_before,NA,0,0,0,float32,1,0,g_glad_gfc_loss_per_year_prep
|
|
68
68
|
GFC_loss_year_2002,670,,disturbance_before,NA,0,0,0,float32,1,0,g_glad_gfc_loss_per_year_prep
|
|
69
69
|
GFC_loss_year_2003,680,,disturbance_before,NA,0,0,0,float32,1,0,g_glad_gfc_loss_per_year_prep
|
|
@@ -87,114 +87,137 @@ GFC_loss_year_2020,850,,disturbance_before,NA,0,0,0,float32,1,0,g_glad_gfc_loss_
|
|
|
87
87
|
GFC_loss_year_2021,860,,disturbance_after,NA,0,0,0,float32,1,0,g_glad_gfc_loss_per_year_prep
|
|
88
88
|
GFC_loss_year_2022,870,,disturbance_after,NA,0,0,0,float32,1,0,g_glad_gfc_loss_per_year_prep
|
|
89
89
|
GFC_loss_year_2023,880,,disturbance_after,NA,0,0,0,float32,1,0,g_glad_gfc_loss_per_year_prep
|
|
90
|
-
GFC_loss_year_2024,
|
|
91
|
-
RADD_year_2019,
|
|
92
|
-
RADD_year_2020,
|
|
93
|
-
RADD_year_2021,
|
|
94
|
-
RADD_year_2022,
|
|
95
|
-
RADD_year_2023,
|
|
96
|
-
RADD_year_2024,
|
|
97
|
-
RADD_year_2025,
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
90
|
+
GFC_loss_year_2024,890,,disturbance_after,NA,0,0,0,float32,1,0,g_glad_gfc_loss_per_year_prep
|
|
91
|
+
RADD_year_2019,900,,disturbance_before,NA,0,0,0,float32,1,0,g_radd_year_prep
|
|
92
|
+
RADD_year_2020,910,,disturbance_before,NA,0,0,0,float32,1,0,g_radd_year_prep
|
|
93
|
+
RADD_year_2021,920,,disturbance_after,NA,0,0,0,float32,1,0,g_radd_year_prep
|
|
94
|
+
RADD_year_2022,930,,disturbance_after,NA,0,0,0,float32,1,0,g_radd_year_prep
|
|
95
|
+
RADD_year_2023,940,,disturbance_after,NA,0,0,0,float32,1,0,g_radd_year_prep
|
|
96
|
+
RADD_year_2024,950,,disturbance_after,NA,0,0,0,float32,1,0,g_radd_year_prep
|
|
97
|
+
RADD_year_2025,960,,disturbance_after,NA,0,0,0,float32,1,0,g_radd_year_prep
|
|
98
|
+
RADD_year_2026,970,,disturbance_after,NA,0,0,0,float32,1,0,g_radd_year_prep
|
|
99
|
+
DIST_year_2024,980,,disturbance_after,NA,0,0,0,float32,1,0,g_glad_dist_year_prep
|
|
100
|
+
DIST_year_2025,990,,disturbance_after,NA,0,0,0,float32,1,0,g_glad_dist_year_prep
|
|
101
|
+
DIST_year_2026,1000,,disturbance_after,NA,0,0,0,float32,1,0,g_glad_dist_year_prep
|
|
102
|
+
GLAD-L_year_2017,1010,,disturbance_before,NA,0,0,0,float32,1,0,g_glad_l_year_prep
|
|
103
|
+
GLAD-L_year_2018,1040,,disturbance_before,NA,0,0,0,float32,1,0,g_glad_l_year_prep
|
|
104
|
+
GLAD-L_year_2019,1050,,disturbance_before,NA,0,0,0,float32,1,0,g_glad_l_year_prep
|
|
105
|
+
GLAD-L_year_2020,1060,,disturbance_before,NA,0,0,0,float32,1,0,g_glad_l_year_prep
|
|
106
|
+
GLAD-L_year_2021,1070,,disturbance_after,NA,0,0,0,float32,1,0,g_glad_l_year_prep
|
|
107
|
+
GLAD-L_year_2022,1080,,disturbance_after,NA,0,0,0,float32,1,0,g_glad_l_year_prep
|
|
108
|
+
GLAD-L_year_2023,1090,,disturbance_after,NA,0,0,0,float32,1,0,g_glad_l_year_prep
|
|
109
|
+
GLAD-L_year_2025,1100,,disturbance_after,NA,0,0,0,float32,1,0,g_glad_l_year_prep
|
|
110
|
+
GLAD-L_year_2026,1110,,disturbance_after,NA,0,0,0,float32,1,0,g_glad_l_year_prep
|
|
111
|
+
GLAD-S2_year_2019,1120,,disturbance_before,NA,0,0,0,float32,1,0,g_glad_s2_year_prep
|
|
112
|
+
GLAD-S2_year_2020,1130,,disturbance_before,NA,0,0,0,float32,1,0,g_glad_s2_year_prep
|
|
113
|
+
GLAD-S2_year_2021,1140,,disturbance_after,NA,0,0,0,float32,1,0,g_glad_s2_year_prep
|
|
114
|
+
GLAD-S2_year_2022,1150,,disturbance_after,NA,0,0,0,float32,1,0,g_glad_s2_year_prep
|
|
115
|
+
GLAD-S2_year_2023,1160,,disturbance_after,NA,0,0,0,float32,1,0,g_glad_s2_year_prep
|
|
116
|
+
GLAD-S2_year_2024,1170,,disturbance_after,NA,0,0,0,float32,1,0,g_glad_s2_year_prep
|
|
117
|
+
GLAD-S2_year_2025,1180,,disturbance_after,NA,0,0,0,float32,1,0,g_glad_s2_year_prep
|
|
118
|
+
GLAD-S2_year_2026,1190,,disturbance_after,NA,0,0,0,float32,1,0,g_glad_s2_year_prep
|
|
119
|
+
ESA_fire_2001,1200,,disturbance_before,NA,0,0,0,float32,1,0,g_esa_fire_prep
|
|
120
|
+
ESA_fire_2002,1210,,disturbance_before,NA,0,0,0,float32,1,0,g_esa_fire_prep
|
|
121
|
+
ESA_fire_2003,1220,,disturbance_before,NA,0,0,0,float32,1,0,g_esa_fire_prep
|
|
122
|
+
ESA_fire_2004,1230,,disturbance_before,NA,0,0,0,float32,1,0,g_esa_fire_prep
|
|
123
|
+
ESA_fire_2005,1240,,disturbance_before,NA,0,0,0,float32,1,0,g_esa_fire_prep
|
|
124
|
+
ESA_fire_2006,1250,,disturbance_before,NA,0,0,0,float32,1,0,g_esa_fire_prep
|
|
125
|
+
ESA_fire_2007,1260,,disturbance_before,NA,0,0,0,float32,1,0,g_esa_fire_prep
|
|
126
|
+
ESA_fire_2008,1270,,disturbance_before,NA,0,0,0,float32,1,0,g_esa_fire_prep
|
|
127
|
+
ESA_fire_2009,1280,,disturbance_before,NA,0,0,0,float32,1,0,g_esa_fire_prep
|
|
128
|
+
ESA_fire_2010,1290,,disturbance_before,NA,0,0,0,float32,1,0,g_esa_fire_prep
|
|
129
|
+
ESA_fire_2011,1300,,disturbance_before,NA,0,0,0,float32,1,0,g_esa_fire_prep
|
|
130
|
+
ESA_fire_2012,1310,,disturbance_before,NA,0,0,0,float32,1,0,g_esa_fire_prep
|
|
131
|
+
ESA_fire_2013,1320,,disturbance_before,NA,0,0,0,float32,1,0,g_esa_fire_prep
|
|
132
|
+
ESA_fire_2014,1330,,disturbance_before,NA,0,0,0,float32,1,0,g_esa_fire_prep
|
|
133
|
+
ESA_fire_2015,1340,,disturbance_before,NA,0,0,0,float32,1,0,g_esa_fire_prep
|
|
134
|
+
ESA_fire_2016,1350,,disturbance_before,NA,0,0,0,float32,1,0,g_esa_fire_prep
|
|
135
|
+
ESA_fire_2017,1360,,disturbance_before,NA,0,0,0,float32,1,0,g_esa_fire_prep
|
|
136
|
+
ESA_fire_2018,1370,,disturbance_before,NA,0,0,0,float32,1,0,g_esa_fire_prep
|
|
137
|
+
ESA_fire_2019,1380,,disturbance_before,NA,0,0,0,float32,1,0,g_esa_fire_prep
|
|
138
|
+
ESA_fire_2020,1390,,disturbance_before,NA,0,0,0,float32,1,0,g_esa_fire_prep
|
|
139
|
+
MODIS_fire_2000,1400,,disturbance_before,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
140
|
+
MODIS_fire_2001,1410,,disturbance_before,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
141
|
+
MODIS_fire_2002,1420,,disturbance_before,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
142
|
+
MODIS_fire_2003,1430,,disturbance_before,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
143
|
+
MODIS_fire_2004,1440,,disturbance_before,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
144
|
+
MODIS_fire_2005,1450,,disturbance_before,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
145
|
+
MODIS_fire_2006,1460,,disturbance_before,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
146
|
+
MODIS_fire_2007,1470,,disturbance_before,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
147
|
+
MODIS_fire_2008,1480,,disturbance_before,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
148
|
+
MODIS_fire_2009,1490,,disturbance_before,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
149
|
+
MODIS_fire_2010,1500,,disturbance_before,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
150
|
+
MODIS_fire_2011,1510,,disturbance_before,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
151
|
+
MODIS_fire_2012,1520,,disturbance_before,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
152
|
+
MODIS_fire_2013,1530,,disturbance_before,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
153
|
+
MODIS_fire_2014,1540,,disturbance_before,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
154
|
+
MODIS_fire_2015,1550,,disturbance_before,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
155
|
+
MODIS_fire_2016,1560,,disturbance_before,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
156
|
+
MODIS_fire_2017,1570,,disturbance_before,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
157
|
+
MODIS_fire_2018,1580,,disturbance_before,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
158
|
+
MODIS_fire_2019,1590,,disturbance_before,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
159
|
+
MODIS_fire_2020,1600,,disturbance_before,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
160
|
+
MODIS_fire_2021,1610,,disturbance_after,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
161
|
+
MODIS_fire_2022,1620,,disturbance_after,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
162
|
+
MODIS_fire_2023,1630,,disturbance_after,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
163
|
+
MODIS_fire_2024,1640,,disturbance_after,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
164
|
+
MODIS_fire_2025,1650,,disturbance_after,NA,0,0,0,float32,1,0,g_modis_fire_prep
|
|
165
|
+
TMF_deg_before_2020,1660,,disturbance_before,NA,1,1,0,float32,1,0,g_tmf_deg_before_2020_prep
|
|
166
|
+
TMF_def_before_2020,1670,,disturbance_before,NA,1,1,0,float32,1,0,g_tmf_def_before_2020_prep
|
|
167
|
+
GFC_loss_before_2020,1680,,disturbance_before,NA,1,1,0,float32,1,0,g_glad_gfc_loss_before_2020_prep
|
|
168
|
+
ESA_fire_before_2020,1690,,disturbance_before,NA,0,1,0,float32,1,0,g_esa_fire_before_2020_prep
|
|
169
|
+
MODIS_fire_before_2020,1700,,disturbance_before,NA,0,1,0,float32,1,0,g_modis_fire_before_2020_prep
|
|
170
|
+
RADD_before_2020,1710,,disturbance_before,NA,1,1,0,float32,1,0,g_radd_before_2020_prep
|
|
171
|
+
GLAD-L_before_2020,1715,,disturbance_before,NA,1,1,0,float32,1,0,g_glad_l_before_2020_prep
|
|
172
|
+
GLAD-S2_before_2020,1718,,disturbance_before,NA,1,1,0,float32,1,0,g_glad_s2_before_2020_prep
|
|
173
|
+
TMF_deg_after_2020,1720,,disturbance_after,NA,1,1,0,float32,1,0,g_tmf_deg_after_2020_prep
|
|
174
|
+
TMF_def_after_2020,1730,,disturbance_after,NA,1,1,0,float32,1,0,g_tmf_def_after_2020_prep
|
|
175
|
+
GFC_loss_after_2020,1740,,disturbance_after,NA,1,1,0,float32,1,0,g_glad_gfc_loss_after_2020_prep
|
|
176
|
+
MODIS_fire_after_2020,1750,,disturbance_after,NA,0,1,0,float32,1,0,g_modis_fire_after_2020_prep
|
|
177
|
+
RADD_after_2020,1760,,disturbance_after,NA,1,1,0,float32,1,0,g_radd_after_2020_prep
|
|
178
|
+
DIST_after_2020,1770,,disturbance_after,NA,1,1,0,float32,1,0,g_glad_dist_after_2020_prep
|
|
179
|
+
GLAD-L_after_2020,1780,,disturbance_after,NA,1,1,0,float32,1,0,g_glad_l_after_2020_prep
|
|
180
|
+
GLAD-S2_after_2020,1790,,disturbance_after,NA,1,1,0,float32,1,0,g_glad_s2_after_2020_prep
|
|
181
|
+
GFT_primary,1800,,NA,primary,0,1,0,float32,1,0,g_gft_primary_prep
|
|
182
|
+
IFL_2020,1810,,NA,primary,0,1,0,float32,1,0,g_ifl_2020_prep
|
|
183
|
+
European_Primary_Forest,1820,,NA,primary,0,1,0,float32,1,0,g_epfd_prep
|
|
184
|
+
GFT_naturally_regenerating,1830,,NA,naturally_reg_2020,0,1,0,float32,1,0,g_gft_nat_reg_prep
|
|
185
|
+
GFT_planted_plantation,1840,,NA,planted_plantation_2020,0,1,0,float32,1,0,g_gft_plantation_prep
|
|
186
|
+
IIASA_planted_plantation,1850,,NA,planted_plantation_2020,0,1,0,float32,1,0,g_iiasa_planted_prep
|
|
187
|
+
TMF_regrowth_2023,1860,,NA,treecover_after_2020,0,1,0,float32,1,0,g_tmf_regrowth_prep
|
|
188
|
+
ESRI_2023_TC,1870,,NA,treecover_after_2020,0,1,0,float32,1,0,g_esri_2023_tc_prep
|
|
189
|
+
Oil_palm_2023_FDaP,1880,,NA,agri_after_2020,0,1,0,float32,1,0,g_fdap_palm_2023_prep
|
|
190
|
+
Rubber_2023_FDaP,1890,,NA,agri_after_2020,0,1,0,float32,1,0,g_fdap_rubber_2023_prep
|
|
191
|
+
Coffee_FDaP_2023,1900,,NA,agri_after_2020,0,1,0,float32,1,0,g_fdap_coffee_2023_prep
|
|
192
|
+
Cocoa_2023_FDaP,1910,,NA,agri_after_2020,0,1,0,float32,1,0,g_fdap_cocoa_2023_prep
|
|
193
|
+
ESRI_crop_gain_2020_2023,1920,,NA,agri_after_2020,0,1,0,float32,1,0,g_esri_2020_2023_crop_prep
|
|
194
|
+
GFW_logging_before_2020,1930,,NA,logging_concession,0,1,0,float32,1,0,g_logging_concessions_prep
|
|
195
|
+
nCO_ideam_forest_2020,1940,CO,treecover,NA,1,1,0,float32,1,0,nco_ideam_forest_2020_prep
|
|
196
|
+
nCO_ideam_eufo_commission_2020,1950,CO,commodities,NA,1,1,0,float32,1,0,nco_ideam_eufo_commission_2020_prep
|
|
197
|
+
nBR_INPE_TC_primary_forest_Amazon_2020,1960,BR,treecover,primary,1,1,0,float32,1,0,nbr_terraclass_amz20_primary_prep
|
|
198
|
+
nBR_INPE_TC_secondary_forest_Amazon_2020,1970,BR,treecover,naturally_reg_2020,1,1,0,float32,1,0,nbr_terraclass_amz20_secondary_prep
|
|
199
|
+
nBR_BFS_primary_forest_Pantanal_2020,1980,BR,treecover,primary,1,1,0,float32,1,0,nbr_bfs_ptn_f20_prep
|
|
200
|
+
nBR_BFS_primary_forest_Caatinga_2020,1990,BR,treecover,primary,1,1,0,float32,1,0,nbr_bfs_caat_f20_prep
|
|
201
|
+
nBR_BFS_primary_forest_AtlanticForest_2020,2000,BR,treecover,primary,1,1,0,float32,1,0,nbr_bfs_atlf_f20_prep
|
|
202
|
+
nBR_BFS_primary_forest_Pampa_2020,2010,BR,treecover,primary,1,1,0,float32,1,0,nbr_bfs_pmp_f20_prep
|
|
203
|
+
nBR_BFS_primary_and_secondary_forest_Cerrado_2020,2020,BR,treecover,naturally_reg_2020,1,1,0,float32,1,0,nbr_bfs_cer_f20_prep
|
|
204
|
+
nBR_MapBiomas_col9_forest_Brazil_2020,2030,BR,treecover,naturally_reg_2020,1,1,0,float32,1,0,nbr_mapbiomasc9_f20_prep
|
|
205
|
+
nBR_INPE_TCsilviculture_Amazon_2020,2040,BR,treecover,planted_plantation_2020,1,1,0,float32,1,0,nbr_terraclass_amz20_silv_prep
|
|
206
|
+
nBR_INPE_TCsilviculture_Cerrado_2020,2050,BR,treecover,planted_plantation_2020,1,1,0,float32,1,0,nbr_terraclass_silv_cer20_prep
|
|
207
|
+
nBR_MapBiomas_col9_silviculture_Brazil_2020,2060,BR,treecover,planted_plantation_2020,1,1,0,float32,1,0,nbr_mapbiomasc9_silv20_prep
|
|
208
|
+
nBR_PRODES_deforestation_Brazil_before_2020,2070,BR,disturbance_before,NA,1,1,0,float32,1,0,nbr_prodes_before_2020_prep
|
|
209
|
+
nBR_DETER_forestdegradation_Amazon_before_2020,2080,BR,disturbance_before,NA,1,1,0,float32,1,0,nbr_deter_amazon_before_2020_prep
|
|
210
|
+
nBR_PRODES_deforestation_Brazil_after_2020,2090,BR,disturbance_after,NA,1,1,0,float32,1,0,nbr_prodes_after_2020_prep
|
|
211
|
+
nBR_DETER_forestdegradation_Amazon_after_2020,2100,BR,disturbance_after,NA,1,1,0,float32,1,0,nbr_deter_amazon_after_2020_prep
|
|
212
|
+
nBR_INPE_TCamz_cer_perennial_2020,2110,BR,commodities,NA,1,1,0,float32,1,0,nbr_terraclass_amz_cer20_pc_prep
|
|
213
|
+
nBR_MapBiomas_col9_coffee_2020,2120,BR,commodities,NA,1,1,0,float32,1,0,nbr_mapbiomasc9_cof_prep
|
|
214
|
+
nBR_MapBiomas_col9_palmoil_2020,2130,BR,commodities,NA,1,1,0,float32,1,0,nbr_mapbiomasc9_po_prep
|
|
215
|
+
nBR_MapBiomas_col9_pc_2020,2140,BR,commodities,NA,1,1,0,float32,1,0,nbr_mapbiomasc9_pc_prep
|
|
216
|
+
nBR_INPE_TCamz_cer_annual_2020,2150,BR,commodities,NA,1,1,0,float32,1,0,nbr_terraclass_amz_cer20_ac_prep
|
|
217
|
+
nBR_MapBiomas_col9_soy_2020,2160,BR,commodities,NA,1,1,0,float32,1,0,nbr_mapbiomasc9_soy_prep
|
|
218
|
+
nBR_MapBiomas_col9_annual_crops_2020,2170,BR,commodities,NA,1,1,0,float32,1,0,nbr_mapbiomasc9_ac_prep
|
|
219
|
+
nBR_INPE_TCamz_pasture_2020,2180,BR,commodities,NA,1,1,0,float32,1,0,nbr_terraclass_amz20_pasture_prep
|
|
220
|
+
nBR_INPE_TCcer_pasture_2020,2190,BR,commodities,NA,1,1,0,float32,1,0,nbr_terraclass_cer20_ac_prep
|
|
221
|
+
nBR_MapBiomas_col9_pasture_2020,2200,BR,commodities,NA,1,1,0,float32,1,0,nbr_mapbiomasc9_pasture_prep
|
|
222
|
+
nCI_Cocoa_bnetd,2210,CI,commodities,NA,1,1,0,float32,1,0,nci_ocs2020_prep
|
|
223
|
+
nCM_Treecover_2020,2220,CM,treecover,NA,1,0,0,float32,1,0,ncm_treecover_2020_prep
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: openforis-whisp
|
|
3
|
-
Version: 3.0.
|
|
3
|
+
Version: 3.0.0a9
|
|
4
4
|
Summary: Whisp (What is in that plot) is an open-source solution which helps to produce relevant forest monitoring information and support compliance with deforestation-related regulations.
|
|
5
5
|
License: MIT
|
|
6
6
|
Keywords: whisp,geospatial,data-processing
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
openforis_whisp/__init__.py,sha256=YihdNrybfFygwcwa2Bis59V7sYpNR9aAxL-VNO4dqEI,3659
|
|
2
|
-
openforis_whisp/advanced_stats.py,sha256=
|
|
2
|
+
openforis_whisp/advanced_stats.py,sha256=rqSOAWpVGOaJiclf6A6vsB4RX55vITcS93LAr9z4oZ0,102048
|
|
3
3
|
openforis_whisp/data_checks.py,sha256=jxShBiihtX0rel__Vkzu1bZfqgVQIx_l-uPP1OeCaKY,37015
|
|
4
4
|
openforis_whisp/data_conversion.py,sha256=L2IsiUyQUt3aHgSYGbIhgPGwM7eyS3nLVEoNO9YqQeM,21888
|
|
5
|
-
openforis_whisp/datasets.py,sha256=
|
|
5
|
+
openforis_whisp/datasets.py,sha256=8IGh0nY0dutrKYraf6-b4Je0893wIHpdGdkgVf5QL8g,68483
|
|
6
6
|
openforis_whisp/logger.py,sha256=gFkRTwJDJKIBWcHDOK74Uln3JM7fAybURo7pQpGL790,3395
|
|
7
7
|
openforis_whisp/parameters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
8
|
openforis_whisp/parameters/config_runtime.py,sha256=NOo39MAi60XCwEx5pwkS0EHKJBh0XY1q06y4j0HAABg,1421
|
|
9
9
|
openforis_whisp/parameters/lookup_context_and_metadata.csv,sha256=KgK0ik_Gd4t_Nq5cUkGPT4ZFZVO93HWSG82jRrOukt4,1298
|
|
10
10
|
openforis_whisp/parameters/lookup_gaul1_admin.py,sha256=cQr5liRdXi85QieTxrz4VAkn0COvRCp82ZV0dYFWOio,474980
|
|
11
|
-
openforis_whisp/parameters/lookup_gee_datasets.csv,sha256=
|
|
11
|
+
openforis_whisp/parameters/lookup_gee_datasets.csv,sha256=45WvutxbkZbdTZkwTHPbff03Xdxmw3WfXyP3GMTr5eE,19483
|
|
12
12
|
openforis_whisp/pd_schemas.py,sha256=0z-oPmYIDUIn7mNY41W_uUpmTwjoR7e254mOCoHVsOg,2878
|
|
13
13
|
openforis_whisp/reformat.py,sha256=i_ckmxuOirrfRHbeY05_5JajrJ00T5MoZ_jgzj_h0wA,32939
|
|
14
14
|
openforis_whisp/risk.py,sha256=tVkgVdRpdxaCBtyCjw8Z8MQt7EV9lGy34Bz8r_1Qb8Y,37135
|
|
15
15
|
openforis_whisp/stats.py,sha256=RJ_PJSXyvz9FnoHeQ3tqrfhhWibXjz9AlX27suSKiO4,63319
|
|
16
16
|
openforis_whisp/utils.py,sha256=AISWF-MpfFdYkhd6bei4BViw2Iag20mmq61ykrF9YTk,31287
|
|
17
|
-
openforis_whisp-3.0.
|
|
18
|
-
openforis_whisp-3.0.
|
|
19
|
-
openforis_whisp-3.0.
|
|
20
|
-
openforis_whisp-3.0.
|
|
17
|
+
openforis_whisp-3.0.0a9.dist-info/LICENSE,sha256=nqyqICO95iw_iwzP1t_IIAf7ZX3DPbL_M9WyQfh2q1k,1085
|
|
18
|
+
openforis_whisp-3.0.0a9.dist-info/METADATA,sha256=DRndfId3nvxBSKIf5Yw8g9xi3g6inyuJp2IlmKwfE3c,14173
|
|
19
|
+
openforis_whisp-3.0.0a9.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
|
|
20
|
+
openforis_whisp-3.0.0a9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|