diff --git a/openeo-geotrellis/src/main/scala/org/openeo/geotrellis/layers/FileLayerProvider.scala b/openeo-geotrellis/src/main/scala/org/openeo/geotrellis/layers/FileLayerProvider.scala index e9febc48..9ab0332d 100644 --- a/openeo-geotrellis/src/main/scala/org/openeo/geotrellis/layers/FileLayerProvider.scala +++ b/openeo-geotrellis/src/main/scala/org/openeo/geotrellis/layers/FileLayerProvider.scala @@ -1243,13 +1243,11 @@ class FileLayerProvider private(openSearch: OpenSearchClient, openSearchCollecti * - if feature is in utm, target extent may be invalid in feature crs * this is why we take intersection */ - val commonCRS = targetExtent.crs - val targetExtentInCommonCRS = targetExtent.reproject(commonCRS) - val featureExtentInCommonCRS = feature.rasterExtent.get.reproject(feature.crs.get, commonCRS) + val featureExtentInTargetCRS = feature.rasterExtent.get.reproject(feature.crs.get, targetExtent.crs) - val intersection = featureExtentInCommonCRS.intersection(targetExtentInCommonCRS).map(_.buffer(1.0)) - .getOrElse(featureExtentInCommonCRS) - val tmp = expandToCellSize(intersection.reproject(commonCRS, targetExtent.crs), theResolution) + val intersection = featureExtentInTargetCRS.intersection(targetExtent.extent).map(_.buffer(1.0)) + .getOrElse(featureExtentInTargetCRS) + val tmp = expandToCellSize(intersection, theResolution) val alignedToTargetExtent = re.createAlignedRasterExtent(tmp) Some(alignedToTargetExtent.toGridType[Long]) diff --git a/openeo-geotrellis/src/test/resources/org/openeo/geotrellis/testMissingS2DateLine.json b/openeo-geotrellis/src/test/resources/org/openeo/geotrellis/testMissingS2DateLine.json new file mode 100644 index 00000000..5e72a6ca --- /dev/null +++ b/openeo-geotrellis/src/test/resources/org/openeo/geotrellis/testMissingS2DateLine.json @@ -0,0 +1,569 @@ +{ + "type": "FeatureCollection", + "properties": { + "id": "7c6f676b-ea06-5f51-bd17-70a38f7ff1d2", + "totalResults": null, + "exactCount": 0, + "startIndex": 1, + "itemsPerPage": 1000, + "query": { + "originalFilters": { + "box": "178.72633867329634,70.76628200377719,178.866724486903,70.82813491803448", + "status": "ONLINE", + "dataset": "ESA-DATASET", + "startDate": "2024-04-02T00:00:00Z", + "completionDate": "2024-04-03T00:00:00Z", + "collection": "SENTINEL-2" + }, + "appliedFilters": { + "box": "178.72633867329634,70.76628200377719,178.866724486903,70.82813491803448", + "status": "ONLINE", + "dataset": "ESA-DATASET", + "startDate": "2024-04-02T00:00:00Z", + "completionDate": "2024-04-03T00:00:00Z", + "collection": "SENTINEL-2" + }, + "processingTime": 0.118192746 + }, + "links": [ + { + "rel": "self", + "type": "application/json", + "title": "self", + "href": "https://catalogue.dataspace.copernicus.eu/resto/api/collections/Sentinel2/search.json?box=178.72633867329634%2C70.76628200377719%2C178.866724486903%2C70.82813491803448&page=1&maxRecords=1000&status=ONLINE&dataset=ESA-DATASET&startDate=2024-04-02T00%3A00%3A00Z&completionDate=2024-04-03T00%3A00%3A00Z" + }, + { + "rel": "search", + "type": "application/opensearchdescription+xml", + "title": "OpenSearch Description Document", + "href": "https://catalogue.dataspace.copernicus.eu/resto/api/collections/Sentinel2/describe.xml" + } + ] + }, + "features": [ + { + "type": "Feature", + "id": "a6cdb338-1ab4-447b-abdd-78cde56927a4", + "geometry": { + "type": "MultiPolygon", + "coordinates": [ + [ + [ + [ + 180, + 70.8418254254962 + ], + [ + 179.9040632080704, + 70.19484288998889 + ], + [ + 176.9994705028295, + 70.21832076563753 + ], + [ + 176.9994518989893, + 70.90607981912203 + ], + [ + 177.0133971094673, + 70.91645944454088 + ], + [ + 177.199839761927, + 71.05302740049166 + ], + [ + 177.2061930151708, + 71.05760818625669 + ], + [ + 177.3903933490624, + 71.19021030698168 + ], + [ + 177.4035927539655, + 71.19955639631998 + ], + [ + 180, + 71.17844481285532 + ], + [ + 180, + 70.8418254254962 + ] + ] + ], + [ + [ + [ + -180, + 71.17844481285532 + ], + [ + -179.95015, + 71.1780394383418 + ], + [ + -180, + 70.8418254254962 + ], + [ + -180, + 71.17844481285532 + ] + ] + ] + ] + }, + "properties": { + "collection": "SENTINEL-2", + "status": "ONLINE", + "license": { + "licenseId": "unlicensed", + "hasToBeSigned": "never", + "grantedCountries": null, + "grantedOrganizationCountries": null, + "grantedFlags": null, + "viewService": "public", + "signatureQuota": -1, + "description": { + "shortName": "No license" + } + }, + "parentIdentifier": null, + "title": "S2B_MSIL1C_20240402T000609_N0510_R016_T60WWD_20240402T001958.SAFE", + "description": "The Copernicus Sentinel-2 mission consists of two polar-orbiting satellites that are positioned in the same sun-synchronous orbit, with a phase difference of 180. It aims to monitor changes in land surface conditions. The satellites have a wide swath width (290 km) and a high revisit time. Sentinel-2 is equipped with an optical instrument payload that samples 13 spectral bands: four bands at 10 m, six bands at 20 m and three bands at 60 m spatial resolution [https://dataspace.copernicus.eu/explore-data/data-collections/sentinel-data/sentinel-2].", + "organisationName": null, + "startDate": "2024-04-02T00:06:09.024Z", + "completionDate": "2024-04-02T00:06:09.024Z", + "productType": "S2MSI1C", + "processingLevel": "S2MSI1C", + "platform": "S2B", + "instrument": "MSI", + "resolution": 0, + "sensorMode": "INS-NOBS", + "orbitNumber": 36936, + "quicklook": null, + "thumbnail": "https://catalogue.dataspace.copernicus.eu/get-object?path=/Sentinel-2/MSI/L1C/2024/04/02/S2B_MSIL1C_20240402T000609_N0510_R016_T60WWD_20240402T001958.SAFE/S2B_MSIL1C_20240402T000609_N0510_R016_T60WWD_20240402T001958-ql.jpg", + "updated": "2024-04-02T01:07:35.742Z", + "published": "2024-04-02T01:05:49.640Z", + "snowCover": 0, + "cloudCover": 79.515270411362, + "gmlgeometry": "180.0,70.8418254254962 179.90406320807,70.1948428899889 176.999470502829,70.2183207656375 176.999451898989,70.906079819122 177.013397109467,70.9164594445409 177.199839761927,71.0530274004917 177.206193015171,71.0576081862567 177.390393349062,71.1902103069817 177.403592753966,71.19955639632 180.0,71.1784448128553 180.0,70.8418254254962-180,71.1784448128553 -179.95015,71.1780394383418 -180,70.8418254254962 -180,71.1784448128553", + "centroid": { + "type": "Point", + "coordinates": [ + 177.464743426394, + 70.6942065367668 + ] + }, + "productIdentifier": "/eodata/Sentinel-2/MSI/L1C/2024/04/02/S2B_MSIL1C_20240402T000609_N0510_R016_T60WWD_20240402T001958.SAFE", + "orbitDirection": null, + "timeliness": null, + "relativeOrbitNumber": 16, + "processingBaseline": 5.1, + "missionTakeId": "GS2B_20240402T000609_036936_N05.10", + "services": { + "download": { + "url": "https://catalogue.dataspace.copernicus.eu/download/a6cdb338-1ab4-447b-abdd-78cde56927a4", + "mimeType": "application/octet-stream", + "size": 748892301 + } + }, + "links": [ + { + "rel": "self", + "type": "application/json", + "title": "GeoJSON link for a6cdb338-1ab4-447b-abdd-78cde56927a4", + "href": "https://catalogue.dataspace.copernicus.eu/resto/collections/SENTINEL-2/a6cdb338-1ab4-447b-abdd-78cde56927a4.json" + } + ] + } + }, + { + "type": "Feature", + "id": "4fe42670-54fb-4e66-8ea5-f13ed74c394d", + "geometry": { + "type": "MultiPolygon", + "coordinates": [ + [ + [ + [ + -180, + 71.1754685740731 + ], + [ + -179.50662, + 71.18609391597852 + ], + [ + -179.38673, + 70.20246735196007 + ], + [ + -180, + 70.1893406780604 + ], + [ + -180, + 71.1754685740731 + ] + ] + ], + [ + [ + [ + 180, + 70.1893406780604 + ], + [ + 177.7191700376, + 70.14052089926992 + ], + [ + 177.4551847198166, + 71.12066368510631 + ], + [ + 180, + 71.1754685740731 + ], + [ + 180, + 70.1893406780604 + ] + ] + ] + ] + }, + "properties": { + "collection": "SENTINEL-2", + "status": "ONLINE", + "license": { + "licenseId": "unlicensed", + "hasToBeSigned": "never", + "grantedCountries": null, + "grantedOrganizationCountries": null, + "grantedFlags": null, + "viewService": "public", + "signatureQuota": -1, + "description": { + "shortName": "No license" + } + }, + "parentIdentifier": null, + "title": "S2B_MSIL1C_20240402T000609_N0510_R016_T01WCU_20240402T001958.SAFE", + "description": "The Copernicus Sentinel-2 mission consists of two polar-orbiting satellites that are positioned in the same sun-synchronous orbit, with a phase difference of 180. It aims to monitor changes in land surface conditions. The satellites have a wide swath width (290 km) and a high revisit time. Sentinel-2 is equipped with an optical instrument payload that samples 13 spectral bands: four bands at 10 m, six bands at 20 m and three bands at 60 m spatial resolution [https://dataspace.copernicus.eu/explore-data/data-collections/sentinel-data/sentinel-2].", + "organisationName": null, + "startDate": "2024-04-02T00:06:09.024Z", + "completionDate": "2024-04-02T00:06:09.024Z", + "productType": "S2MSI1C", + "processingLevel": "S2MSI1C", + "platform": "S2B", + "instrument": "MSI", + "resolution": 0, + "sensorMode": "INS-NOBS", + "orbitNumber": 36936, + "quicklook": null, + "thumbnail": "https://catalogue.dataspace.copernicus.eu/get-object?path=/Sentinel-2/MSI/L1C/2024/04/02/S2B_MSIL1C_20240402T000609_N0510_R016_T01WCU_20240402T001958.SAFE/S2B_MSIL1C_20240402T000609_N0510_R016_T01WCU_20240402T001958-ql.jpg", + "updated": "2024-04-02T01:09:53.787Z", + "published": "2024-04-02T01:08:08.468Z", + "snowCover": 0, + "cloudCover": 84.510346681, + "gmlgeometry": "-180,71.1754685740731 -179.50662,71.1860939159785 -179.38673,70.2024673519601 -180,70.1893406780604 -180,71.1754685740731180.0,70.1893406780604 177.7191700376,70.1405208992699 177.455184719817,71.1206636851063 180.0,71.1754685740731 180.0,70.1893406780604", + "centroid": { + "type": "Point", + "coordinates": [ + 111.902011001716, + 70.6664156555398 + ] + }, + "productIdentifier": "/eodata/Sentinel-2/MSI/L1C/2024/04/02/S2B_MSIL1C_20240402T000609_N0510_R016_T01WCU_20240402T001958.SAFE", + "orbitDirection": null, + "timeliness": null, + "relativeOrbitNumber": 16, + "processingBaseline": 5.1, + "missionTakeId": "GS2B_20240402T000609_036936_N05.10", + "services": { + "download": { + "url": "https://catalogue.dataspace.copernicus.eu/download/4fe42670-54fb-4e66-8ea5-f13ed74c394d", + "mimeType": "application/octet-stream", + "size": 762837400 + } + }, + "links": [ + { + "rel": "self", + "type": "application/json", + "title": "GeoJSON link for 4fe42670-54fb-4e66-8ea5-f13ed74c394d", + "href": "https://catalogue.dataspace.copernicus.eu/resto/collections/SENTINEL-2/4fe42670-54fb-4e66-8ea5-f13ed74c394d.json" + } + ] + } + }, + { + "type": "Feature", + "id": "b25acc88-80ce-49b7-b625-6ac6688275a5", + "geometry": { + "type": "MultiPolygon", + "coordinates": [ + [ + [ + [ + 180, + 70.8418254254962 + ], + [ + 179.9040632080704, + 70.19484288998889 + ], + [ + 176.9994705028295, + 70.21832076563753 + ], + [ + 176.9994518989893, + 70.90607981912203 + ], + [ + 177.0133971094673, + 70.91645944454088 + ], + [ + 177.199839761927, + 71.05302740049166 + ], + [ + 177.2061930151708, + 71.05760818625669 + ], + [ + 177.3903933490624, + 71.19021030698168 + ], + [ + 177.4035927539655, + 71.19955639631998 + ], + [ + 180, + 71.17844481285532 + ], + [ + 180, + 70.8418254254962 + ] + ] + ], + [ + [ + [ + -180, + 71.17844481285532 + ], + [ + -179.95015, + 71.1780394383418 + ], + [ + -180, + 70.8418254254962 + ], + [ + -180, + 71.17844481285532 + ] + ] + ] + ] + }, + "properties": { + "collection": "SENTINEL-2", + "status": "ONLINE", + "license": { + "licenseId": "unlicensed", + "hasToBeSigned": "never", + "grantedCountries": null, + "grantedOrganizationCountries": null, + "grantedFlags": null, + "viewService": "public", + "signatureQuota": -1, + "description": { + "shortName": "No license" + } + }, + "parentIdentifier": null, + "title": "S2B_MSIL2A_20240402T000609_N0510_R016_T60WWD_20240402T003652.SAFE", + "description": "The Copernicus Sentinel-2 mission consists of two polar-orbiting satellites that are positioned in the same sun-synchronous orbit, with a phase difference of 180. It aims to monitor changes in land surface conditions. The satellites have a wide swath width (290 km) and a high revisit time. Sentinel-2 is equipped with an optical instrument payload that samples 13 spectral bands: four bands at 10 m, six bands at 20 m and three bands at 60 m spatial resolution [https://dataspace.copernicus.eu/explore-data/data-collections/sentinel-data/sentinel-2].", + "organisationName": null, + "startDate": "2024-04-02T00:06:09.024Z", + "completionDate": "2024-04-02T00:06:09.024Z", + "productType": "S2MSI2A", + "processingLevel": "S2MSI2A", + "platform": "S2B", + "instrument": "MSI", + "resolution": 0, + "sensorMode": "INS-NOBS", + "orbitNumber": 36936, + "quicklook": null, + "thumbnail": "https://catalogue.dataspace.copernicus.eu/get-object?path=/Sentinel-2/MSI/L2A/2024/04/02/S2B_MSIL2A_20240402T000609_N0510_R016_T60WWD_20240402T003652.SAFE/S2B_MSIL2A_20240402T000609_N0510_R016_T60WWD_20240402T003652-ql.jpg", + "updated": "2024-04-02T01:53:23.144Z", + "published": "2024-04-02T01:52:55.925Z", + "snowCover": 0, + "cloudCover": 82.784283, + "gmlgeometry": "180.0,70.8418254254962 179.90406320807,70.1948428899889 176.999470502829,70.2183207656375 176.999451898989,70.906079819122 177.013397109467,70.9164594445409 177.199839761927,71.0530274004917 177.206193015171,71.0576081862567 177.390393349062,71.1902103069817 177.403592753966,71.19955639632 180.0,71.1784448128553 180.0,70.8418254254962-180,71.1784448128553 -179.95015,71.1780394383418 -180,70.8418254254962 -180,71.1784448128553", + "centroid": { + "type": "Point", + "coordinates": [ + 177.464743426394, + 70.6942065367668 + ] + }, + "productIdentifier": "/eodata/Sentinel-2/MSI/L2A/2024/04/02/S2B_MSIL2A_20240402T000609_N0510_R016_T60WWD_20240402T003652.SAFE", + "orbitDirection": null, + "timeliness": null, + "relativeOrbitNumber": 16, + "processingBaseline": 5.1, + "missionTakeId": "GS2B_20240402T000609_036936_N05.10", + "services": { + "download": { + "url": "https://catalogue.dataspace.copernicus.eu/download/b25acc88-80ce-49b7-b625-6ac6688275a5", + "mimeType": "application/octet-stream", + "size": 940045162 + } + }, + "links": [ + { + "rel": "self", + "type": "application/json", + "title": "GeoJSON link for b25acc88-80ce-49b7-b625-6ac6688275a5", + "href": "https://catalogue.dataspace.copernicus.eu/resto/collections/SENTINEL-2/b25acc88-80ce-49b7-b625-6ac6688275a5.json" + } + ] + } + }, + { + "type": "Feature", + "id": "c164d927-d2a6-4a4f-a432-8f5b451b5f06", + "geometry": { + "type": "MultiPolygon", + "coordinates": [ + [ + [ + [ + -180, + 71.1754685740731 + ], + [ + -179.50662, + 71.18609391597852 + ], + [ + -179.38673, + 70.20246735196007 + ], + [ + -180, + 70.1893406780604 + ], + [ + -180, + 71.1754685740731 + ] + ] + ], + [ + [ + [ + 180, + 70.1893406780604 + ], + [ + 177.7191700376, + 70.14052089926992 + ], + [ + 177.4551847198166, + 71.12066368510631 + ], + [ + 180, + 71.1754685740731 + ], + [ + 180, + 70.1893406780604 + ] + ] + ] + ] + }, + "properties": { + "collection": "SENTINEL-2", + "status": "ONLINE", + "license": { + "licenseId": "unlicensed", + "hasToBeSigned": "never", + "grantedCountries": null, + "grantedOrganizationCountries": null, + "grantedFlags": null, + "viewService": "public", + "signatureQuota": -1, + "description": { + "shortName": "No license" + } + }, + "parentIdentifier": null, + "title": "S2B_MSIL2A_20240402T000609_N0510_R016_T01WCU_20240402T003652.SAFE", + "description": "The Copernicus Sentinel-2 mission consists of two polar-orbiting satellites that are positioned in the same sun-synchronous orbit, with a phase difference of 180. It aims to monitor changes in land surface conditions. The satellites have a wide swath width (290 km) and a high revisit time. Sentinel-2 is equipped with an optical instrument payload that samples 13 spectral bands: four bands at 10 m, six bands at 20 m and three bands at 60 m spatial resolution [https://dataspace.copernicus.eu/explore-data/data-collections/sentinel-data/sentinel-2].", + "organisationName": null, + "startDate": "2024-04-02T00:06:09.024Z", + "completionDate": "2024-04-02T00:06:09.024Z", + "productType": "S2MSI2A", + "processingLevel": "S2MSI2A", + "platform": "S2B", + "instrument": "MSI", + "resolution": 0, + "sensorMode": "INS-NOBS", + "orbitNumber": 36936, + "quicklook": null, + "thumbnail": "https://catalogue.dataspace.copernicus.eu/get-object?path=/Sentinel-2/MSI/L2A/2024/04/02/S2B_MSIL2A_20240402T000609_N0510_R016_T01WCU_20240402T003652.SAFE/S2B_MSIL2A_20240402T000609_N0510_R016_T01WCU_20240402T003652-ql.jpg", + "updated": "2024-04-02T01:53:17.222Z", + "published": "2024-04-02T01:52:50.903Z", + "snowCover": 0, + "cloudCover": 88.21907, + "gmlgeometry": "-180,71.1754685740731 -179.50662,71.1860939159785 -179.38673,70.2024673519601 -180,70.1893406780604 -180,71.1754685740731180.0,70.1893406780604 177.7191700376,70.1405208992699 177.455184719817,71.1206636851063 180.0,71.1754685740731 180.0,70.1893406780604", + "centroid": { + "type": "Point", + "coordinates": [ + 111.902011001716, + 70.6664156555398 + ] + }, + "productIdentifier": "/eodata/Sentinel-2/MSI/L2A/2024/04/02/S2B_MSIL2A_20240402T000609_N0510_R016_T01WCU_20240402T003652.SAFE", + "orbitDirection": null, + "timeliness": null, + "relativeOrbitNumber": 16, + "processingBaseline": 5.1, + "missionTakeId": "GS2B_20240402T000609_036936_N05.10", + "services": { + "download": { + "url": "https://catalogue.dataspace.copernicus.eu/download/c164d927-d2a6-4a4f-a432-8f5b451b5f06", + "mimeType": "application/octet-stream", + "size": 938587592 + } + }, + "links": [ + { + "rel": "self", + "type": "application/json", + "title": "GeoJSON link for c164d927-d2a6-4a4f-a432-8f5b451b5f06", + "href": "https://catalogue.dataspace.copernicus.eu/resto/collections/SENTINEL-2/c164d927-d2a6-4a4f-a432-8f5b451b5f06.json" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/openeo-geotrellis/src/test/scala/org/openeo/geotrellis/LayerFixtures.scala b/openeo-geotrellis/src/test/scala/org/openeo/geotrellis/LayerFixtures.scala index 53738852..a38546f2 100644 --- a/openeo-geotrellis/src/test/scala/org/openeo/geotrellis/LayerFixtures.scala +++ b/openeo-geotrellis/src/test/scala/org/openeo/geotrellis/LayerFixtures.scala @@ -372,6 +372,26 @@ object LayerFixtures { // Use artifactory to avoid heavy git repo val basePathArtifactory = "https://artifactory.vgt.vito.be/artifactory/testdata-public" + /* + To upload new files; + - mount /eodata + - change openeo-opensearch-client to use fs instead of s3 + - run this Python script, and copy the printed paths here: +root = Path("/tmp/EODATA/") +l = set(filter(lambda p: p.is_file(), root.rglob("*.*"))) +l = {f for f in l if os.stat(f).st_size > 0} +l = set(map(lambda p: os.path.relpath(p, root), l)) +for p in l: + cmd = f'curl -uUSERNAME:PASS -T {root / p} "https://artifactory.vgt.vito.be/artifactory/testdata-public/eodata/{p}"' + print(cmd) + code = os.system(cmd) + if code != 0: + raise Exception("Failed: " + cmd) +print("\n") +for p in l: + print(f'"/eodata/{p}",') + */ + val artifactoryPaths = Set( "/eodata/Sentinel-2/MSI/L2A/2023/01/17/S2B_MSIL2A_20230117T104259_N0509_R008_T31UGS_20230117T120337.SAFE/manifest.safe", "/eodata/Sentinel-2/MSI/L2A/2023/01/17/S2B_MSIL2A_20230117T104259_N0509_R008_T31UGS_20230117T120337.SAFE/MTD_MSIL2A.xml", @@ -406,6 +426,17 @@ object LayerFixtures { "/eodata/Sentinel-2/MSI/L2A/2024/03/24/S2B_MSIL2A_20240324T230529_N0510_R044_T04WDD_20240324T234241.SAFE/GRANULE/L2A_T04WDD_A036821_20240324T230529/MTD_TL.xml", "/eodata/Sentinel-2/MSI/L2A/2024/03/24/S2B_MSIL2A_20240324T230529_N0510_R044_T04WDD_20240324T234241.SAFE/manifest.safe", "/eodata/Sentinel-2/MSI/L2A/2024/03/24/S2B_MSIL2A_20240324T230529_N0510_R044_T04WDD_20240324T234241.SAFE/MTD_MSIL2A.xml", + // testMissingS2DateLine + "/eodata/Sentinel-2/MSI/L2A/2024/04/02/S2B_MSIL2A_20240402T000609_N0510_R016_T01WCU_20240402T003652.SAFE/manifest.safe", + "/eodata/Sentinel-2/MSI/L2A/2024/04/02/S2B_MSIL2A_20240402T000609_N0510_R016_T01WCU_20240402T003652.SAFE/MTD_MSIL2A.xml", + "/eodata/Sentinel-2/MSI/L2A/2024/04/02/S2B_MSIL2A_20240402T000609_N0510_R016_T60WWD_20240402T003652.SAFE/MTD_MSIL2A.xml", + "/eodata/Sentinel-2/MSI/L1C/2024/04/02/S2B_MSIL1C_20240402T000609_N0510_R016_T01WCU_20240402T001958.SAFE/manifest.safe", + "/eodata/Sentinel-2/MSI/L1C/2024/04/02/S2B_MSIL1C_20240402T000609_N0510_R016_T01WCU_20240402T001958.SAFE/MTD_MSIL1C.xml", + "/eodata/Sentinel-2/MSI/L2A/2024/04/02/S2B_MSIL2A_20240402T000609_N0510_R016_T60WWD_20240402T003652.SAFE/GRANULE/L2A_T60WWD_A036936_20240402T000609/IMG_DATA/R20m/T60WWD_20240402T000609_SCL_20m.jp2", + "/eodata/Sentinel-2/MSI/L1C/2024/04/02/S2B_MSIL1C_20240402T000609_N0510_R016_T60WWD_20240402T001958.SAFE/MTD_MSIL1C.xml", + "/eodata/Sentinel-2/MSI/L1C/2024/04/02/S2B_MSIL1C_20240402T000609_N0510_R016_T60WWD_20240402T001958.SAFE/manifest.safe", + "/eodata/Sentinel-2/MSI/L2A/2024/04/02/S2B_MSIL2A_20240402T000609_N0510_R016_T01WCU_20240402T003652.SAFE/GRANULE/L2A_T01WCU_A036936_20240402T000609/IMG_DATA/R20m/T01WCU_20240402T000609_SCL_20m.jp2", + "/eodata/Sentinel-2/MSI/L2A/2024/04/02/S2B_MSIL2A_20240402T000609_N0510_R016_T60WWD_20240402T003652.SAFE/manifest.safe", ) for (path <- artifactoryPaths) { diff --git a/openeo-geotrellis/src/test/scala/org/openeo/geotrellis/layers/FileLayerProviderTest.scala b/openeo-geotrellis/src/test/scala/org/openeo/geotrellis/layers/FileLayerProviderTest.scala index 648fdeba..942186ac 100644 --- a/openeo-geotrellis/src/test/scala/org/openeo/geotrellis/layers/FileLayerProviderTest.scala +++ b/openeo-geotrellis/src/test/scala/org/openeo/geotrellis/layers/FileLayerProviderTest.scala @@ -1076,7 +1076,7 @@ class FileLayerProviderTest extends RasterMatchers{ cubeSpatial.writeGeoTiff("tmp/testPixelValueOffsetNeededCorner.tiff") val arr = cubeSpatial.collect().array assertTrue(isNoData(arr(1)._2.toArrayTile().band(0).get(162, 250))) - assertEquals(172, arr(0)._2.toArrayTile().band(0).get(5, 5), 1) + assertEquals(187, arr(0)._2.toArrayTile().band(0).get(160, 5), 1) } @Test @@ -1091,7 +1091,7 @@ class FileLayerProviderTest extends RasterMatchers{ cubeSpatial.writeGeoTiff("tmp/testPixelValueOffsetNeededDark.tiff") val band = cubeSpatial.collect().array(0)._2.toArrayTile().band(0) - assertEquals(888, band.get(0, 0), 1) + assertEquals(682, band.get(20, 140), 1) assertEquals(-582, band.get(133, 151), 1) } @@ -1141,16 +1141,22 @@ class FileLayerProviderTest extends RasterMatchers{ new Directory(outDir.toFile).deepFiles.foreach(_.delete()) Files.createDirectories(outDir) - val dateFrom = ZonedDateTime.parse("2024-04-02T00:00:00Z") - val dateTo = ZonedDateTime.parse("2024-04-03T00:00:00Z") - val extent = Extent(178.7384, 70.769, 178.8548, 70.8254) val projected_polygons_native_crs = ProjectedPolygons.fromExtent(extent, LatLng.proj4jCrs.toString) val utmCrs = CRS.fromName(crsName) val reprojected = projected_polygons_native_crs.polygons.head.reproject(projected_polygons_native_crs.crs, utmCrs) val poly2 = ProjectedPolygons(Array(reprojected), utmCrs) - val layer = LayerFixtures.sentinel2CubeCDSEGeneric((dateFrom, dateTo), poly2, bandNames = java.util.Arrays.asList("IMG_DATA_Band_SCL_20m_Tile1_Data")) + val jsonPath = "/org/openeo/geotrellis/testMissingS2DateLine.json" + + + val bandNames = java.util.Arrays.asList("IMG_DATA_Band_SCL_20m_Tile1_Data") + + val layer = LayerFixtures.sentinel2Cube( + LocalDate.of(2024, 4, 2), poly2, jsonPath, + new DataCubeParameters, + bandNames, + ) val layer_collected = layer.collect() assert(layer_collected.nonEmpty) diff --git a/pom.xml b/pom.xml index f8a33caf..90804d68 100644 --- a/pom.xml +++ b/pom.xml @@ -52,7 +52,7 @@ geotrellis-accumulo-extensions geotrellis-s3-extensions - + geotrellis-sentinelhub geotrellis-extensions geotrellis-seeder openeo-geotrellis