Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
gts2
gts2_client
Commits
012dacc0
Commit
012dacc0
authored
Feb 19, 2018
by
Niklas Bohn
Browse files
Improved extraction to netcdf file
parent
de3f1e9f
Pipeline
#2616
passed with stages
in 17 minutes and 4 seconds
Changes
1
Pipelines
1
Show whitespace changes
Inline
Side-by-side
gts2_client/gts2_client.py
View file @
012dacc0
...
...
@@ -581,24 +581,40 @@ def json_to_netcdf(out_mode, api_result, outpath, out_prefix, geo_ll, geo_ur, st
"interest, time of interest and wanted band combination"
f
.
acknowledgement
=
api_result
[
'Acknowledgement'
]
for
key
in
api_result
.
keys
():
if
key
==
'
Results'
or
key
==
'Metadata
'
:
if
key
==
'
ControlValues
'
:
key_group
=
f
.
createGroup
(
key
)
[
setattr
(
key_group
,
attr
,
api_result
[
key
][
attr
])
for
attr
in
api_result
[
key
].
keys
()]
if
key
==
'Request'
:
key_group
=
f
.
createGroup
(
key
)
[
setattr
(
key_group
,
attr
.
replace
(
"-"
,
"_"
),
str
(
api_result
[
key
][
attr
]))
for
attr
in
api_result
[
key
].
keys
()
if
attr
!=
'bands'
and
attr
!=
'resolution'
]
key_group
.
setncattr_string
(
'bands'
,
api_result
[
key
][
'bands'
])
key_group
.
setncattr_string
(
'resolution'
,
api_result
[
key
][
'resolution'
])
if
key
==
'RequestGeoInfo'
:
key_group
=
f
.
createGroup
(
key
)
tile_group
=
key_group
.
createGroup
(
'Tiles'
)
[
setattr
(
tile_group
,
attr
,
api_result
[
key
][
'Tiles'
][
attr
])
for
attr
in
api_result
[
key
][
'Tiles'
].
keys
()]
if
key
==
'Results'
:
key_group
=
f
.
createGroup
(
key
)
for
tile
in
api_result
[
key
].
keys
():
tile_group
=
key_group
.
createGroup
(
tile
)
for
band
in
api_result
[
key
][
tile
].
keys
():
band_group
=
tile_group
.
createGroup
(
band
)
band_group
.
time
=
api_result
[
key
][
tile
][
band
][
'
time
'
]
#
band_group.se
nsor =
api_result[key][tile][band]['
sensor'] <-- please include this
band_group
.
setncattr_string
(
'sensor'
,
api_result
[
key
][
tile
][
band
][
'
sensor
'
]
)
band_group
.
se
tncattr_string
(
'time'
,
api_result
[
key
][
tile
][
band
][
'
time'
])
for
data_info
in
api_result
[
key
][
tile
][
band
].
keys
():
if
data_info
!
=
'
time
'
:
if
data_info
=
=
'
mapinfo
'
:
data_info_group
=
band_group
.
createGroup
(
data_info
)
[
setattr
(
data_info_group
,
attr
,
api_result
[
key
][
tile
][
band
][
data_info
][
attr
])
for
attr
in
api_result
[
key
][
tile
][
band
][
data_info
].
keys
()]
if
data_info
==
'data'
:
band_arr
=
np
.
asarray
(
api_result
[
key
][
tile
][
band
][
data_info
][
0
])
data_info_group
.
createDimension
(
'x'
,
band_arr
.
shape
[
0
])
data_info_group
.
createDimension
(
'y'
,
band_arr
.
shape
[
1
])
data
=
data_info_group
.
createVariable
(
'Data'
,
'i4'
,
(
'x'
,
'y'
),
fill_value
=-
1
)
data_group
=
band_group
.
createGroup
(
data_info
)
band_arr
=
np
.
asarray
(
api_result
[
key
][
tile
][
band
][
data_info
])
data_group
.
createDimension
(
'x'
,
band_arr
.
shape
[
2
])
data_group
.
createDimension
(
'y'
,
band_arr
.
shape
[
1
])
data_group
.
createDimension
(
't'
,
band_arr
.
shape
[
0
])
data
=
data_group
.
createVariable
(
'Data'
,
'i4'
,
(
'x'
,
'y'
,
't'
),
fill_value
=
255
)
data
.
units
=
"None"
if
level
==
"L1C"
:
data
.
long_name
=
"Top of Atmosphere Reflectance"
...
...
@@ -608,38 +624,55 @@ def json_to_netcdf(out_mode, api_result, outpath, out_prefix, geo_ll, geo_ur, st
data
.
standard_name
=
"boa_reflectance"
data
.
valid_range
=
np
.
array
((
-
2000.0
,
16000.0
))
data
.
actual_range
=
np
.
array
((
np
.
min
(
band_arr
),
np
.
max
(
band_arr
)))
data
[:,
:]
=
band_arr
data_info_group
.
Band
=
band
.
split
(
"_"
)[
0
].
split
(
"B"
)[
-
1
]
data_info_group
.
Resolution
=
band
.
split
(
"_"
)[
-
1
]
data_info_group
.
Central_Wavelength
=
wl
[
str
(
band
.
split
(
"_"
)[
0
])]
if
data_info
==
'mapinfo'
:
[
setattr
(
data_info_group
,
attr
,
str
(
api_result
[
key
][
tile
][
band
][
data_info
][
str
(
attr
)]))
for
attr
in
api_result
[
key
][
tile
][
band
][
data_info
].
keys
()]
data
[:,
:,
:]
=
band_arr
data_group
.
Band
=
band
.
split
(
"_"
)[
0
].
split
(
"B"
)[
-
1
]
data_group
.
Resolution
=
band
.
split
(
"_"
)[
-
1
]
data_group
.
Central_Wavelength
=
wl
[
str
(
band
.
split
(
"_"
)[
0
])]
if
key
==
'Metadata'
:
key_group
=
f
.
createGroup
(
key
)
for
tile
in
api_result
[
key
].
keys
():
tile_group
=
key_group
.
createGroup
(
tile
)
if
tile
==
'MSK_legend'
:
[
setattr
(
tile_group
,
"Class_"
+
str
(
attr
),
api_result
[
key
][
tile
][
attr
])
for
attr
in
api_result
[
key
][
tile
].
keys
()]
else
:
for
msk
in
api_result
[
key
][
tile
].
keys
():
mask_group
=
tile_group
.
createGroup
(
msk
)
if
msk
==
'MSK_20m'
:
[
setattr
(
mask_group
,
attr
,
str
(
api_result
[
key
][
tile
][
msk
][
str
(
attr
)]))
for
attr
in
api_result
[
key
][
tile
][
msk
].
keys
()
if
attr
!=
'data'
]
data_group
=
mask_group
.
createGroup
(
'data'
)
mask_arr
=
np
.
asarray
(
api_result
[
key
][
tile
][
msk
][
'data'
][
0
])
data_group
.
createDimension
(
'x'
,
mask_arr
.
shape
[
0
])
mask_group
.
setncattr_string
(
'time'
,
api_result
[
key
][
tile
][
msk
][
'time'
])
for
data_info
in
api_result
[
key
][
tile
][
msk
].
keys
():
if
data_info
==
'cloud_stats'
:
data_info_group
=
mask_group
.
createGroup
(
data_info
)
data_info_group
.
setncattr_string
(
'cloud_frac'
,
api_result
[
key
][
tile
][
msk
][
data_info
]
[
'cloud_frac'
])
if
data_info
==
'mapinfo'
:
data_info_group
=
mask_group
.
createGroup
(
data_info
)
[
setattr
(
data_info_group
,
attr
,
api_result
[
key
][
tile
][
msk
][
data_info
][
attr
])
for
attr
in
api_result
[
key
][
tile
][
msk
][
data_info
].
keys
()]
if
data_info
==
'stats'
:
data_info_group
=
mask_group
.
createGroup
(
data_info
)
data_info_group
.
setncattr_string
(
'cloud_frac'
,
api_result
[
key
][
tile
][
msk
][
data_info
]
[
'cloud_frac'
])
data_info_group
.
setncattr_string
(
'data_frac'
,
api_result
[
key
][
tile
][
msk
][
data_info
]
[
'data_frac'
])
data_info_group
.
setncattr_string
(
'time'
,
api_result
[
key
][
tile
][
msk
][
data_info
][
'time'
])
if
data_info
==
'data'
:
data_group
=
mask_group
.
createGroup
(
data_info
)
mask_arr
=
np
.
asarray
(
api_result
[
key
][
tile
][
msk
][
data_info
])
data_group
.
createDimension
(
'x'
,
mask_arr
.
shape
[
2
])
data_group
.
createDimension
(
'y'
,
mask_arr
.
shape
[
1
])
data
=
data_group
.
createVariable
(
'Data'
,
'i4'
,
(
'x'
,
'y'
),
fill_value
=
255
)
data_group
.
createDimension
(
't'
,
mask_arr
.
shape
[
0
])
data
=
data_group
.
createVariable
(
'Data'
,
'i4'
,
(
'x'
,
'y'
,
't'
),
fill_value
=
255
)
data
.
units
=
"None"
data
.
long_name
=
"Mask classes"
data
.
standard_name
=
"classes"
data
.
valid_range
=
np
.
array
((
10.0
,
60.0
))
data
.
actual_range
=
np
.
array
((
np
.
min
(
mask_arr
),
np
.
max
(
mask_arr
)))
data
[:,
:]
=
mask_arr
if
msk
==
'MSK_legend'
:
[
setattr
(
mask_group
,
attr
,
str
(
api_result
[
key
][
tile
][
msk
][
str
(
attr
)]))
for
attr
in
api_result
[
key
][
tile
][
msk
].
keys
()]
data
[:,
:,
:]
=
mask_arr
f
.
close
()
except
:
raise
Exception
(
"Something went wrong while saving as netcdf. "
+
traceback
.
format_exc
())
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment