It's a bit strange that I'm experiencing some missing data when processing MODIS level 2 data using GPT Mosaic. In particular, there seem to be parts of the output Rrs and rhos that are missing, and the specific regions that are affected vary from image to image. I've attached an RGB image from L1mapgen (which shows the full image processed from level 1 data: A2022186011500.L1A_LAC), an RGB image from the mosaicked rhos (produced using GPT Mosaic from level 2 data), as well as the XML file I used for mosaicking. I used SeaDAS version 8.3. Can you help me figure out what might be causing this issue? Thank you!
<graph id="AQUA_MODIS">
<version>1.0</version>
<node id="MosaicNode">
<operator>Mosaic</operator>
<sources>
<sourceProducts>${sourceProducts}</sourceProducts>
</sources>
<parameters>
<variables>
<variable>
<name>Rrs_412</name>
<expression>Rrs_412</expression>
</variable>
<variable>
<name>Rrs_443</name>
<expression>Rrs_443</expression>
</variable>
<variable>
<name>Rrs_469</name>
<expression>Rrs_469</expression>
</variable>
<variable>
<name>Rrs_488</name>
<expression>Rrs_488</expression>
</variable>
<variable>
<name>Rrs_531</name>
<expression>Rrs_531</expression>
</variable>
<variable>
<name>Rrs_547</name>
<expression>Rrs_547</expression>
</variable>
<variable>
<name>Rrs_555</name>
<expression>Rrs_555</expression>
</variable>
<variable>
<name>Rrs_645</name>
<expression>Rrs_645</expression>
</variable>
<variable>
<name>Rrs_667</name>
<expression>Rrs_667</expression>
</variable>
<variable>
<name>Rrs_678</name>
<expression>Rrs_678</expression>
</variable>
<variable>
<name>Rrs_748</name>
<expression>Rrs_748</expression>
</variable>
<variable>
<name>Rrs_859</name>
<expression>Rrs_859</expression>
</variable>
<variable>
<name>Rrs_869</name>
<expression>Rrs_869</expression>
</variable>
<variable>
<name>Rrs_1240</name>
<expression>Rrs_1240</expression>
</variable>
<variable>
<name>Rrs_1640</name>
<expression>Rrs_1640</expression>
</variable>
<variable>
<name>Rrs_2130</name>
<expression>Rrs_2130</expression>
</variable>
<variable>
<name>rhos_412</name>
<expression>rhos_412</expression>
</variable>
<variable>
<name>rhos_443</name>
<expression>rhos_443</expression>
</variable>
<variable>
<name>rhos_469</name>
<expression>rhos_469</expression>
</variable>
<variable>
<name>rhos_488</name>
<expression>rhos_488</expression>
</variable>
<variable>
<name>rhos_531</name>
<expression>rhos_531</expression>
</variable>
<variable>
<name>rhos_547</name>
<expression>rhos_547</expression>
</variable>
<variable>
<name>rhos_555</name>
<expression>rhos_555</expression>
</variable>
<variable>
<name>rhos_645</name>
<expression>rhos_645</expression>
</variable>
<variable>
<name>rhos_667</name>
<expression>rhos_667</expression>
</variable>
<variable>
<name>rhos_678</name>
<expression>rhos_678</expression>
</variable>
<variable>
<name>rhos_748</name>
<expression>rhos_748</expression>
</variable>
<variable>
<name>rhos_859</name>
<expression>rhos_859</expression>
</variable>
<variable>
<name>rhos_869</name>
<expression>rhos_869</expression>
</variable>
<variable>
<name>rhos_1240</name>
<expression>rhos_1240</expression>
</variable>
<variable>
<name>rhos_1640</name>
<expression>rhos_1640</expression>
</variable>
<variable>
<name>rhos_2130</name>
<expression>rhos_2130</expression>
</variable>
<variable>
<name>chlor_a</name>
<expression>chlor_a</expression>
</variable>
<variable>
<name>Kd_490</name>
<expression>Kd_490</expression>
</variable>
<variable>
<name>nflh</name>
<expression>nflh</expression>
</variable>
<variable>
<name>ATMFAIL</name>
<expression>l2_flags.ATMFAIL ? 1 : 0</expression>
</variable>
<variable>
<name>LAND</name>
<expression>l2_flags.LAND ? 1 : 0</expression>
</variable>
<variable>
<name>PRODWARN</name>
<expression>l2_flags.PRODWARN ? 1 : 0</expression>
</variable>
<variable>
<name>HIGLINT</name>
<expression>l2_flags.HIGLINT ? 1 : 0</expression>
</variable>
<variable>
<name>HILT</name>
<expression>l2_flags.HILT ? 1 : 0</expression>
</variable>
<variable>
<name>HISATZEN</name>
<expression>l2_flags.HISATZEN ? 1 : 0</expression>
</variable>
<variable>
<name>COASTZ</name>
<expression>l2_flags.COASTZ ? 1 : 0</expression>
</variable>
<variable>
<name>SPARE8</name>
<expression>l2_flags.SPARE8 ? 1 : 0</expression>
</variable>
<variable>
<name>STRAYLIGHT</name>
<expression>l2_flags.STRAYLIGHT ? 1 : 0</expression>
</variable>
<variable>
<name>CLDICE</name>
<expression>l2_flags.CLDICE ? 1 : 0</expression>
</variable>
<variable>
<name>COCCOLITH</name>
<expression>l2_flags.COCCOLITH ? 1 : 0</expression>
</variable>
<variable>
<name>TURBIDW</name>
<expression>l2_flags.TURBIDW ? 1 : 0</expression>
</variable>
<variable>
<name>HISOLZEN</name>
<expression>l2_flags.HISOLZEN ? 1 : 0</expression>
</variable>
<variable>
<name>SPARE14</name>
<expression>l2_flags.SPARE14 ? 1 : 0</expression>
</variable>
<variable>
<name>LOWLW</name>
<expression>l2_flags.LOWLW ? 1 : 0</expression>
</variable>
<variable>
<name>CHLFAIL</name>
<expression>l2_flags.CHLFAIL ? 1 : 0</expression>
</variable>
<variable>
<name>NAVWARN</name>
<expression>l2_flags.NAVWARN ? 1 : 0</expression>
</variable>
<variable>
<name>ABSAER</name>
<expression>l2_flags.ABSAER ? 1 : 0</expression>
</variable>
<variable>
<name>SPARE19</name>
<expression>l2_flags.SPARE19 ? 1 : 0</expression>
</variable>
<variable>
<name>MAXAERITER</name>
<expression>l2_flags.MAXAERITER ? 1 : 0</expression>
</variable>
<variable>
<name>MODGLINT</name>
<expression>l2_flags.MODGLINT ? 1 : 0</expression>
</variable>
<variable>
<name>CHLWARN</name>
<expression>l2_flags.CHLWARN ? 1 : 0</expression>
</variable>
<variable>
<name>ATMWARN</name>
<expression>l2_flags.ATMWARN ? 1 : 0</expression>
</variable>
<variable>
<name>SPARE24</name>
<expression>l2_flags.SPARE24 ? 1 : 0</expression>
</variable>
<variable>
<name>SEAICE</name>
<expression>l2_flags.SEAICE ? 1 : 0</expression>
</variable>
<variable>
<name>NAVFAIL</name>
<expression>l2_flags.NAVFAIL ? 1 : 0</expression>
</variable>
<variable>
<name>FILTER</name>
<expression>l2_flags.FILTER ? 1 : 0</expression>
</variable>
<variable>
<name>SPARE28</name>
<expression>l2_flags.SPARE28 ? 1 : 0</expression>
</variable>
<variable>
<name>BOWTIEDEL</name>
<expression>l2_flags.BOWTIEDEL ? 1 : 0</expression>
</variable>
<variable>
<name>HIPOL</name>
<expression>l2_flags.HIPOL ? 1 : 0</expression>
</variable>
<variable>
<name>PRODFAIL</name>
<expression>l2_flags.PRODFAIL ? 1 : 0</expression>
</variable>
<variable>
<name>SPARE32</name>
<expression>l2_flags.SPARE32 ? 1 : 0</expression>
</variable>
</variables>
<crs>GEOGCS["WGS84(DD)", DATUM["WGS84", SPHEROID["WGS84", 6378137.0, 298.257223563]],PRIMEM["Greenwich", 0.0], UNIT["degree", 0.017453292519943295],AXIS["Geodetic longitude", EAST], AXIS["Geodetic latitude", NORTH]]</crs>
<resampling>Bicubic</resampling>
<westBound>-178.5</westBound>
<northBound>-28</northBound>
<eastBound>-174.5</eastBound>
<southBound>-32</southBound>
<pixelSizeX>0.00454545</pixelSizeX>
<pixelSizeY>0.00454545</pixelSizeY>
</parameters>
</node>
</graph>
GPT mosaic missing data
GPT mosaic missing data
- Attachments
-
- AQUA_MODIS_20220705T011500_GPT_Mosaic_RGB.jpg (182.92 KiB) Not viewed yet
-
- AQUA_MODIS_20220705T011500_RGB-l1mapgen.jpg (154.22 KiB) Not viewed yet
Tags:
-
- Subject Matter Expert
- Posts: 626
- Joined: Tue Feb 09, 2021 5:42 pm America/New_York
- Been thanked: 1 time
Re: GPT mosaic missing data
Previously we said Mosaic has issues dealing with geographic area that crosses the dateline. viewtopic.php?p=14394#p14394
In fact, Mosaic has issues with geographic area that is near the dateline, even it does not cross the dateline.
Here is the workaround, which is less than straight forward.
1. Create a new band "new_long" in SeaDAS (shift the longitude 50 degrees away from the dateline -- with the edited expression "longitude < 0 ? longitude + 50 : longitude - 50") 2. Open a band (e.g. Rrs_443), do Tools -> Attach Pixel Geo-Coding), choose new_long as Longitude band, and save the file as AQUA_MODIS.20220705T011501.L2.OC_new_long.dim 3. Do Mosaic on the saved file with the xml file modified as the following, note it's -128.5/-124.5 instead of -178.5/-174.5) --
<variable>
<name>latitude</name>
<expression>latitude</expression>
</variable>
<variable>
<name>longitude</name>
<expression>longitude</expression>
</variable>
<variable>
<name>new_long</name>
<expression>new_long</expression>
</variable>
<westBound>-128.5</westBound>
<northBound>-28</northBound>
<eastBound>-124.5</eastBound>
<southBound>-32</southBound>
4. Open the output file (AQUA_MODIS.20220705T011501.L2.OC_Mosaic.dim), and do Tools -> Attach Pixel Geo-Coding) again. This time use longitude as Longitude band.
This is the image of Rrs_443 --
In fact, Mosaic has issues with geographic area that is near the dateline, even it does not cross the dateline.
Here is the workaround, which is less than straight forward.
1. Create a new band "new_long" in SeaDAS (shift the longitude 50 degrees away from the dateline -- with the edited expression "longitude < 0 ? longitude + 50 : longitude - 50") 2. Open a band (e.g. Rrs_443), do Tools -> Attach Pixel Geo-Coding), choose new_long as Longitude band, and save the file as AQUA_MODIS.20220705T011501.L2.OC_new_long.dim 3. Do Mosaic on the saved file with the xml file modified as the following, note it's -128.5/-124.5 instead of -178.5/-174.5) --
<variable>
<name>latitude</name>
<expression>latitude</expression>
</variable>
<variable>
<name>longitude</name>
<expression>longitude</expression>
</variable>
<variable>
<name>new_long</name>
<expression>new_long</expression>
</variable>
<westBound>-128.5</westBound>
<northBound>-28</northBound>
<eastBound>-124.5</eastBound>
<southBound>-32</southBound>
4. Open the output file (AQUA_MODIS.20220705T011501.L2.OC_Mosaic.dim), and do Tools -> Attach Pixel Geo-Coding) again. This time use longitude as Longitude band.
This is the image of Rrs_443 --
Re: GPT mosaic missing data
That's great, thank you very much! I was wondering if there are any other ways to perform mosaicking (reprojection and subset), such as through Python code. Are you aware of any options?
-
- Subject Matter Expert
- Posts: 626
- Joined: Tue Feb 09, 2021 5:42 pm America/New_York
- Been thanked: 1 time
Re: GPT mosaic missing data
If your task is to Subset and Reprojection, you can avoid Mosaic by extract (SeaDAS processors) and then reprojection --
1. SeaDAS-Toolbox -> SeaDAS Processors -> extractors
2. Raster -> Geometric -> Reprojection
Here is the resulted image of chlor_a --
1. SeaDAS-Toolbox -> SeaDAS Processors -> extractors
2. Raster -> Geometric -> Reprojection
Here is the resulted image of chlor_a --