dea-tools 0.4.5.dev7__tar.gz → 0.4.6.dev1__tar.gz
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.
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/PKG-INFO +1 -1
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/bandindices.py +60 -14
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/.gitignore +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/LICENSE +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/README.md +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/__init__.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/__main__.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/app/__init__.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/app/animations.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/app/changefilmstrips.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/app/crophealth.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/app/deacoastlines.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/app/geomedian.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/app/imageexport.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/app/miningrehab.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/app/wetlandsinsighttool.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/app/widgetconstructors.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/bom.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/classification.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/coastal.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/dask.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/datahandling.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/landcover.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/maps.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/mosaics/README.md +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/mosaics/__init__.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/mosaics/cog.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/mosaics/styling.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/mosaics/utils.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/mosaics/vrt.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/plotting.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/spatial.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/temporal.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/validation.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/waterbodies.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/Tools/dea_tools/wetlands.py +0 -0
- {dea_tools-0.4.5.dev7 → dea_tools-0.4.6.dev1}/pyproject.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dea-tools
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.6.dev1
|
|
4
4
|
Summary: Open-source tools for geospatial analysis with Digital Earth Australia, Open Data Cube, and Xarray
|
|
5
5
|
Project-URL: Homepage, https://knowledge.dea.ga.gov.au/notebooks/Tools/
|
|
6
6
|
Project-URL: Repository, https://github.com/GeoscienceAustralia/dea-notebooks
|
|
@@ -25,7 +25,16 @@ import numpy as np
|
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
# Define custom functions
|
|
28
|
-
def calculate_indices(
|
|
28
|
+
def calculate_indices(
|
|
29
|
+
ds,
|
|
30
|
+
index=None,
|
|
31
|
+
collection=None,
|
|
32
|
+
custom_varname=None,
|
|
33
|
+
normalise=True,
|
|
34
|
+
drop=False,
|
|
35
|
+
inplace=False,
|
|
36
|
+
verbose=True,
|
|
37
|
+
):
|
|
29
38
|
"""
|
|
30
39
|
Takes an xarray dataset containing spectral bands, calculates one of
|
|
31
40
|
a set of remote sensing indices, and adds the resulting array as a
|
|
@@ -75,6 +84,8 @@ def calculate_indices(ds, index=None, collection=None, custom_varname=None, norm
|
|
|
75
84
|
* ``'NDTI2'`` (Normalised Difference Turbidity Index, Lacaux et al., 2007)
|
|
76
85
|
* ``'NDVI'`` (Normalised Difference Vegetation Index, Rouse 1973)
|
|
77
86
|
* ``'NDWI'`` (Normalised Difference Water Index, McFeeters 1996)
|
|
87
|
+
* ``'NIRv'`` (Near-Infrared Reflectance of Vegetation, Badgley et al. 2017)
|
|
88
|
+
* ``'kNDVI'`` (Kernel Normalized Difference Vegetation Index, Camps-Valls et al. 2021)
|
|
78
89
|
* ``'SAVI'`` (Soil Adjusted Vegetation Index, Huete 1988)
|
|
79
90
|
* ``'TCB'`` (Tasseled Cap Brightness, Crist 1985)
|
|
80
91
|
* ``'TCG'`` (Tasseled Cap Greeness, Crist 1985)
|
|
@@ -121,6 +132,8 @@ def calculate_indices(ds, index=None, collection=None, custom_varname=None, norm
|
|
|
121
132
|
array in-place, adding bands to the input dataset. The default
|
|
122
133
|
is `inplace=False`, which will instead make a new copy of the
|
|
123
134
|
original data (and use twice the memory).
|
|
135
|
+
verbose : bool, optional
|
|
136
|
+
If True, print statements will be returned
|
|
124
137
|
|
|
125
138
|
Returns
|
|
126
139
|
-------
|
|
@@ -140,23 +153,33 @@ def calculate_indices(ds, index=None, collection=None, custom_varname=None, norm
|
|
|
140
153
|
# Capture input band names in order to drop these if drop=True
|
|
141
154
|
if drop:
|
|
142
155
|
bands_to_drop = list(ds.data_vars)
|
|
143
|
-
|
|
156
|
+
if verbose:
|
|
157
|
+
print(f"Dropping bands {bands_to_drop}")
|
|
144
158
|
|
|
145
159
|
# Dictionary containing remote sensing index band recipes
|
|
146
160
|
index_dict = {
|
|
147
161
|
# Normalised Difference Vegation Index, Rouse 1973
|
|
148
162
|
"NDVI": lambda ds: (ds.nir - ds.red) / (ds.nir + ds.red),
|
|
149
|
-
#
|
|
163
|
+
# Kernel Normalised Difference Vegation Index,
|
|
150
164
|
# Camps-Valls et al. 2021
|
|
151
165
|
"kNDVI": lambda ds: np.tanh(((ds.nir - ds.red) / (ds.nir + ds.red)) ** 2),
|
|
152
166
|
# Enhanced Vegetation Index, Huete 2002
|
|
153
|
-
"EVI": lambda ds: (
|
|
167
|
+
"EVI": lambda ds: (
|
|
168
|
+
(2.5 * (ds.nir - ds.red)) / (ds.nir + 6 * ds.red - 7.5 * ds.blue + 1)
|
|
169
|
+
),
|
|
154
170
|
# Leaf Area Index, Boegh 2002
|
|
155
|
-
"LAI": lambda ds: (
|
|
171
|
+
"LAI": lambda ds: (
|
|
172
|
+
3.618
|
|
173
|
+
* ((2.5 * (ds.nir - ds.red)) / (ds.nir + 6 * ds.red - 7.5 * ds.blue + 1))
|
|
174
|
+
- 0.118
|
|
175
|
+
),
|
|
156
176
|
# Soil Adjusted Vegetation Index, Huete 1988
|
|
157
177
|
"SAVI": lambda ds: ((1.5 * (ds.nir - ds.red)) / (ds.nir + ds.red + 0.5)),
|
|
158
178
|
# Mod. Soil Adjusted Vegetation Index, Qi et al. 1994
|
|
159
|
-
"MSAVI": lambda ds: (
|
|
179
|
+
"MSAVI": lambda ds: (
|
|
180
|
+
(2 * ds.nir + 1 - ((2 * ds.nir + 1) ** 2 - 8 * (ds.nir - ds.red)) ** 0.5)
|
|
181
|
+
/ 2
|
|
182
|
+
),
|
|
160
183
|
# Normalised Difference Moisture Index, Gao 1996
|
|
161
184
|
"NDMI": lambda ds: (ds.nir - ds.swir1) / (ds.nir + ds.swir1),
|
|
162
185
|
# Normalised Burn Ratio, Lopez Garcia 1991
|
|
@@ -171,6 +194,9 @@ def calculate_indices(ds, index=None, collection=None, custom_varname=None, norm
|
|
|
171
194
|
# Normalised Difference Tillage Index,
|
|
172
195
|
# Van Deventer et al. 1997
|
|
173
196
|
"NDTI": lambda ds: (ds.swir1 - ds.swir2) / (ds.swir1 + ds.swir2),
|
|
197
|
+
# Near-Infrared Reflectance of Vegetation,
|
|
198
|
+
# Badgley et al. 2017
|
|
199
|
+
"NIRv": lambda ds: ((ds.nir - ds.red) / (ds.nir + ds.red)) * ds.nir,
|
|
174
200
|
# Normalised Difference Turbidity Index,
|
|
175
201
|
# Lacaux et al., 2007
|
|
176
202
|
"NDTI2": lambda ds: (ds.red - ds.green) / (ds.red + ds.green),
|
|
@@ -181,19 +207,32 @@ def calculate_indices(ds, index=None, collection=None, custom_varname=None, norm
|
|
|
181
207
|
# Normalised Difference Built-Up Index, Zha 2003
|
|
182
208
|
"NDBI": lambda ds: (ds.swir1 - ds.nir) / (ds.swir1 + ds.nir),
|
|
183
209
|
# Built-Up Index, He et al. 2010
|
|
184
|
-
"BUI": lambda ds: ((ds.swir1 - ds.nir) / (ds.swir1 + ds.nir))
|
|
210
|
+
"BUI": lambda ds: ((ds.swir1 - ds.nir) / (ds.swir1 + ds.nir))
|
|
211
|
+
- ((ds.nir - ds.red) / (ds.nir + ds.red)),
|
|
185
212
|
# Built-up Area Extraction Index, Bouzekri et al. 2015
|
|
186
213
|
"BAEI": lambda ds: (ds.red + 0.3) / (ds.green + ds.swir1),
|
|
187
214
|
# New Built-up Index, Jieli et al. 2010
|
|
188
215
|
"NBI": lambda ds: (ds.swir1 + ds.red) / ds.nir,
|
|
189
216
|
# Bare Soil Index, Rikimaru et al. 2002
|
|
190
|
-
"BSI": lambda ds: ((ds.swir1 + ds.red) - (ds.nir + ds.blue))
|
|
217
|
+
"BSI": lambda ds: ((ds.swir1 + ds.red) - (ds.nir + ds.blue))
|
|
218
|
+
/ ((ds.swir1 + ds.red) + (ds.nir + ds.blue)),
|
|
191
219
|
# Automated Water Extraction Index (no shadows), Feyisa 2014
|
|
192
|
-
"AWEI_ns": lambda ds: (
|
|
220
|
+
"AWEI_ns": lambda ds: (
|
|
221
|
+
4 * (ds.green - ds.swir1) - (0.25 * ds.nir * +2.75 * ds.swir2)
|
|
222
|
+
),
|
|
193
223
|
# Automated Water Extraction Index (shadows), Feyisa 2014
|
|
194
|
-
"AWEI_sh": lambda ds: (
|
|
224
|
+
"AWEI_sh": lambda ds: (
|
|
225
|
+
ds.blue + 2.5 * ds.green - 1.5 * (ds.nir + ds.swir1) - 0.25 * ds.swir2
|
|
226
|
+
),
|
|
195
227
|
# Water Index, Fisher 2016
|
|
196
|
-
"WI": lambda ds: (
|
|
228
|
+
"WI": lambda ds: (
|
|
229
|
+
1.7204
|
|
230
|
+
+ 171 * ds.green
|
|
231
|
+
+ 3 * ds.red
|
|
232
|
+
- 70 * ds.nir
|
|
233
|
+
- 45 * ds.swir1
|
|
234
|
+
- 71 * ds.swir2
|
|
235
|
+
),
|
|
197
236
|
# Tasseled Cap Wetness, Crist 1985
|
|
198
237
|
"TCW": lambda ds: (
|
|
199
238
|
0.0315 * ds.blue
|
|
@@ -277,7 +316,10 @@ def calculate_indices(ds, index=None, collection=None, custom_varname=None, norm
|
|
|
277
316
|
"list of valid options for `index` (e.g. 'NDVI')"
|
|
278
317
|
)
|
|
279
318
|
|
|
280
|
-
if
|
|
319
|
+
if (
|
|
320
|
+
index in ["WI", "BAEI", "AWEI_ns", "AWEI_sh", "EVI", "LAI", "SAVI", "MSAVI"]
|
|
321
|
+
and not normalise
|
|
322
|
+
):
|
|
281
323
|
warnings.warn(
|
|
282
324
|
f"\nA coefficient-based index ('{index}') normally "
|
|
283
325
|
"applied to surface reflectance values in the \n"
|
|
@@ -324,7 +366,9 @@ def calculate_indices(ds, index=None, collection=None, custom_varname=None, norm
|
|
|
324
366
|
}
|
|
325
367
|
|
|
326
368
|
# Rename bands in dataset to use simple names (e.g. 'red')
|
|
327
|
-
bands_to_rename = {
|
|
369
|
+
bands_to_rename = {
|
|
370
|
+
a: b for a, b in bandnames_dict.items() if a in ds.variables
|
|
371
|
+
}
|
|
328
372
|
|
|
329
373
|
elif collection == "ga_s2_3":
|
|
330
374
|
# Dictionary mapping full data names to simpler 'red' alias names
|
|
@@ -348,7 +392,9 @@ def calculate_indices(ds, index=None, collection=None, custom_varname=None, norm
|
|
|
348
392
|
}
|
|
349
393
|
|
|
350
394
|
# Rename bands in dataset to use simple names (e.g. 'red')
|
|
351
|
-
bands_to_rename = {
|
|
395
|
+
bands_to_rename = {
|
|
396
|
+
a: b for a, b in bandnames_dict.items() if a in ds.variables
|
|
397
|
+
}
|
|
352
398
|
|
|
353
399
|
elif collection == "ga_gm_3":
|
|
354
400
|
# Pass an empty dict as no bands need renaming
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|