diff --git a/src/Stars.Data.Tests/Resources/BKA/L1B/MetadataExtractorsTests_4077631-0220-MUL-B-1-1-1100761-150924T044238-ID.json b/src/Stars.Data.Tests/Resources/BKA/L1B/MetadataExtractorsTests_4077631-0220-MUL-B-1-1-1100761-150924T044238-ID.json
new file mode 100644
index 00000000..753156c0
--- /dev/null
+++ b/src/Stars.Data.Tests/Resources/BKA/L1B/MetadataExtractorsTests_4077631-0220-MUL-B-1-1-1100761-150924T044238-ID.json
@@ -0,0 +1,157 @@
+{
+ "stac_version": "1.0.0",
+ "stac_extensions": [
+ "https://stac-extensions.github.io/eo/v1.0.0/schema.json",
+ "https://stac-extensions.github.io/processing/v1.0.0/schema.json",
+ "https://stac-extensions.github.io/projection/v1.0.0/schema.json",
+ "https://stac-extensions.github.io/raster/v1.0.0/schema.json",
+ "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
+ "https://stac-extensions.github.io/view/v1.0.0/schema.json"
+ ],
+ "type": "Feature",
+ "id": "4077631-0220-MUL-B-1-1-1100761-150924T044238-ID",
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [
+ 106.57921007,
+ -6.53413954
+ ],
+ [
+ 106.75128472,
+ -6.5002322
+ ],
+ [
+ 106.63078125,
+ -5.88774143
+ ],
+ [
+ 106.45888021,
+ -5.92156087
+ ],
+ [
+ 106.57921007,
+ -6.53413954
+ ]
+ ]
+ ]
+ },
+ "properties": {
+ "datetime": "2015-09-24T04:43:01.0000000Z",
+ "created": "2021-06-11T15:35:42.0000000Z",
+ "platform": "bka/kanopus-v",
+ "constellation": "bka",
+ "mission": "bka",
+ "instruments": [
+ "mss"
+ ],
+ "sensor_type": "optical",
+ "spectral_mode": "MUL",
+ "sat:platform_international_designator": "2012-039B",
+ "proj:epsg": 32748,
+ "proj:shape": [
+ 6792,
+ 3057
+ ],
+ "view:azimuth": 84.08,
+ "processing:level": "L1B",
+ "title": "BKA/KANOPUS-V MSS L1B 2015-09-24 04:43:01",
+ "providers": [
+ {
+ "name": "NAS",
+ "description": "BKA (formerly known as BelKa 2) is a Belarusian remote sensing satellite developed under an agreement between the National Academy of Sciences of Belarus (NAS) and the Federal Space Agency of the Russian Federation. The BKA satellite is almost an exact copy of the Russian Kanopus-Vulkan N1 Environmental Satellite (Kanopus-V 1).",
+ "roles": [
+ "producer",
+ "processor",
+ "licensor"
+ ],
+ "url": "https://gis.by/en/tech/bka/"
+ }
+ ],
+ "licence": "proprietary",
+ "gsd": 10.52
+ },
+ "bbox": [
+ 106.45888021,
+ -6.53413954,
+ 106.75128472,
+ -5.88774143
+ ],
+ "assets": {
+ "L1B_MUL": {
+ "type": "image/tiff; application=geotiff",
+ "roles": [
+ "data",
+ "dn"
+ ],
+ "href": "data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID.tif",
+ "title": "L1B MUL",
+ "filename": "4077631-0220-MUL-B-1-1-1100761-150924T044238-ID.tif",
+ "file:size": 0,
+ "eo:bands": [
+ {
+ "name": "MS1",
+ "common_name": "blue",
+ "center_wavelength": 0.492,
+ "full_width_half_max": 0.04
+ },
+ {
+ "name": "MS2",
+ "common_name": "green",
+ "center_wavelength": 0.558,
+ "full_width_half_max": 0.07
+ },
+ {
+ "name": "MS3",
+ "common_name": "red",
+ "center_wavelength": 0.675,
+ "full_width_half_max": 0.09
+ },
+ {
+ "name": "MS4",
+ "common_name": "nir",
+ "center_wavelength": 0.782,
+ "full_width_half_max": 0.1
+ }
+ ],
+ "raster:bands": [
+ {
+ "data_type": "int8",
+ "offset": 0.0
+ },
+ {
+ "data_type": "int8",
+ "offset": 0.0
+ },
+ {
+ "data_type": "int8",
+ "offset": 0.0
+ },
+ {
+ "data_type": "int8",
+ "offset": 0.0
+ }
+ ]
+ },
+ "metadata": {
+ "type": "application/xml",
+ "roles": [
+ "metadata"
+ ],
+ "href": "data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_pasp-en.xml",
+ "filename": "4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_pasp-en.xml",
+ "file:size": 4651
+ },
+ "overview": {
+ "type": "image/jpeg",
+ "roles": [
+ "overview"
+ ],
+ "href": "data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_preview.jpg",
+ "filename": "4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_preview.jpg",
+ "file:size": 135101
+ }
+ },
+ "links": []
+}
\ No newline at end of file
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1B/MetadataExtractorsTests_4077631-0220-PAN-B-1-1-1100761-150924T044238-ID.json b/src/Stars.Data.Tests/Resources/BKA/L1B/MetadataExtractorsTests_4077631-0220-PAN-B-1-1-1100761-150924T044238-ID.json
new file mode 100644
index 00000000..768a1a4c
--- /dev/null
+++ b/src/Stars.Data.Tests/Resources/BKA/L1B/MetadataExtractorsTests_4077631-0220-PAN-B-1-1-1100761-150924T044238-ID.json
@@ -0,0 +1,111 @@
+{
+ "stac_version": "1.0.0",
+ "stac_extensions": [
+ "https://stac-extensions.github.io/processing/v1.0.0/schema.json",
+ "https://stac-extensions.github.io/projection/v1.0.0/schema.json",
+ "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
+ "https://stac-extensions.github.io/view/v1.0.0/schema.json"
+ ],
+ "type": "Feature",
+ "id": "4077631-0220-PAN-B-1-1-1100761-150924T044238-ID",
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [
+ 106.56015625,
+ -6.53788954
+ ],
+ [
+ 106.76961806,
+ -6.4966173
+ ],
+ [
+ 106.64908854,
+ -5.88413628
+ ],
+ [
+ 106.43984375,
+ -5.92530165
+ ],
+ [
+ 106.56015625,
+ -6.53788954
+ ]
+ ]
+ ]
+ },
+ "properties": {
+ "datetime": "2015-09-24T04:43:02.0000000Z",
+ "created": "2021-06-11T15:35:50.0000000Z",
+ "platform": "bka/kanopus-v",
+ "constellation": "bka",
+ "mission": "bka",
+ "instruments": [
+ "mss"
+ ],
+ "sensor_type": "optical",
+ "spectral_mode": "PAN",
+ "sat:platform_international_designator": "2012-039B",
+ "proj:epsg": 32748,
+ "proj:shape": [
+ 34087,
+ 17123
+ ],
+ "view:azimuth": 84.08,
+ "processing:level": "L1B",
+ "title": "BKA/KANOPUS-V MSS L1B 2015-09-24 04:43:02",
+ "providers": [
+ {
+ "name": "NAS",
+ "description": "BKA (formerly known as BelKa 2) is a Belarusian remote sensing satellite developed under an agreement between the National Academy of Sciences of Belarus (NAS) and the Federal Space Agency of the Russian Federation. The BKA satellite is almost an exact copy of the Russian Kanopus-Vulkan N1 Environmental Satellite (Kanopus-V 1).",
+ "roles": [
+ "producer",
+ "processor",
+ "licensor"
+ ],
+ "url": "https://gis.by/en/tech/bka/"
+ }
+ ],
+ "licence": "proprietary",
+ "gsd": 2.12
+ },
+ "bbox": [
+ 106.43984375,
+ -6.53788954,
+ 106.76961806,
+ -5.88413628
+ ],
+ "assets": {
+ "L1B_PAN": {
+ "type": "image/tiff; application=geotiff",
+ "roles": [
+ "data",
+ "dn"
+ ],
+ "href": "data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID.tif",
+ "title": "L1B PAN",
+ "filename": "4077631-0220-PAN-B-1-1-1100761-150924T044238-ID.tif",
+ "file:size": 0
+ },
+ "metadata": {
+ "type": "application/xml",
+ "roles": [
+ "metadata"
+ ],
+ "href": "data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_pasp-en.xml",
+ "filename": "4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_pasp-en.xml",
+ "file:size": 4160
+ },
+ "overview": {
+ "type": "image/jpeg",
+ "roles": [
+ "overview"
+ ],
+ "href": "data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_preview.jpg",
+ "filename": "4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_preview.jpg",
+ "file:size": 139746
+ }
+ },
+ "links": []
+}
\ No newline at end of file
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID.tfw b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID.tfw
new file mode 100644
index 00000000..dfa81a26
--- /dev/null
+++ b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID.tfw
@@ -0,0 +1,6 @@
+10.520000000000042
+0.0
+0.0
+-10.520000000000012
+661504.35457262117
+-651074.55784375116
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID.tif b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID.tif
new file mode 100644
index 00000000..e69de29b
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_bounds.dbf b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_bounds.dbf
new file mode 100644
index 00000000..a4ba17a4
Binary files /dev/null and b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_bounds.dbf differ
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_bounds.prj b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_bounds.prj
new file mode 100644
index 00000000..9accde53
--- /dev/null
+++ b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_bounds.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.017453292519943295]]
\ No newline at end of file
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_bounds.shp b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_bounds.shp
new file mode 100644
index 00000000..c08242ae
Binary files /dev/null and b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_bounds.shp differ
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_bounds.shx b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_bounds.shx
new file mode 100644
index 00000000..dbd6c678
Binary files /dev/null and b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_bounds.shx differ
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_pasp-en.xml b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_pasp-en.xml
new file mode 100644
index 00000000..eab6d11e
--- /dev/null
+++ b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_pasp-en.xml
@@ -0,0 +1,129 @@
+
+
+ 1.2.4
+ English
+
+ National Academy of Sciences of Belarus
+ BKSDZ
+ CAJOB210520120346
+ 4077631-0220-09060096
+ 11.06.2021 15:35:42
+
+
+ BKA/Kanopus-V
+ BKA
+ MUL
+ MS1 MS2 MS3 MS4
+ Multispectral: Blue, Green, Red, NIR
+ B
+ Georeferenced
+ Mosaic of Microkadrs
+ Standard with Passport
+ Planimetric-Altimetric Base is taken from OpenSources
+ 1
+ ID
+ Indonesia
+ 1
+ 4077631-0220-MUL-B-1-1-1100761-150924T044238-ID.tif
+
+
+
+
+ BKA
+ 2015-09-24T04:43:01
+ 84.08
+ 6.84
+ 2.31
+
+ -6.21091851
+ 106.60503472
+
+
+ 1
+
+
+ YES
+
+
+ 1
+ MS1
+ Blue
+
+
+ 2
+ MS2
+ Green
+
+
+ 3
+ MS3
+ Red
+
+
+ 4
+ MS4
+ NIR
+
+
+
+
+ WGS84
+ WGS84
+ UTM-48M
+ South
+ 32748
+ 5.2
+
+ SRTM
+ 4.1
+
+
+
+ -6.53413954
+ 106.57921007
+ -5.92156087
+ 106.45888021
+ -5.88774143
+ 106.63078125
+ -6.50023220
+ 106.75128472
+ degrees
+
+
+ 674614.313
+ 9277476.006
+ 661493.570
+ 9345254.107
+ 680538.240
+ 9348941.104
+ 693659.262
+ 9281163.025
+ meters
+
+
+ 4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_bounds.shp
+
+
+ 10.52
+ 10.52
+ meters
+
+
+
+
+ GeoTIFF
+ None
+ BGRN
+ 4
+ 3057
+ 6792
+ GrayScale
+ 8
+ 8
+ unsigned
+ I
+
+ Bilinear Interpolation
+
+
+
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_preview.jgw b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_preview.jgw
new file mode 100644
index 00000000..75a4c96f
--- /dev/null
+++ b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_preview.jgw
@@ -0,0 +1,6 @@
+42.0000000
+0.0000000
+0.0000000
+-42.0000000
+661520.0945726
+-651090.2978438
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_preview.jpg b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_preview.jpg
new file mode 100644
index 00000000..d829ab74
Binary files /dev/null and b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID/4077631-0220-MUL-B-1-1-1100761-150924T044238-ID_preview.jpg differ
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID.tfw b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID.tfw
new file mode 100644
index 00000000..dd76882f
--- /dev/null
+++ b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID.tfw
@@ -0,0 +1,6 @@
+2.1200000000000006
+0.0
+0.0
+-2.1199999999999983
+659387.35438322392
+-650668.03569145268
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID.tif b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID.tif
new file mode 100644
index 00000000..e69de29b
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_bounds.dbf b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_bounds.dbf
new file mode 100644
index 00000000..d40b35b7
Binary files /dev/null and b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_bounds.dbf differ
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_bounds.prj b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_bounds.prj
new file mode 100644
index 00000000..9accde53
--- /dev/null
+++ b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_bounds.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.017453292519943295]]
\ No newline at end of file
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_bounds.shp b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_bounds.shp
new file mode 100644
index 00000000..f7bd196c
Binary files /dev/null and b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_bounds.shp differ
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_bounds.shx b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_bounds.shx
new file mode 100644
index 00000000..021af776
Binary files /dev/null and b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_bounds.shx differ
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_pasp-en.xml b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_pasp-en.xml
new file mode 100644
index 00000000..8f298abd
--- /dev/null
+++ b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_pasp-en.xml
@@ -0,0 +1,113 @@
+
+
+ 1.2.4
+ English
+
+ National Academy of Sciences of Belarus
+ BKSDZ
+ CAJOB210520120346
+ 4077631-0220-09060096
+ 11.06.2021 15:35:50
+
+
+ BKA/Kanopus-V
+ BKA
+ PAN
+ PAN
+ Panchromatic
+ B
+ Georeferenced
+ Mosaic of Microkadrs
+ Standard with Passport
+ Planimetric-Altimetric Base is taken from OpenSources
+ 1
+ ID
+ Indonesia
+ 1
+ 4077631-0220-PAN-B-1-1-1100761-150924T044238-ID.tif
+
+
+
+
+ BKA
+ 2015-09-24T04:43:02
+ 84.08
+ 6.80
+ 2.31
+
+ -6.21098633
+ 106.60467882
+
+
+ 1
+
+
+ YES
+
+
+ 0
+ PAN
+ Panchromatic
+
+
+
+
+ WGS84
+ WGS84
+ UTM-48M
+ South
+ 32748
+ 5.2
+
+ SRTM
+ 4.1
+
+
+
+ -6.53788954
+ 106.56015625
+ -5.92530165
+ 106.43984375
+ -5.88413628
+ 106.64908854
+ -6.49661730
+ 106.76961806
+ degrees
+
+
+ 672505.720
+ 9277067.885
+ 659384.779
+ 9344845.967
+ 682566.703
+ 9349333.831
+ 695688.613
+ 9281555.763
+ meters
+
+
+ 4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_bounds.shp
+
+
+ 2.12
+ 2.12
+ meters
+
+
+
+
+ GeoTIFF
+ None
+ 1
+ 17123
+ 34087
+ GrayScale
+ 8
+ 8
+ unsigned
+ I
+
+ Bilinear Interpolation
+
+
+
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_preview.jgw b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_preview.jgw
new file mode 100644
index 00000000..eb9ccb64
--- /dev/null
+++ b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_preview.jgw
@@ -0,0 +1,6 @@
+42.0000000
+0.0000000
+0.0000000
+-42.0000000
+659407.2943832
+-650687.9756915
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_preview.jpg b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_preview.jpg
new file mode 100644
index 00000000..4874e9e1
Binary files /dev/null and b/src/Stars.Data.Tests/Resources/BKA/L1B/data/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID/4077631-0220-PAN-B-1-1-1100761-150924T044238-ID_preview.jpg differ
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1C/MetadataExtractorsTests_4077631-0220-MUL-C-1-1-1100761-150924T044238-ID.json b/src/Stars.Data.Tests/Resources/BKA/L1C/MetadataExtractorsTests_4077631-0220-MUL-C-1-1-1100761-150924T044238-ID.json
new file mode 100644
index 00000000..38c2727b
--- /dev/null
+++ b/src/Stars.Data.Tests/Resources/BKA/L1C/MetadataExtractorsTests_4077631-0220-MUL-C-1-1-1100761-150924T044238-ID.json
@@ -0,0 +1,157 @@
+{
+ "stac_version": "1.0.0",
+ "stac_extensions": [
+ "https://stac-extensions.github.io/eo/v1.0.0/schema.json",
+ "https://stac-extensions.github.io/processing/v1.0.0/schema.json",
+ "https://stac-extensions.github.io/projection/v1.0.0/schema.json",
+ "https://stac-extensions.github.io/raster/v1.0.0/schema.json",
+ "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
+ "https://stac-extensions.github.io/view/v1.0.0/schema.json"
+ ],
+ "type": "Feature",
+ "id": "4077631-0220-MUL-C-1-1-1100761-150924T044238-ID",
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [
+ 106.57943576,
+ -6.53408095
+ ],
+ [
+ 106.75134549,
+ -6.50028809
+ ],
+ [
+ 106.63111111,
+ -5.88778429
+ ],
+ [
+ 106.459375,
+ -5.92148926
+ ],
+ [
+ 106.57943576,
+ -6.53408095
+ ]
+ ]
+ ]
+ },
+ "properties": {
+ "datetime": "2015-09-24T04:43:01.0000000Z",
+ "created": "2021-06-11T16:38:46.0000000Z",
+ "platform": "bka/kanopus-v",
+ "constellation": "bka",
+ "mission": "bka",
+ "instruments": [
+ "mss"
+ ],
+ "sensor_type": "optical",
+ "spectral_mode": "MUL",
+ "sat:platform_international_designator": "2012-039B",
+ "proj:epsg": 32748,
+ "proj:shape": [
+ 6791,
+ 3052
+ ],
+ "view:azimuth": 84.08,
+ "processing:level": "L1C",
+ "title": "BKA/KANOPUS-V MSS L1C 2015-09-24 04:43:01",
+ "providers": [
+ {
+ "name": "NAS",
+ "description": "BKA (formerly known as BelKa 2) is a Belarusian remote sensing satellite developed under an agreement between the National Academy of Sciences of Belarus (NAS) and the Federal Space Agency of the Russian Federation. The BKA satellite is almost an exact copy of the Russian Kanopus-Vulkan N1 Environmental Satellite (Kanopus-V 1).",
+ "roles": [
+ "producer",
+ "processor",
+ "licensor"
+ ],
+ "url": "https://gis.by/en/tech/bka/"
+ }
+ ],
+ "licence": "proprietary",
+ "gsd": 10.52
+ },
+ "bbox": [
+ 106.459375,
+ -6.53408095,
+ 106.75134549,
+ -5.88778429
+ ],
+ "assets": {
+ "L1C_MUL": {
+ "type": "image/tiff; application=geotiff",
+ "roles": [
+ "data",
+ "dn"
+ ],
+ "href": "data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID.tif",
+ "title": "L1C MUL",
+ "filename": "4077631-0220-MUL-C-1-1-1100761-150924T044238-ID.tif",
+ "file:size": 0,
+ "eo:bands": [
+ {
+ "name": "MS1",
+ "common_name": "blue",
+ "center_wavelength": 0.492,
+ "full_width_half_max": 0.04
+ },
+ {
+ "name": "MS2",
+ "common_name": "green",
+ "center_wavelength": 0.558,
+ "full_width_half_max": 0.07
+ },
+ {
+ "name": "MS3",
+ "common_name": "red",
+ "center_wavelength": 0.675,
+ "full_width_half_max": 0.09
+ },
+ {
+ "name": "MS4",
+ "common_name": "nir",
+ "center_wavelength": 0.782,
+ "full_width_half_max": 0.1
+ }
+ ],
+ "raster:bands": [
+ {
+ "data_type": "int8",
+ "offset": 0.0
+ },
+ {
+ "data_type": "int8",
+ "offset": 0.0
+ },
+ {
+ "data_type": "int8",
+ "offset": 0.0
+ },
+ {
+ "data_type": "int8",
+ "offset": 0.0
+ }
+ ]
+ },
+ "metadata": {
+ "type": "application/xml",
+ "roles": [
+ "metadata"
+ ],
+ "href": "data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_pasp-en.xml",
+ "filename": "4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_pasp-en.xml",
+ "file:size": 4652
+ },
+ "overview": {
+ "type": "image/jpeg",
+ "roles": [
+ "overview"
+ ],
+ "href": "data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_preview.jpg",
+ "filename": "4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_preview.jpg",
+ "file:size": 138091
+ }
+ },
+ "links": []
+}
\ No newline at end of file
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1C/MetadataExtractorsTests_4077631-0220-PAN-C-1-1-1100761-150924T044238-ID.json b/src/Stars.Data.Tests/Resources/BKA/L1C/MetadataExtractorsTests_4077631-0220-PAN-C-1-1-1100761-150924T044238-ID.json
new file mode 100644
index 00000000..535ee5a8
--- /dev/null
+++ b/src/Stars.Data.Tests/Resources/BKA/L1C/MetadataExtractorsTests_4077631-0220-PAN-C-1-1-1100761-150924T044238-ID.json
@@ -0,0 +1,111 @@
+{
+ "stac_version": "1.0.0",
+ "stac_extensions": [
+ "https://stac-extensions.github.io/processing/v1.0.0/schema.json",
+ "https://stac-extensions.github.io/projection/v1.0.0/schema.json",
+ "https://stac-extensions.github.io/sat/v1.0.0/schema.json",
+ "https://stac-extensions.github.io/view/v1.0.0/schema.json"
+ ],
+ "type": "Feature",
+ "id": "4077631-0220-PAN-C-1-1-1100761-150924T044238-ID",
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [
+ 106.56038194,
+ -6.53782335
+ ],
+ [
+ 106.76985243,
+ -6.49664605
+ ],
+ [
+ 106.64960069,
+ -5.88415202
+ ],
+ [
+ 106.44033854,
+ -5.92522244
+ ],
+ [
+ 106.56038194,
+ -6.53782335
+ ]
+ ]
+ ]
+ },
+ "properties": {
+ "datetime": "2015-09-24T04:43:02.0000000Z",
+ "created": "2021-06-11T16:38:54.0000000Z",
+ "platform": "bka/kanopus-v",
+ "constellation": "bka",
+ "mission": "bka",
+ "instruments": [
+ "mss"
+ ],
+ "sensor_type": "optical",
+ "spectral_mode": "PAN",
+ "sat:platform_international_designator": "2012-039B",
+ "proj:epsg": 32748,
+ "proj:shape": [
+ 34082,
+ 17110
+ ],
+ "view:azimuth": 84.08,
+ "processing:level": "L1C",
+ "title": "BKA/KANOPUS-V MSS L1C 2015-09-24 04:43:02",
+ "providers": [
+ {
+ "name": "NAS",
+ "description": "BKA (formerly known as BelKa 2) is a Belarusian remote sensing satellite developed under an agreement between the National Academy of Sciences of Belarus (NAS) and the Federal Space Agency of the Russian Federation. The BKA satellite is almost an exact copy of the Russian Kanopus-Vulkan N1 Environmental Satellite (Kanopus-V 1).",
+ "roles": [
+ "producer",
+ "processor",
+ "licensor"
+ ],
+ "url": "https://gis.by/en/tech/bka/"
+ }
+ ],
+ "licence": "proprietary",
+ "gsd": 2.12
+ },
+ "bbox": [
+ 106.44033854,
+ -6.53782335,
+ 106.76985243,
+ -5.88415202
+ ],
+ "assets": {
+ "L1C_PAN": {
+ "type": "image/tiff; application=geotiff",
+ "roles": [
+ "data",
+ "dn"
+ ],
+ "href": "data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID.tif",
+ "title": "L1C PAN",
+ "filename": "4077631-0220-PAN-C-1-1-1100761-150924T044238-ID.tif",
+ "file:size": 0
+ },
+ "metadata": {
+ "type": "application/xml",
+ "roles": [
+ "metadata"
+ ],
+ "href": "data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_pasp-en.xml",
+ "filename": "4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_pasp-en.xml",
+ "file:size": 4161
+ },
+ "overview": {
+ "type": "image/jpeg",
+ "roles": [
+ "overview"
+ ],
+ "href": "data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_preview.jpg",
+ "filename": "4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_preview.jpg",
+ "file:size": 142295
+ }
+ },
+ "links": []
+}
\ No newline at end of file
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID.tfw b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID.tfw
new file mode 100644
index 00000000..b7d7f993
--- /dev/null
+++ b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID.tfw
@@ -0,0 +1,6 @@
+10.520000000000012
+0.0
+0.0
+-10.520000000000010
+661555.40700051526
+-651073.46273933293
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID.tif b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID.tif
new file mode 100644
index 00000000..e69de29b
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_bounds.dbf b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_bounds.dbf
new file mode 100644
index 00000000..1899d32b
Binary files /dev/null and b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_bounds.dbf differ
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_bounds.prj b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_bounds.prj
new file mode 100644
index 00000000..9accde53
--- /dev/null
+++ b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_bounds.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.017453292519943295]]
\ No newline at end of file
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_bounds.shp b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_bounds.shp
new file mode 100644
index 00000000..2ec58c06
Binary files /dev/null and b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_bounds.shp differ
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_bounds.shx b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_bounds.shx
new file mode 100644
index 00000000..eff1249e
Binary files /dev/null and b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_bounds.shx differ
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_pasp-en.xml b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_pasp-en.xml
new file mode 100644
index 00000000..8e087300
--- /dev/null
+++ b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_pasp-en.xml
@@ -0,0 +1,129 @@
+
+
+ 1.2.4
+ English
+
+ National Academy of Sciences of Belarus
+ BKSDZ
+ CAJOB210214225958
+ 4077631-0220-09060096
+ 11.06.2021 16:38:46
+
+
+ BKA/Kanopus-V
+ BKA
+ MUL
+ MS1 MS2 MS3 MS4
+ Multispectral: Blue, Green, Red, NIR
+ C
+ Orthorectified
+ Mosaic of Microkadrs
+ Standard with Passport
+ Planimetric-Altimetric Base is taken from OpenSources
+ 1
+ ID
+ Indonesia
+ 1
+ 4077631-0220-MUL-C-1-1-1100761-150924T044238-ID.tif
+
+
+
+
+ BKA
+ 2015-09-24T04:43:01
+ 84.08
+ 6.84
+ 2.31
+
+ -6.21091037
+ 106.60531250
+
+
+ 1
+
+
+ YES
+
+
+ 1
+ MS1
+ Blue
+
+
+ 2
+ MS2
+ Green
+
+
+ 3
+ MS3
+ Red
+
+
+ 4
+ MS4
+ NIR
+
+
+
+
+ WGS84
+ WGS84
+ UTM-48M
+ South
+ 32748
+ 5.2
+
+ SRTM
+ 4.1
+
+
+
+ -6.53408095
+ 106.57943576
+ -5.92148926
+ 106.45937500
+ -5.88778429
+ 106.63111111
+ -6.50028809
+ 106.75134549
+ degrees
+
+
+ 674639.294
+ 9277482.408
+ 661548.374
+ 9345261.882
+ 680574.753
+ 9348936.257
+ 693665.962
+ 9281156.822
+ meters
+
+
+ 4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_bounds.shp
+
+
+ 10.52
+ 10.52
+ meters
+
+
+
+
+ GeoTIFF
+ None
+ BGRN
+ 4
+ 3052
+ 6791
+ GrayScale
+ 8
+ 8
+ unsigned
+ I
+
+ Bilinear Interpolation
+
+
+
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_preview.jgw b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_preview.jgw
new file mode 100644
index 00000000..946b4f0a
--- /dev/null
+++ b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_preview.jgw
@@ -0,0 +1,6 @@
+42.0000000
+0.0000000
+0.0000000
+-42.0000000
+661571.1470005
+-651089.2027393
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_preview.jpg b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_preview.jpg
new file mode 100644
index 00000000..718251fe
Binary files /dev/null and b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID/4077631-0220-MUL-C-1-1-1100761-150924T044238-ID_preview.jpg differ
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID.tfw b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID.tfw
new file mode 100644
index 00000000..c28894c0
--- /dev/null
+++ b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID.tfw
@@ -0,0 +1,6 @@
+2.1199999999999974
+0.0
+0.0
+-2.1199999999999992
+659441.56374267826
+-650671.05096164613
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID.tif b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID.tif
new file mode 100644
index 00000000..e69de29b
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_bounds.dbf b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_bounds.dbf
new file mode 100644
index 00000000..32e0e078
Binary files /dev/null and b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_bounds.dbf differ
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_bounds.prj b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_bounds.prj
new file mode 100644
index 00000000..9accde53
--- /dev/null
+++ b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_bounds.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.017453292519943295]]
\ No newline at end of file
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_bounds.shp b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_bounds.shp
new file mode 100644
index 00000000..8fbc9fe5
Binary files /dev/null and b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_bounds.shp differ
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_bounds.shx b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_bounds.shx
new file mode 100644
index 00000000..6cfa381f
Binary files /dev/null and b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_bounds.shx differ
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_pasp-en.xml b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_pasp-en.xml
new file mode 100644
index 00000000..c10f0670
--- /dev/null
+++ b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_pasp-en.xml
@@ -0,0 +1,113 @@
+
+
+ 1.2.4
+ English
+
+ National Academy of Sciences of Belarus
+ BKSDZ
+ CAJOB210214225958
+ 4077631-0220-09060096
+ 11.06.2021 16:38:54
+
+
+ BKA/Kanopus-V
+ BKA
+ PAN
+ PAN
+ Panchromatic
+ C
+ Orthorectified
+ Mosaic of Microkadrs
+ Standard with Passport
+ Planimetric-Altimetric Base is taken from OpenSources
+ 1
+ ID
+ Indonesia
+ 1
+ 4077631-0220-PAN-C-1-1-1100761-150924T044238-ID.tif
+
+
+
+
+ BKA
+ 2015-09-24T04:43:02
+ 84.08
+ 6.80
+ 2.31
+
+ -6.21096083
+ 106.60504340
+
+
+ 1
+
+
+ YES
+
+
+ 0
+ PAN
+ Panchromatic
+
+
+
+
+ WGS84
+ WGS84
+ UTM-48M
+ South
+ 32748
+ 5.2
+
+ SRTM
+ 4.1
+
+
+
+ -6.53782335
+ 106.56038194
+ -5.92522244
+ 106.44033854
+ -5.88415202
+ 106.64960069
+ -6.49664605
+ 106.76985243
+ degrees
+
+
+ 672530.703
+ 9277075.127
+ 659439.585
+ 9344854.584
+ 682623.413
+ 9349331.924
+ 695714.527
+ 9281552.493
+ meters
+
+
+ 4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_bounds.shp
+
+
+ 2.12
+ 2.12
+ meters
+
+
+
+
+ GeoTIFF
+ None
+ 1
+ 17110
+ 34082
+ GrayScale
+ 8
+ 8
+ unsigned
+ I
+
+ Bilinear Interpolation
+
+
+
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_preview.jgw b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_preview.jgw
new file mode 100644
index 00000000..a2f2d7b7
--- /dev/null
+++ b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_preview.jgw
@@ -0,0 +1,6 @@
+42.0000000
+0.0000000
+0.0000000
+-42.0000000
+659461.5037427
+-650690.9909616
diff --git a/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_preview.jpg b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_preview.jpg
new file mode 100644
index 00000000..9a3dbb64
Binary files /dev/null and b/src/Stars.Data.Tests/Resources/BKA/L1C/data/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID/4077631-0220-PAN-C-1-1-1100761-150924T044238-ID_preview.jpg differ
diff --git a/src/Stars.Data.Tests/testsettings.json b/src/Stars.Data.Tests/testsettings.json
index b8e946ee..26b920af 100644
--- a/src/Stars.Data.Tests/testsettings.json
+++ b/src/Stars.Data.Tests/testsettings.json
@@ -65,6 +65,9 @@
"KANOPUS-V": [
"ROSCOSMOS/KANOPUS-V"
],
+ "BKA" : [
+ "BKA"
+ ],
"ISRO": [
"ISRO"
],
diff --git a/src/Stars.Data/Model/Metadata/Bka/BkaMetadataExtractor.cs b/src/Stars.Data/Model/Metadata/Bka/BkaMetadataExtractor.cs
new file mode 100644
index 00000000..3ad7fed7
--- /dev/null
+++ b/src/Stars.Data/Model/Metadata/Bka/BkaMetadataExtractor.cs
@@ -0,0 +1,370 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Net.Mime;
+using System.Threading.Tasks;
+using GeoJSON.Net.Geometry;
+using Microsoft.Extensions.Logging;
+using Stac;
+using Stac.Extensions.Eo;
+using Stac.Extensions.Processing;
+using Stac.Extensions.Projection;
+using Terradue.Stars.Interface;
+using Terradue.Stars.Interface.Supplier.Destination;
+using Terradue.Stars.Services.Model.Stac;
+using Terradue.Stars.Geometry.GeoJson;
+using System.Xml;
+using System.Xml.Serialization;
+using Stac.Extensions.Sat;
+using Stac.Extensions.View;
+using Stac.Extensions.Raster;
+
+
+
+
+namespace Terradue.Stars.Data.Model.Metadata.Bka
+{
+ public class BkaMetadataExtractor : MetadataExtraction
+ {
+ public override string Label => "BKA (Belarus) mission product metadata extractor";
+
+ public static XmlSerializer metadataSerializer = new XmlSerializer(typeof(BkaMetadata));
+
+ public BkaMetadataExtractor(ILogger logger, IResourceServiceProvider resourceServiceProvider) : base(logger, resourceServiceProvider)
+ {
+ }
+
+ public override bool CanProcess(IResource route, IDestination destination)
+ {
+ IItem item = route as IItem;
+ if (item == null) return false;
+ try
+ {
+ IAsset metadataAsset = GetMetadataAsset(item);
+ BkaMetadata metadata = ReadMetadata(metadataAsset).GetAwaiter().GetResult();
+ return metadata != null;
+ }
+ catch (Exception)
+ {
+ return false;
+ }
+ }
+
+ protected override async Task ExtractMetadata(IItem item, string suffix)
+ {
+ IAsset metadataAsset = GetMetadataAsset(item);
+ BkaMetadata metadata = await ReadMetadata(metadataAsset);
+
+ StacItem stacItem = CreateStacItem(metadata);
+
+ AddAssets(stacItem, item, metadata);
+
+ return StacItemNode.Create(stacItem, item.Uri); ;
+ }
+
+
+ internal virtual StacItem CreateStacItem(BkaMetadata metadata)
+ {
+ string identifier = metadata.Processing.Scene01FileName.Replace(".tif", String.Empty);
+ StacItem stacItem = new StacItem(identifier, GetGeometry(metadata), GetCommonMetadata(metadata));
+ AddSatStacExtension(metadata, stacItem);
+ AddProjStacExtension(metadata, stacItem);
+ AddProjViewExtension(metadata, stacItem);
+ AddProcessingStacExtension(metadata, stacItem);
+ AddEoStacExtension(metadata, stacItem);
+ FillBasicsProperties(metadata, stacItem.Properties);
+ AddOtherProperties(metadata, stacItem);
+
+ return stacItem;
+ }
+
+ private void AddEoStacExtension(BkaMetadata metadata, StacItem stacItem)
+ {
+ EoStacExtension eo = stacItem.EoExtension();
+ }
+
+
+ private void AddSatStacExtension(BkaMetadata metadata, StacItem stacItem)
+ {
+ SatStacExtension sat = stacItem.SatExtension();
+ sat.PlatformInternationalDesignator = "2012-039B";
+ }
+
+ private void AddProjStacExtension(BkaMetadata metadata, StacItem stacItem)
+ {
+ ProjectionStacExtension proj = stacItem.ProjectionExtension();
+ proj.Epsg = metadata.GeoReference?.EpsgCode;
+ if (metadata.ImageInfo != null && metadata.ImageInfo.Height != null && metadata.ImageInfo.Width != null)
+ {
+ proj.Shape = new int[2] { metadata.ImageInfo.Height.Value, metadata.ImageInfo.Width.Value };
+ }
+ }
+
+ private void AddProjViewExtension(BkaMetadata metadata, StacItem stacItem)
+ {
+ ViewStacExtension view = stacItem.ViewExtension();
+ if (metadata.SatelliteData != null && metadata.SatelliteData.SceneAcquisition != null)
+ {
+ BkaSceneAcquisition sceneAcquisition = metadata.SatelliteData.SceneAcquisition;
+ if (sceneAcquisition.ViewingAngle != null) view.Azimuth = sceneAcquisition.ViewingAngle.Value;
+ if (sceneAcquisition.SunAzimuth != null) view.Azimuth = sceneAcquisition.SunAzimuth.Value;
+ if (sceneAcquisition.SunElevation != null) view.Azimuth = sceneAcquisition.SunElevation.Value;
+ }
+ }
+
+ private void AddProcessingStacExtension(BkaMetadata metadata, StacItem stacItem)
+ {
+ var proc = stacItem.ProcessingExtension();
+ if (metadata.Processing != null && metadata.Processing.Level != null)
+ {
+ proc.Level = GetProcessingLevel(metadata);
+ }
+ }
+
+ private string GetProcessingLevel(BkaMetadata metadata)
+ {
+ return String.Format("L1{0}", metadata.Processing.Level);
+ }
+
+ private string GetInstrument(BkaMetadata metadata)
+ {
+ return "MSS";
+ }
+
+ private IDictionary GetCommonMetadata(BkaMetadata metadata)
+ {
+ Dictionary properties = new Dictionary();
+
+ FillDateTimeProperties(metadata, properties);
+ FillPlatformDefinition(metadata, properties);
+
+
+ return properties;
+ }
+
+ private void FillBasicsProperties(BkaMetadata metadata, IDictionary properties)
+ {
+ CultureInfo culture = new CultureInfo("fr-FR");
+ // title
+ properties.Remove("title");
+ properties.Add("title", string.Format("{0} {1} {2} {3}",
+ //StylePlatform(properties.GetProperty("platform")),
+ properties.GetProperty("platform").ToUpper(),
+ GetInstrument(metadata),
+ GetProcessingLevel(metadata),
+ properties.GetProperty("datetime").ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ss", culture))
+ );
+ }
+
+ private void AddOtherProperties(BkaMetadata metadata, StacItem item)
+ {
+ IDictionary properties = item.Properties;
+ if (IncludeProviderProperty)
+ {
+ AddSingleProvider(
+ properties,
+ "NAS",
+ "BKA (formerly known as BelKa 2) is a Belarusian remote sensing satellite developed under an agreement between the National Academy of Sciences of Belarus (NAS) and the Federal Space Agency of the Russian Federation. The BKA satellite is almost an exact copy of the Russian Kanopus-Vulkan N1 Environmental Satellite (Kanopus-V 1).",
+ new StacProviderRole[] { StacProviderRole.producer, StacProviderRole.processor, StacProviderRole.licensor },
+ new Uri("https://gis.by/en/tech/bka/")
+ );
+ }
+ properties["licence"] = "proprietary";
+ if (metadata.GeoReference.SceneGeoposition.GroundResolution != null)
+ {
+ item.Gsd = metadata.GeoReference.SceneGeoposition.GroundResolution.PixelSizeNorthing;
+ }
+ }
+
+
+ private void FillDateTimeProperties(BkaMetadata metadata, Dictionary properties)
+ {
+ var format = "yyyy-MM-ddTHH:mm:ss";
+ var format2 = "dd.MM.yyyy HH:mm:ss";
+
+ if (DateTime.TryParseExact(metadata.SatelliteData.SceneAcquisition.AcquisitionTime, format, null, DateTimeStyles.AssumeUniversal, out DateTime dt))
+ {
+ properties["datetime"] = dt.ToUniversalTime().ToString("O");
+ }
+ if (DateTime.TryParseExact(metadata.Production?.CreationDate, format, null, DateTimeStyles.AssumeUniversal, out dt))
+ {
+ properties["created"] = dt.ToUniversalTime().ToString("O");
+ }
+ else if (DateTime.TryParseExact(metadata.Production?.CreationDate, format2, null, DateTimeStyles.AssumeUniversal, out dt))
+ {
+ properties["created"] = dt.ToUniversalTime().ToString("O");
+ }
+ }
+
+ private void FillPlatformDefinition(BkaMetadata metadata, Dictionary properties)
+ {
+ string platform = "bka";
+ if (metadata.Processing?.Satellite != null) platform = metadata.Processing.Satellite.ToLower();
+ string mission = "bka";
+ if (metadata.Processing?.Mission != null) platform = metadata.Processing.Mission.ToLower();
+ properties["platform"] = platform;
+ properties["constellation"] = mission;
+ properties["mission"] = mission;
+ properties["instruments"] = new string[] { GetInstrument(metadata).ToLower() };
+ properties["sensor_type"] = "optical";
+ if (metadata.Processing?.Instrument != null)
+ properties["spectral_mode"] = metadata.Processing?.Instrument;
+ }
+
+
+ private GeoJSON.Net.Geometry.IGeometryObject GetGeometry(BkaMetadata metadata)
+ {
+ BkaGeodeticCoordinates coordinates = metadata.GeoReference.SceneGeoposition.GeodeticCoordinates;
+ List positions = new List
+ {
+ new GeoJSON.Net.Geometry.Position(coordinates.Corner1SWLat, coordinates.Corner1SWLon),
+ new GeoJSON.Net.Geometry.Position(coordinates.Corner4SELat, coordinates.Corner4SELon),
+ new GeoJSON.Net.Geometry.Position(coordinates.Corner3NELat, coordinates.Corner3NELon),
+ new GeoJSON.Net.Geometry.Position(coordinates.Corner2NWLat, coordinates.Corner2NWLon),
+ new GeoJSON.Net.Geometry.Position(coordinates.Corner1SWLat, coordinates.Corner1SWLon)
+ };
+ GeoJSON.Net.Geometry.LineString lineString = new GeoJSON.Net.Geometry.LineString(positions.ToArray());
+ return new GeoJSON.Net.Geometry.Polygon(new GeoJSON.Net.Geometry.LineString[] { lineString }).NormalizePolygon();
+ }
+
+
+ protected void AddAssets(StacItem stacItem, IItem item, BkaMetadata metadata)
+ {
+ IAsset imageAsset = FindFirstAssetFromFileNameRegex(item, @".*\.tif");
+ if (imageAsset != null)
+ {
+ StacAsset stacAsset = StacAsset.CreateDataAsset(stacItem, imageAsset.Uri, new ContentType("image/tiff; application=geotiff"));
+ stacAsset.Roles.Add("dn");
+
+ string key = String.Format("{0}_{1}",
+ GetProcessingLevel(metadata),
+ metadata.Processing?.Instrument
+ );
+ stacAsset.Properties["title"] = key.Replace("_", " ");
+ stacAsset.Properties.AddRange(imageAsset.Properties);
+
+ BkaSpectral spectral = metadata.Radiometry.Spectral;
+ if (spectral.BandMS1 != null) AddBandAsset(spectral.BandMS1, stacAsset);
+ if (spectral.BandMS2 != null) AddBandAsset(spectral.BandMS2, stacAsset);
+ if (spectral.BandMS3 != null) AddBandAsset(spectral.BandMS3, stacAsset);
+ if (spectral.BandMS4 != null) AddBandAsset(spectral.BandMS4, stacAsset);
+
+ stacItem.Assets.Add(key, stacAsset);
+ }
+
+ IAsset metadataAsset = GetMetadataAsset(item);
+ if (metadataAsset != null)
+ {
+ StacAsset stacAsset = StacAsset.CreateMetadataAsset(stacItem, metadataAsset.Uri, new ContentType(MimeTypes.GetMimeType(metadataAsset.Uri.ToString())));
+ stacItem.Assets.Add("metadata", stacAsset);
+ stacAsset.Properties.AddRange(metadataAsset.Properties);
+ }
+
+ IAsset overviewAsset = FindFirstAssetFromFileNameRegex(item, @".*_preview\.jpg");
+ if (overviewAsset != null)
+ {
+ StacAsset stacAsset = StacAsset.CreateOverviewAsset(stacItem, overviewAsset.Uri, new ContentType(MimeTypes.GetMimeType(overviewAsset.Uri.ToString())));
+ stacAsset.Properties.AddRange(overviewAsset.Properties);
+ stacItem.Assets.Add("overview", stacAsset);
+ }
+ }
+
+
+ private void AddBandAsset(BkaBandInfo bandInfo, StacAsset stacAsset = null)
+ {
+ double? waveLength;
+ double? fullWidthHalfMax;
+ double? scale = null;
+
+ EoBandCommonName commonName;
+
+ switch (bandInfo.BandCode)
+ {
+ case "MS1":
+ waveLength = 0.492;
+ fullWidthHalfMax = 0.04;
+ commonName = EoBandCommonName.blue;
+ break;
+ case "MS2":
+ waveLength = 0.558;
+ fullWidthHalfMax = 0.07;
+ commonName = EoBandCommonName.green;
+ break;
+ case "MS3":
+ waveLength = 0.675;
+ fullWidthHalfMax = 0.09;
+ commonName = EoBandCommonName.red;
+ break;
+ case "MS4":
+ waveLength = 0.782;
+ fullWidthHalfMax = 0.1;
+ commonName = EoBandCommonName.nir;
+ break;
+ default:
+ return;
+ }
+
+ EoBandObject eoBandObject = new EoBandObject(bandInfo.BandCode, commonName)
+ {
+ CenterWavelength = waveLength,
+ FullWidthHalfMax = fullWidthHalfMax,
+ };
+
+ RasterBand rasterBand = new RasterBand()
+ {
+ DataType = Stac.Common.DataType.int8,
+ Scale = scale,
+ Offset = 0
+ };
+
+ EoStacExtension eo = stacAsset.EoExtension();
+ if (eo.Bands == null)
+ {
+ eo.Bands = new EoBandObject[] { eoBandObject };
+ }
+ else
+ {
+ List bands = new List(eo.Bands) { eoBandObject };
+ eo.Bands = bands.ToArray();
+ }
+
+ if (rasterBand != null)
+ {
+ RasterStacExtension raster = stacAsset.RasterExtension();
+ if (raster.Bands == null)
+ {
+ raster.Bands = new RasterBand[] { rasterBand };
+ }
+ else
+ {
+ List bands = new List(raster.Bands) { rasterBand };
+ raster.Bands = bands.ToArray();
+ }
+ }
+ }
+
+
+ protected virtual IAsset GetMetadataAsset(IItem item)
+ {
+ IAsset metadataAsset = FindFirstAssetFromFileNameRegex(item, @"^.*_pasp-en\.xml");
+ if (metadataAsset != null) return metadataAsset;
+
+ throw new FileNotFoundException(String.Format("Unable to find the summary file asset"));
+ }
+
+ public virtual async Task ReadMetadata(IAsset metadataAsset)
+ {
+ using (var stream = await resourceServiceProvider.GetAssetStreamAsync(metadataAsset, System.Threading.CancellationToken.None))
+ {
+ XmlReaderSettings settings = new XmlReaderSettings() { DtdProcessing = DtdProcessing.Ignore };
+ var reader = XmlReader.Create(stream, settings);
+
+ logger.LogDebug("Deserializing metadata file {0}", metadataAsset.Uri);
+
+ return (BkaMetadata)metadataSerializer.Deserialize(reader);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Stars.Data/Model/Metadata/Bka/Schema.cs b/src/Stars.Data/Model/Metadata/Bka/Schema.cs
new file mode 100644
index 00000000..6565042b
--- /dev/null
+++ b/src/Stars.Data/Model/Metadata/Bka/Schema.cs
@@ -0,0 +1,399 @@
+using System.Xml.Serialization;
+
+namespace Terradue.Stars.Data.Model.Metadata.Bka
+{
+
+ [XmlRoot(ElementName = "MetaData")]
+ public class BkaMetadata
+ {
+
+ [XmlElement(ElementName = "Version")]
+ public string Version { get; set; }
+
+ [XmlElement(ElementName = "Language")]
+ public string Language { get; set; }
+
+ [XmlElement(ElementName = "Production")]
+ public BkaProduction Production { get; set; }
+
+ [XmlElement(ElementName = "Processing")]
+ public BkaProcessing Processing { get; set; }
+
+ [XmlElement(ElementName = "Satellite_Data")]
+ public BkaSatelliteData SatelliteData { get; set; }
+
+ [XmlElement(ElementName = "Radiometry")]
+ public BkaRadiometry Radiometry { get; set; }
+
+ [XmlElement(ElementName = "Geo_Reference")]
+ public BkaGeoReference GeoReference { get; set; }
+
+ [XmlElement(ElementName = "Image_Info")]
+ public BkaImageInfo ImageInfo { get; set; }
+ }
+
+ [XmlRoot(ElementName = "Production")]
+ public class BkaProduction
+ {
+ [XmlElement(ElementName = "Copyright")]
+ public string Copyright { get; set; }
+
+ [XmlElement(ElementName = "Producer")]
+ public string Producer { get; set; }
+
+ [XmlElement(ElementName = "PackAppId")]
+ public string PackAppId { get; set; }
+
+ [XmlElement(ElementName = "JobId")]
+ public string JobId { get; set; }
+
+ [XmlElement(ElementName = "Creation_Date")]
+ public string CreationDate { get; set; }
+ }
+
+
+ [XmlRoot(ElementName = "Processing")]
+ public class BkaProcessing
+ {
+ [XmlElement(ElementName = "Mission")]
+ public string Mission { get; set; }
+
+ [XmlElement(ElementName = "Satellite")]
+ public string Satellite { get; set; }
+
+ [XmlElement(ElementName = "Instrument")]
+ public string Instrument { get; set; }
+
+ [XmlElement(ElementName = "Sensor_Code")]
+ public string SensorCode { get; set; }
+
+ [XmlElement(ElementName = "Band")]
+ public string Band { get; set; }
+
+ [XmlElement(ElementName = "Level")]
+ public string Level { get; set; }
+
+ [XmlElement(ElementName = "Level_Info")]
+ public string LevelInfo { get; set; }
+
+ [XmlElement(ElementName = "Level_Data")]
+ public string LevelData { get; set; }
+
+ [XmlElement(ElementName = "Radiometric")]
+ public string Radiometric { get; set; }
+
+ [XmlElement(ElementName = "Geometric")]
+ public string Geometric { get; set; }
+
+ [XmlElement(ElementName = "Percent_Cloud_Cover")]
+ public double? PercentCloudCover { get; set; }
+
+ [XmlElement(ElementName = "Country_Cover_Cod")]
+ public string[] CountryCoverCod { get; set; }
+
+ [XmlElement(ElementName = "Country_Cover")]
+ public string[] CountryCover { get; set; }
+
+ [XmlElement(ElementName = "Scenes_Count")]
+ public int? ScenesCount { get; set; }
+
+ [XmlElement(ElementName = "Scene01_File_Name")]
+ public string Scene01FileName { get; set; }
+
+ [XmlElement(ElementName = "Scene02_File_Name")]
+ public string Scene02FileName { get; set; }
+
+ [XmlElement(ElementName = "Scene03_File_Name")]
+ public string Scene03FileName { get; set; }
+
+ [XmlElement(ElementName = "Scene04_File_Name")]
+ public string Scene04FileName { get; set; }
+
+ [XmlElement(ElementName = "Legend")]
+ public string Legend { get; set; }
+ }
+
+
+ [XmlRoot(ElementName = "Satellite_Data")]
+ public class BkaSatelliteData
+ {
+ [XmlElement(ElementName = "Scene_Acquisition")]
+ public BkaSceneAcquisition SceneAcquisition { get; set; }
+
+ [XmlElement(ElementName = "Routes_Count")]
+ public int? RoutesCount { get; set; }
+ }
+
+
+
+ [XmlRoot(ElementName = "Radiometry")]
+ public class BkaRadiometry
+ {
+ [XmlElement(ElementName = "Correction")]
+ public string Correction { get; set; }
+
+ [XmlElement(ElementName = "Spectral")]
+ public BkaSpectral Spectral { get; set; }
+ }
+
+
+
+ [XmlRoot(ElementName = "Geo_Reference")]
+ public class BkaGeoReference
+ {
+ [XmlElement(ElementName = "Datum")]
+ public string Datum { get; set; }
+
+ [XmlElement(ElementName = "Ellipsoid")]
+ public string Ellipsoid { get; set; }
+
+ [XmlElement(ElementName = "Map_Projection")]
+ public string MapProjection { get; set; }
+
+ [XmlElement(ElementName = "Hemisphere")]
+ public string Hemisphere { get; set; }
+
+ [XmlElement(ElementName = "EPSG_code")]
+ public int? EpsgCode { get; set; }
+
+ [XmlElement(ElementName = "EPSG_tables")]
+ public string EpsgTables { get; set; }
+
+ [XmlElement(ElementName = "Elevation_Data")]
+ public BkaElevationData ElevationData { get; set; }
+
+ [XmlElement(ElementName = "Scene_Geoposition")]
+ public BkaSceneGeoposition SceneGeoposition { get; set; }
+ }
+
+
+
+ [XmlRoot(ElementName = "Image_Info")]
+ public class BkaImageInfo
+ {
+ [XmlElement(ElementName = "File_Format")]
+ public string FileFormat { get; set; }
+
+ [XmlElement(ElementName = "Compression")]
+ public string Compression { get; set; }
+
+ [XmlElement(ElementName = "Band_Composite")]
+ public string BandComposite { get; set; }
+
+ [XmlElement(ElementName = "Samples")]
+ public int? Samples { get; set; }
+
+ [XmlElement(ElementName = "Width")]
+ public int? Width { get; set; }
+
+ [XmlElement(ElementName = "Height")]
+ public int? Height { get; set; }
+
+ [XmlElement(ElementName = "Type")]
+ public string Type { get; set; }
+
+ [XmlElement(ElementName = "Bits_per_Pixel")]
+ public int? BitsPerPixel { get; set; }
+
+ [XmlElement(ElementName = "Data_NBits")]
+ public int? DataNBits { get; set; }
+
+ [XmlElement(ElementName = "Data_Type")]
+ public string DataType { get; set; }
+
+ [XmlElement(ElementName = "Byte_Order")]
+ public string ByteOrder { get; set; }
+
+ [XmlElement(ElementName = "Resample")]
+ public BkaImageResample Resample { get; set; }
+ }
+
+
+
+ [XmlRoot(ElementName = "Scene_Acquisition")]
+ public class BkaSceneAcquisition
+ {
+ [XmlElement(ElementName = "Satellite")]
+ public string Satellite { get; set; }
+
+ [XmlElement(ElementName = "Acquisition_Time_GMT")]
+ public string AcquisitionTime { get; set; }
+
+ [XmlElement(ElementName = "Sun_Elevation")]
+ public double? SunElevation { get; set; }
+
+ [XmlElement(ElementName = "Sun_Azimuth")]
+ public double? SunAzimuth { get; set; }
+
+ [XmlElement(ElementName = "Viewing_Angle")]
+ public double? ViewingAngle { get; set; }
+
+ [XmlElement(ElementName = "Center")]
+ public BkaCenterCoordinates Center { get; set; }
+ }
+
+
+ [XmlRoot(ElementName = "Center")]
+ public class BkaCenterCoordinates
+ {
+ [XmlElement(ElementName = "Center_Lat")]
+ public double? CenterLat { get; set; }
+
+ [XmlElement(ElementName = "Center_Lon")]
+ public double? CenterLon { get; set; }
+ }
+
+
+ [XmlRoot(ElementName = "Spectral")]
+ public class BkaSpectral
+ {
+ [XmlElement(ElementName = "Band_PAN")]
+ public BkaBandInfo BandPAN { get; set; }
+
+ [XmlElement(ElementName = "Band_MS1")]
+ public BkaBandInfo BandMS1 { get; set; }
+
+ [XmlElement(ElementName = "Band_MS2")]
+ public BkaBandInfo BandMS2 { get; set; }
+
+ [XmlElement(ElementName = "Band_MS3")]
+ public BkaBandInfo BandMS3 { get; set; }
+
+ [XmlElement(ElementName = "Band_MS4")]
+ public BkaBandInfo BandMS4 { get; set; }
+ }
+
+
+
+ [XmlRoot()]
+ public class BkaBandInfo
+ {
+ [XmlElement(ElementName = "band_index")]
+ public int BandIndex { get; set; }
+
+ [XmlElement(ElementName = "band_code")]
+ public string BandCode { get; set; }
+
+ [XmlElement(ElementName = "band_info")]
+ public string BandInfo { get; set; }
+ }
+
+
+
+ [XmlRoot(ElementName = "Elevation_Data")]
+ public class BkaElevationData
+ {
+ [XmlElement(ElementName = "Elevation_Source")]
+ public string ElevationSource { get; set; }
+
+ [XmlElement(ElementName = "SRTM_Version")]
+ public string SrtmVersion { get; set; }
+ }
+
+
+
+ [XmlRoot(ElementName = "Scene_Geoposition")]
+ public class BkaSceneGeoposition
+ {
+ [XmlElement(ElementName = "Geodetic_Coordinates")]
+ public BkaGeodeticCoordinates GeodeticCoordinates { get; set; }
+
+ [XmlElement(ElementName = "Map_Coordinates")]
+ public BkaMapCoordinates MapCoordinates { get; set; }
+
+ [XmlElement(ElementName = "Bounds")]
+ public BkaSceneBounds Bounds { get; set; }
+
+ [XmlElement(ElementName = "Ground_Resolution")]
+ public BkaSceneGroundResolution GroundResolution { get; set; }
+ }
+
+
+ [XmlRoot(ElementName = "Geodetic_Coordinates")]
+ public class BkaGeodeticCoordinates
+ {
+ [XmlElement(ElementName = "Corner1_SW_Lat")]
+ public double Corner1SWLat { get; set; }
+
+ [XmlElement(ElementName = "Corner1_SW_Lon")]
+ public double Corner1SWLon { get; set; }
+
+ [XmlElement(ElementName = "Corner2_NW_Lat")]
+ public double Corner2NWLat { get; set; }
+
+ [XmlElement(ElementName = "Corner2_NW_Lon")]
+ public double Corner2NWLon { get; set; }
+
+ [XmlElement(ElementName = "Corner3_NE_Lat")]
+ public double Corner3NELat { get; set; }
+
+ [XmlElement(ElementName = "Corner3_NE_Lon")]
+ public double Corner3NELon { get; set; }
+
+ [XmlElement(ElementName = "Corner4_SE_Lat")]
+ public double Corner4SELat { get; set; }
+
+ [XmlElement(ElementName = "Corner4_SE_Lon")]
+ public double Corner4SELon { get; set; }
+ }
+
+
+ [XmlRoot(ElementName = "Map_Coordinates")]
+ public class BkaMapCoordinates
+ {
+ [XmlElement(ElementName = "Corner1_SW_Easting")]
+ public double Corner1SWEasting { get; set; }
+
+ [XmlElement(ElementName = "Corner1_SW_Northing")]
+ public double Corner1SWNorthing { get; set; }
+
+ [XmlElement(ElementName = "Corner2_NW_Easting")]
+ public double Corner2NWEasting { get; set; }
+
+ [XmlElement(ElementName = "Corner2_NW_Northing")]
+ public double Corner2NWNorthing { get; set; }
+
+ [XmlElement(ElementName = "Corner3_NE_Easting")]
+ public double Corner3NEEasting { get; set; }
+
+ [XmlElement(ElementName = "Corner3_NE_Northing")]
+ public double Corner3NENorthing { get; set; }
+
+ [XmlElement(ElementName = "Corner4_SE_Easting")]
+ public double Corner4SEEasting { get; set; }
+
+ [XmlElement(ElementName = "Corner4_SE_Northing")]
+ public double Corner4SENorthing { get; set; }
+ }
+
+
+ [XmlRoot(ElementName = "Bounds")]
+ public class BkaSceneBounds
+ {
+ [XmlElement(ElementName = "File_Name")]
+ public string FileName { get; set; }
+ }
+
+
+ [XmlRoot(ElementName = "Ground_Resolution")]
+ public class BkaSceneGroundResolution
+ {
+ [XmlElement(ElementName = "PixelSize_Easting")]
+ public double PixelSizeEasting { get; set; }
+
+ [XmlElement(ElementName = "PixelSize_Northing")]
+ public double PixelSizeNorthing { get; set; }
+
+ [XmlElement(ElementName = "PixelSize_units")]
+ public string PixelSizeUnits { get; set; }
+ }
+
+
+ [XmlRoot(ElementName = "Resample")]
+ public class BkaImageResample
+ {
+ [XmlElement(ElementName = "Method")]
+ public string Method { get; set; }
+ }
+
+}
\ No newline at end of file
diff --git a/src/Stars.Data/stars-data.json b/src/Stars.Data/stars-data.json
index 4e7b0f55..fb74f7de 100644
--- a/src/Stars.Data/stars-data.json
+++ b/src/Stars.Data/stars-data.json
@@ -112,6 +112,9 @@
"KANOPUS-V": {
"Type": "Terradue.Stars.Data.Model.Metadata.Kanopus.KanopusVMetadataExtractor"
},
+ "BKA": {
+ "Type": "Terradue.Stars.Data.Model.Metadata.Bka.BkaMetadataExtractor"
+ },
"ISRO": {
"Type": "Terradue.Stars.Data.Model.Metadata.Isro.IsroMetadataExtractor"
},