-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathband.go
72 lines (63 loc) · 1.94 KB
/
band.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package stac
import (
"regexp"
"github.com/go-viper/mapstructure/v2"
)
var bandExtensions = newExtensionRegistry()
func RegisterBandExtension(pattern *regexp.Regexp, provider ExtensionProvider) {
bandExtensions.register(pattern, provider)
}
func GetBandExtension(uri string) Extension {
return bandExtensions.get(uri)
}
type Band struct {
Name string `json:"name,omitempty"`
Description string `json:"description,omitempty"`
NoData any `json:"nodata,omitempty"`
DataType string `json:"data_type,omitempty"`
Statistics *Statistics `json:"statistics,omitempty"`
Unit string `json:"unit,omitempty"`
Extensions []Extension `json:"-"`
}
type Statistics struct {
Mean *float64 `json:"mean,omitempty"`
Minimum *float64 `json:"minimum,omitempty"`
Maximum *float64 `json:"maximum,omitempty"`
Stdev *float64 `json:"stdev,omitempty"`
ValidPercent *float64 `json:"valid_percent,omitempty"`
Count *int `json:"count,omitempty"`
}
func encodeBand(band *Band) (map[string]any, []string, error) {
extensionUris := []string{}
bandMap := map[string]any{}
decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{
TagName: "json",
Result: &bandMap,
})
if err != nil {
return nil, nil, err
}
if err := decoder.Decode(band); err != nil {
return nil, nil, err
}
for _, extension := range band.Extensions {
extensionUris = append(extensionUris, extension.URI())
if err := extension.Encode(bandMap); err != nil {
return nil, nil, err
}
}
return bandMap, extensionUris, nil
}
func EncodeBands(bands []*Band) ([]map[string]any, []string, error) {
extensionUris := []string{}
bandMaps := make([]map[string]any, len(bands))
for i, band := range bands {
bandMap, uris, err := encodeBand(band)
if err != nil {
return nil, nil, err
}
bandMaps[i] = bandMap
extensionUris = append(extensionUris, uris...)
}
return bandMaps, extensionUris, nil
}