@@ -40,6 +40,8 @@ pub struct SentinelS2L2ACogsProviderDefinition {
4040 name : String ,
4141 id : DatasetProviderId ,
4242 api_url : String ,
43+ bands : Vec < Band > ,
44+ zones : Vec < Zone > ,
4345}
4446
4547#[ typetag:: serde]
@@ -51,6 +53,8 @@ impl DatasetProviderDefinition for SentinelS2L2ACogsProviderDefinition {
5153 Ok ( Box :: new ( SentinelS2L2aCogsDataProvider :: new (
5254 self . id ,
5355 self . api_url ,
56+ & self . bands ,
57+ & self . zones ,
5458 ) ) )
5559 }
5660
@@ -67,41 +71,20 @@ impl DatasetProviderDefinition for SentinelS2L2ACogsProviderDefinition {
6771 }
6872}
6973
70- #[ derive( Debug , Clone ) ]
74+ #[ derive( Debug , Clone , Deserialize , Serialize ) ]
75+ #[ serde( rename_all = "camelCase" ) ]
7176pub struct Band {
7277 pub name : String ,
7378 pub no_data_value : Option < f64 > ,
7479 pub data_type : RasterDataType ,
7580}
7681
77- impl Band {
78- pub fn new ( name : String , no_data_value : Option < f64 > , data_type : RasterDataType ) -> Self {
79- Self {
80- name,
81- no_data_value,
82- data_type,
83- }
84- }
85- }
86-
87- #[ derive( Debug , Clone ) ]
82+ #[ derive( Debug , Clone , Deserialize , Serialize ) ]
8883pub struct Zone {
8984 pub name : String ,
9085 pub epsg : u32 ,
9186}
9287
93- impl Zone {
94- pub fn new ( name : String , epsg : u32 ) -> Self {
95- Self { name, epsg }
96- }
97- }
98-
99- #[ derive( Debug , Clone ) ]
100- pub struct SentinelMetaData {
101- bands : Vec < Band > ,
102- zones : Vec < Zone > ,
103- }
104-
10588#[ derive( Debug , Clone ) ]
10689pub struct SentinelDataset {
10790 band : Band ,
@@ -116,41 +99,22 @@ pub struct SentinelS2L2aCogsDataProvider {
11699}
117100
118101impl SentinelS2L2aCogsDataProvider {
119- pub fn new ( id : DatasetProviderId , api_url : String ) -> Self {
120- let meta_data = Self :: load_metadata ( ) ;
102+ pub fn new ( id : DatasetProviderId , api_url : String , bands : & [ Band ] , zones : & [ Zone ] ) -> Self {
121103 Self {
122104 api_url,
123- datasets : Self :: create_datasets ( & id, & meta_data) ,
124- }
125- }
126-
127- fn load_metadata ( ) -> SentinelMetaData {
128- // TODO: fetch dataset metadata from config or remote
129- SentinelMetaData {
130- bands : vec ! [
131- Band :: new( "B01" . to_owned( ) , Some ( 0. ) , RasterDataType :: U16 ) ,
132- Band :: new( "B02" . to_owned( ) , Some ( 0. ) , RasterDataType :: U16 ) ,
133- Band :: new( "B03" . to_owned( ) , Some ( 0. ) , RasterDataType :: U16 ) ,
134- Band :: new( "B04" . to_owned( ) , Some ( 0. ) , RasterDataType :: U16 ) ,
135- Band :: new( "B08" . to_owned( ) , Some ( 0. ) , RasterDataType :: U16 ) ,
136- Band :: new( "SCL" . to_owned( ) , Some ( 0. ) , RasterDataType :: U8 ) ,
137- ] ,
138- zones : vec ! [
139- Zone :: new( "UTM32N" . to_owned( ) , 32632 ) ,
140- Zone :: new( "UTM36S" . to_owned( ) , 32736 ) ,
141- ] ,
105+ datasets : Self :: create_datasets ( & id, bands, zones) ,
142106 }
143107 }
144108
145109 fn create_datasets (
146110 id : & DatasetProviderId ,
147- meta_data : & SentinelMetaData ,
111+ bands : & [ Band ] ,
112+ zones : & [ Zone ] ,
148113 ) -> HashMap < DatasetId , SentinelDataset > {
149- meta_data
150- . zones
114+ zones
151115 . iter ( )
152116 . flat_map ( |zone| {
153- meta_data . bands . iter ( ) . map ( move |band| {
117+ bands. iter ( ) . map ( move |band| {
154118 let dataset_id: DatasetId = ExternalDatasetId {
155119 provider_id : * id,
156120 dataset_id : format ! ( "{}:{}" , zone. name, band. name) ,
0 commit comments