From add4d7928df12d93b5edbd594dff3eeb68972495 Mon Sep 17 00:00:00 2001 From: "Yen, David (398B-Affiliate)" Date: Wed, 17 Apr 2024 15:59:56 -0700 Subject: [PATCH] sentinel cross IDL unit tests --- .../test/MetadataFilesToEchoTest.java | 48 +++++++------------ .../nasa/cumulus/metadata/test/UMMTest.java | 9 +++- .../cumulus/metadata/test/UnitTestUtil.java | 31 ++++++++++++ ...232816_20210619T002429_F02_notOverIDL.json | 1 + ...19T002429_20210619T012042_F02_overIde.json | 1 + 5 files changed, 56 insertions(+), 34 deletions(-) create mode 100644 src/test/java/gov/nasa/cumulus/metadata/test/UnitTestUtil.java create mode 100644 src/test/resources/ummgResults/sentinel6/S6A_P4_2__LR_STD__ST_022_131_20210618T232816_20210619T002429_F02_notOverIDL.json create mode 100644 src/test/resources/ummgResults/sentinel6/S6A_P4_2__LR_STD__ST_022_132_20210619T002429_20210619T012042_F02_overIde.json diff --git a/src/test/java/gov/nasa/cumulus/metadata/test/MetadataFilesToEchoTest.java b/src/test/java/gov/nasa/cumulus/metadata/test/MetadataFilesToEchoTest.java index 3152cb2..35b5f6d 100644 --- a/src/test/java/gov/nasa/cumulus/metadata/test/MetadataFilesToEchoTest.java +++ b/src/test/java/gov/nasa/cumulus/metadata/test/MetadataFilesToEchoTest.java @@ -141,7 +141,7 @@ public void testCreateJson() JSONObject granule = mfte.createJson(); System.out.println(granule.toJSONString()); assertEquals("20170408033000-JPL-L2P_GHRSST-SSTskin-MODIS_T-N-v02.0-fv01.0", granule.get("GranuleUR")); - compareFileWithGranuleJson("ummgResults/from_mp_file/20170408033000-JPL-L2P_GHRSST-SSTskin-MODIS_T-N-v02.0-fv01.0.json", granuleJson); + assertTrue(UnitTestUtil.compareFileWithGranuleJson("ummgResults/from_mp_file/20170408033000-JPL-L2P_GHRSST-SSTskin-MODIS_T-N-v02.0-fv01.0.json", granuleJson)); } @Test @@ -177,7 +177,7 @@ public void testCreateJsonWithOrbitNumber() JSONArray orbitArray = (JSONArray) granule.get("OrbitCalculatedSpatialDomains"); Integer orbitNumber = (Integer) ((JSONObject) orbitArray.get(0)).get("OrbitNumber"); assertEquals(orbitNumber, new Integer(870)); - compareFileWithGranuleJson("ummgResults/from_mp_file/RSS_SMAP_SSS_L2C_r00870_20150401T004312_2015091_FNL_V04.0.json", granuleJson); + assertTrue(UnitTestUtil.compareFileWithGranuleJson("ummgResults/from_mp_file/RSS_SMAP_SSS_L2C_r00870_20150401T004312_2015091_FNL_V04.0.json", granuleJson)); } @Test @@ -199,7 +199,7 @@ public void testCreateJsonWithStartEndOrbitNumber() Integer endOrbit = (Integer) ((JSONObject) orbitArray.get(0)).get("EndOrbitNumber"); assertEquals(beginOrbit, new Integer("870")); assertEquals(endOrbit, new Integer("1308")); - compareFileWithGranuleJson("ummgResults/from_mp_file/RSS_smap_SSS_L3_monthly_2015_04_FNL_v04.0_OrbitStartEnd.json", granule); + assertTrue(UnitTestUtil.compareFileWithGranuleJson("ummgResults/from_mp_file/RSS_smap_SSS_L3_monthly_2015_04_FNL_v04.0_OrbitStartEnd.json", granule)); } @Test @@ -230,7 +230,7 @@ public void testCreateJsonWithCyclePass() JSONObject track = (JSONObject) ((JSONObject) ((JSONObject) granule.get("SpatialExtent")).get("HorizontalSpatialDomain")).get("Track"); assertEquals(new Long(374), track.get("Cycle")); assertEquals(new Long(172), ((JSONObject) ((JSONArray) track.get("Passes")).get(0)).get("Pass")); - compareFileWithGranuleJson("ummgResults/from_mp_file/JA1_GPN_2PeP374_172_20120303_112035_20120303_121638_withcyclepass.json", granuleJson); + assertTrue(UnitTestUtil.compareFileWithGranuleJson("ummgResults/from_mp_file/JA1_GPN_2PeP374_172_20120303_112035_20120303_121638_withcyclepass.json", granuleJson)); } @Test @@ -252,7 +252,7 @@ public void testSwotArchive() JSONObject track = (JSONObject) ((JSONObject) ((JSONObject) granule.get("SpatialExtent")).get("HorizontalSpatialDomain")).get("Track"); assertEquals(new Long(22), track.get("Cycle")); assertEquals(new Long(33), ((JSONObject) ((JSONArray) track.get("Passes")).get(0)).get("Pass")); - compareFileWithGranuleJson("ummgResults/swotArchiveXml/SWOT_IVK_20210612T081400_20210612T072103_20210612T080137_O_APID1402.PTM_1.archive.json", granule); + assertTrue(UnitTestUtil.compareFileWithGranuleJson("ummgResults/swotArchiveXml/SWOT_IVK_20210612T081400_20210612T072103_20210612T080137_O_APID1402.PTM_1.archive.json", granule)); } @Test @@ -546,7 +546,7 @@ public void testReadIsoMendsMetadataFileAdditionalFields_publishAll() throws Par Arrays.toString(keys.toArray()) + "\n" + Arrays.toString(checkForKey.toArray()))); } - compareFileWithGranuleJson("ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishAll.json", granuleJson); + assertTrue(UnitTestUtil.compareFileWithGranuleJson("ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishAll.json", granuleJson)); } /** @@ -652,7 +652,7 @@ public void testReadIsoMendsMetadataFileAdditionalFields_appendFieldToJSON() thr e.printStackTrace(); fail(); } - compareFileWithGranuleJson("ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0.json", granule); + assertTrue(UnitTestUtil.compareFileWithGranuleJson("ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0.json", granule)); } @Test @@ -701,7 +701,7 @@ public void testReadIsoMendsMetadataFileAdditionalFields_publishSpecific() throw e.printStackTrace(); fail(); } - compareFileWithGranuleJson("ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishSpecific.json", granuleJson); + assertTrue(UnitTestUtil.compareFileWithGranuleJson("ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishSpecific.json", granuleJson)); } @Test @@ -759,7 +759,7 @@ public void testReadIsoMendsMetadataFileAdditionalFields_publishAllWithSpecific( e.printStackTrace(); fail(); } - compareFileWithGranuleJson("ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishAllWithSpecific.json", granuleJson); + assertTrue(UnitTestUtil.compareFileWithGranuleJson("ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishAllWithSpecific.json", granuleJson)); } @Test @@ -848,7 +848,7 @@ public void testReadIsoMendsMetadataFileAdditionalFields_publishAllEmptyCatchErr } catch (Exception e){ fail("Issue when generating JSON"); } - compareFileWithGranuleJson("ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishAllEmptyCatchError_3.json", granule); + assertTrue(UnitTestUtil.compareFileWithGranuleJson("ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_publishAllEmptyCatchError_3.json", granule)); } @Test @@ -923,7 +923,7 @@ public void testReadIsoMendsMetadataFileAdditionalFields_appendFieldToJSON_Strin e.printStackTrace(); fail(); } - compareFileWithGranuleJson("ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_appendFieldToJSON_String.json", granuleJson); + assertTrue(UnitTestUtil.compareFileWithGranuleJson("ummgResults/additionalAttributes/OPERA_L3_DSWx_HLS_T14RNV_20210906T170251Z_20221026T184342Z_L8_30_v0.0_appendFieldToJSON_String.json", granuleJson)); } @Test @@ -973,23 +973,7 @@ public void testCreateJsonSwotCalVal() throws IOException, ParseException, XPath // load pre-saved file and compare with generated granule JSONObject // SWOTCalVal_WM_ADCP_L0_RiverRay1_20220727T191701_20220727T192858_20220920T142800_swotCalVal_ummg.json // load pre-saved file and perform json comparison - assertTrue(compareFileWithGranuleJson("ummgResults/swotCalVal/SWOTCalVal_WM_ADCP_L0_RiverRay1_20220727T191701_20220727T192858_20220920T142800_swotCalVal_ummg.json", granule)); - } - - public boolean compareFileWithGranuleJson(String filePath, JSONObject granuleJson) throws - IOException, ParseException{ - ClassLoader classLoader = getClass().getClassLoader(); - File preSavedJsonFile = new File(classLoader.getResource(filePath).getFile()); - String readInJsonStr = FileUtils.readFileToString(preSavedJsonFile, StandardCharsets.UTF_8); - JSONParser parser = new JSONParser(); - ObjectMapper mapper = new ObjectMapper(); - JSONObject readInJsonObj = (JSONObject) parser.parse(readInJsonStr); - // remove ProviderDates structure because it always has most current datetime - // the ProviderDates saved in file is different than the provider dates generated on the fly - granuleJson.remove("ProviderDates"); - readInJsonObj.remove("ProviderDates"); - assertEquals(mapper.readTree(readInJsonObj.toJSONString()), mapper.readTree(granuleJson.toJSONString())); - return true; // if reached this point, return true + assertTrue(UnitTestUtil.compareFileWithGranuleJson("ummgResults/swotCalVal/SWOTCalVal_WM_ADCP_L0_RiverRay1_20220727T191701_20220727T192858_20220920T142800_swotCalVal_ummg.json", granule)); } @Test public void testSWOTCreateJsonSWOTIsoXMLSpatialType() throws IOException, ParseException, XPathExpressionException, ParserConfigurationException, SAXException, URISyntaxException { @@ -1074,7 +1058,7 @@ public void testSWOTCreateJsonSWOTIsoXMLSpatialType() throws IOException, ParseE // verify the pre-saved ummg.json file is equal to the granule json just built - assertTrue(compareFileWithGranuleJson("ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_footprintOrbitBBox.json", granule)); + assertTrue(UnitTestUtil.compareFileWithGranuleJson("ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_footprintOrbitBBox.json", granule)); /** * Test isoXMLSpatial:[footprint] */ @@ -1124,7 +1108,7 @@ public void testSWOTCreateJsonSWOTIsoXMLSpatialType() throws IOException, ParseE .get("BoundingRectangles")); assert bbox == null; // load pre-saved file and perform json comparison - assertTrue(compareFileWithGranuleJson("ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_footprint.json", granule)); + assertTrue(UnitTestUtil.compareFileWithGranuleJson("ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_footprint.json", granule)); /** * Test isoXMLSpatial:[bbox] */ @@ -1164,7 +1148,7 @@ public void testSWOTCreateJsonSWOTIsoXMLSpatialType() throws IOException, ParseE assert ((BigDecimal)bbox.get("EastBoundingCoordinate")).compareTo(new BigDecimal("45.675058000000035463017411530017852783203125"))==0; assert ((BigDecimal)bbox.get("NorthBoundingCoordinate")).compareTo(new BigDecimal("78.272067999999990206561051309108734130859375"))==0; // load pre-saved file and perform json comparison - assertTrue(compareFileWithGranuleJson("ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_bbox.json", granule)); + assertTrue(UnitTestUtil.compareFileWithGranuleJson("ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_bbox.json", granule)); /** * Test isoXMLSpatial:[orbit] */ @@ -1203,7 +1187,7 @@ public void testSWOTCreateJsonSWOTIsoXMLSpatialType() throws IOException, ParseE .get("Geometry"))); assert bbox == null; // load pre-saved file and perform json comparison - assertTrue(compareFileWithGranuleJson("ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_orbit.json", granule)); + assertTrue(UnitTestUtil.compareFileWithGranuleJson("ummgResults/swotIsoXMLSpatialType/SWOT_L2_LR_SSH_Basic_006_143_20231107T150730_20231107T155607_PIB0_01_orbit.json", granule)); } private void clearVariables4IsoXMLSpatialTest(JSONArray isoXMLSpatialArray, HashSet isoXMLSpatialHashSet, JSONObject granule) { diff --git a/src/test/java/gov/nasa/cumulus/metadata/test/UMMTest.java b/src/test/java/gov/nasa/cumulus/metadata/test/UMMTest.java index 063ac8f..fb9169c 100644 --- a/src/test/java/gov/nasa/cumulus/metadata/test/UMMTest.java +++ b/src/test/java/gov/nasa/cumulus/metadata/test/UMMTest.java @@ -449,7 +449,6 @@ public void testSentinelManifestOverIDL() String granuleId ="S6A_P4_2__LR_STD__ST_022_132_20210619T002429_20210619T012042_F02"; JSONObject umm = parseXfduManifest(testFile, testConfigFile, granuleId); - //SpatialExtent JSONObject hsd = (JSONObject) ((JSONObject) umm.get("SpatialExtent" )).get("HorizontalSpatialDomain" ); @@ -487,6 +486,8 @@ public void testSentinelManifestOverIDL() lastPoint = (JSONObject) pnts.get(29); assertEquals(Double.valueOf(56.013938), ((Double) lastPoint.get("Latitude" ))); assertEquals(Double.valueOf(-171.655155), ((Double) lastPoint.get("Longitude" ))); + + assertTrue(UnitTestUtil.compareFileWithGranuleJson("ummgResults/sentinel6/S6A_P4_2__LR_STD__ST_022_132_20210619T002429_20210619T012042_F02_overIde.json",umm)); } @Test @@ -499,7 +500,6 @@ public void testSentinelManifestL0TooFewCoordinates() String granuleId ="S6A_P4_2__LR_STD__ST_022_132_20210619T002429_20210619T012042_F02"; JSONObject umm = parseXfduManifest(testFile, testConfigFile, granuleId); - //SpatialExtent JSONObject hsd = (JSONObject) ((JSONObject) umm.get("SpatialExtent" )).get("HorizontalSpatialDomain" ); JSONArray boundingCoordinates = (JSONArray) ((JSONObject)hsd.get("Geometry")).get("BoundingRectangles"); @@ -524,6 +524,10 @@ public void testSentinelManifestNotOverIDL() JSONObject umm = parseXfduManifest(testFile, testConfigFile, granuleId); + MetadataFilesToEcho mfte = new MetadataFilesToEcho(true); + mfte.writeJson("/tmp/notOverIDL.json", umm.toJSONString()); + + //SpatialExtent JSONObject hsd = (JSONObject) ((JSONObject) umm.get("SpatialExtent" )).get("HorizontalSpatialDomain" ); @@ -545,6 +549,7 @@ public void testSentinelManifestNotOverIDL() JSONObject lastPoint = (JSONObject) pnts.get(31); assertEquals(Double.valueOf(-62.663981), ((Double) lastPoint.get("Latitude" ))); assertEquals(Double.valueOf(2.525361), ((Double) lastPoint.get("Longitude" ))); + assertTrue(UnitTestUtil.compareFileWithGranuleJson("ummgResults/sentinel6/S6A_P4_2__LR_STD__ST_022_131_20210618T232816_20210619T002429_F02_notOverIDL.json", umm)); } @Test diff --git a/src/test/java/gov/nasa/cumulus/metadata/test/UnitTestUtil.java b/src/test/java/gov/nasa/cumulus/metadata/test/UnitTestUtil.java new file mode 100644 index 0000000..eda4a77 --- /dev/null +++ b/src/test/java/gov/nasa/cumulus/metadata/test/UnitTestUtil.java @@ -0,0 +1,31 @@ +package gov.nasa.cumulus.metadata.test; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.commons.io.FileUtils; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +import static org.junit.Assert.assertEquals; + +public class UnitTestUtil { + public static boolean compareFileWithGranuleJson(String filePath, JSONObject granuleJson) throws + IOException, ParseException { + ClassLoader classLoader = UnitTestUtil.class.getClassLoader(); + File preSavedJsonFile = new File(classLoader.getResource(filePath).getFile()); + String readInJsonStr = FileUtils.readFileToString(preSavedJsonFile, StandardCharsets.UTF_8); + JSONParser parser = new JSONParser(); + ObjectMapper mapper = new ObjectMapper(); + JSONObject readInJsonObj = (JSONObject) parser.parse(readInJsonStr); + // remove ProviderDates structure because it always has most current datetime + // the ProviderDates saved in file is different than the provider dates generated on the fly + granuleJson.remove("ProviderDates"); + readInJsonObj.remove("ProviderDates"); + assertEquals(mapper.readTree(readInJsonObj.toJSONString()), mapper.readTree(granuleJson.toJSONString())); + return true; // if reached this point, return true + } +} diff --git a/src/test/resources/ummgResults/sentinel6/S6A_P4_2__LR_STD__ST_022_131_20210618T232816_20210619T002429_F02_notOverIDL.json b/src/test/resources/ummgResults/sentinel6/S6A_P4_2__LR_STD__ST_022_131_20210618T232816_20210619T002429_F02_notOverIDL.json new file mode 100644 index 0000000..705f2ac --- /dev/null +++ b/src/test/resources/ummgResults/sentinel6/S6A_P4_2__LR_STD__ST_022_131_20210618T232816_20210619T002429_F02_notOverIDL.json @@ -0,0 +1 @@ +{"TemporalExtent":{"RangeDateTime":{"EndingDateTime":"2021-06-19T00:24:29.471Z","BeginningDateTime":"2021-06-18T23:28:16.542Z"}},"MetadataSpecification":{"Version":"1.6.5","URL":"https:\/\/cdn.earthdata.nasa.gov\/umm\/granule\/v1.6.5","Name":"UMM-G"},"GranuleUR":"S6A_P4_2__LR_STD__ST_022_131_20210618T232816_20210619T002429_F02","ProviderDates":[{"Type":"Insert","Date":"2024-04-17T22:56:28.512Z"},{"Type":"Update","Date":"2024-04-17T22:56:28.514Z"}],"SpatialExtent":{"HorizontalSpatialDomain":{"Geometry":{"GPolygons":[{"Boundary":{"Points":[{"Latitude":-65.649768,"Longitude":-25.561001},{"Latitude":-66.644101,"Longitude":-25.454693},{"Latitude":-63.597255,"Longitude":2.884525},{"Latitude":-56.022254,"Longitude":22.501876},{"Latitude":-46.176484,"Longitude":34.738356},{"Latitude":-35.287184,"Longitude":42.821997},{"Latitude":-23.891329,"Longitude":48.714422},{"Latitude":-12.243013,"Longitude":53.479583},{"Latitude":-0.492119,"Longitude":57.755247},{"Latitude":11.245057,"Longitude":62.012329},{"Latitude":22.847334,"Longitude":66.712901},{"Latitude":34.159401,"Longitude":72.465261},{"Latitude":44.931266,"Longitude":80.267339},{"Latitude":54.690314,"Longitude":91.997549},{"Latitude":62.326143,"Longitude":110.882612},{"Latitude":65.638561,"Longitude":138.707184},{"Latitude":65.64749,"Longitude":140.321732},{"Latitude":66.647475,"Longitude":140.316202},{"Latitude":66.638546,"Longitude":138.701654},{"Latitude":63.319145,"Longitude":110.764513},{"Latitude":55.61772,"Longitude":91.623494},{"Latitude":45.700998,"Longitude":79.628972},{"Latitude":34.746947,"Longitude":71.65607},{"Latitude":23.301042,"Longitude":65.821751},{"Latitude":11.620689,"Longitude":61.08556},{"Latitude":-0.151127,"Longitude":56.81518},{"Latitude":-11.901085,"Longitude":52.539857},{"Latitude":-23.512671,"Longitude":47.788885},{"Latitude":-34.827746,"Longitude":41.933788},{"Latitude":-45.580038,"Longitude":33.935703},{"Latitude":-55.2425,"Longitude":21.87579},{"Latitude":-62.663981,"Longitude":2.525361},{"Latitude":-65.649768,"Longitude":-25.561001}]}}]},"Track":{"Cycle":22,"Passes":[{"Pass":131}]}}},"AdditionalAttributes":[{"Values":["S6A_P4_2__LR______20210618T232816_20210619T002429_20210619T220302_3373_022_131_065_EUM__OPE_ST_F02.SEN6"],"Name":"ProviderDataSource"}],"DataGranule":{"DayNightFlag":"Unspecified","ProductionDateTime":"2021-06-19T22:10:40.000Z"},"CollectionReference":{"Version":"E","ShortName":"JASON_CS_S6A_L0_ALT_ACQ"}} \ No newline at end of file diff --git a/src/test/resources/ummgResults/sentinel6/S6A_P4_2__LR_STD__ST_022_132_20210619T002429_20210619T012042_F02_overIde.json b/src/test/resources/ummgResults/sentinel6/S6A_P4_2__LR_STD__ST_022_132_20210619T002429_20210619T012042_F02_overIde.json new file mode 100644 index 0000000..5fdc9d2 --- /dev/null +++ b/src/test/resources/ummgResults/sentinel6/S6A_P4_2__LR_STD__ST_022_132_20210619T002429_20210619T012042_F02_overIde.json @@ -0,0 +1 @@ +{"TemporalExtent":{"RangeDateTime":{"EndingDateTime":"2021-06-19T01:20:42.499Z","BeginningDateTime":"2021-06-19T00:24:29.521Z"}},"MetadataSpecification":{"Version":"1.6.5","URL":"https:\/\/cdn.earthdata.nasa.gov\/umm\/granule\/v1.6.5","Name":"UMM-G"},"GranuleUR":"S6A_P4_2__LR_STD__ST_022_132_20210619T002429_20210619T012042_F02","ProviderDates":[{"Type":"Insert","Date":"2024-04-17T21:48:16.012Z"},{"Type":"Update","Date":"2024-04-17T21:48:16.014Z"}],"SpatialExtent":{"HorizontalSpatialDomain":{"Geometry":{"GPolygons":[{"Boundary":{"Points":[{"Latitude":66.644644,"Longitude":140.378601},{"Latitude":65.650321,"Longitude":140.272202},{"Latitude":62.660913,"Longitude":168.368305},{"Latitude":58.947656,"Longitude":180.0},{"Latitude":59.804021000000006,"Longitude":180.0},{"Latitude":63.594104,"Longitude":168.727685},{"Latitude":66.644644,"Longitude":140.378601}]}},{"Boundary":{"Points":[{"Latitude":59.804021000000006,"Longitude":-180.0},{"Latitude":58.947656,"Longitude":-180.0},{"Latitude":55.234399,"Longitude":-172.281509},{"Latitude":45.565597,"Longitude":-160.222191},{"Latitude":34.808176,"Longitude":-152.225714},{"Latitude":23.489431,"Longitude":-146.37198},{"Latitude":11.875462,"Longitude":-141.621838},{"Latitude":0.12445,"Longitude":-137.34684},{"Latitude":-11.647688,"Longitude":-133.076034},{"Latitude":-23.32745,"Longitude":-128.33854},{"Latitude":-34.770171,"Longitude":-122.502557},{"Latitude":-45.72047,"Longitude":-114.526255},{"Latitude":-55.63104,"Longitude":-102.528062},{"Latitude":-63.325503,"Longitude":-83.384567},{"Latitude":-66.639085,"Longitude":-55.450611},{"Latitude":-66.647778,"Longitude":-53.840211},{"Latitude":-65.647793,"Longitude":-53.834813},{"Latitude":-65.6391,"Longitude":-55.445213},{"Latitude":-62.332478,"Longitude":-83.266658},{"Latitude":-54.7035,"Longitude":-102.15434},{"Latitude":-44.950447,"Longitude":-113.888239},{"Latitude":-34.182329,"Longitude":-121.69358},{"Latitude":-22.87354,"Longitude":-127.447493},{"Latitude":-11.271951,"Longitude":-132.149308},{"Latitude":0.465463,"Longitude":-136.406782},{"Latitude":12.21734,"Longitude":-140.682094},{"Latitude":23.867966,"Longitude":-145.446393},{"Latitude":35.267412,"Longitude":-151.3374},{"Latitude":46.161783,"Longitude":-159.419345},{"Latitude":56.013938,"Longitude":-171.655155},{"Latitude":59.804021000000006,"Longitude":-180.0}]}}]},"Track":{"Cycle":22,"Passes":[{"Pass":132}]}}},"AdditionalAttributes":[{"Values":["S6A_P4_2__LR______20210619T002429_20210619T012042_20210619T221048_3373_022_132_066_EUM__OPE_ST_F02.SEN6"],"Name":"ProviderDataSource"}],"DataGranule":{"DayNightFlag":"Unspecified","ProductionDateTime":"2021-06-19T22:17:31.000Z"},"CollectionReference":{"Version":"E","ShortName":"JASON_CS_S6A_L0_ALT_ACQ"}} \ No newline at end of file