Issue with saving MODIS AQUA L2 reproyected as netCDF-CF

Use this Forum to find information on, or ask a question about, NASA Earth Science data.
fbecker23
Posts: 17
Joined: Tue Oct 25, 2022 11:16 am America/New_York
Answers: 0

Issue with saving MODIS AQUA L2 reproyected as netCDF-CF

by fbecker23 » Tue Jan 10, 2023 8:48 am America/New_York

Hi,
I am working with several MODIS AQUA L2 images as "AQUA_MODIS.20100623T181501.L2.OC.x.nc". I currently have SeaDAS 8.2.0 installed, and I have tried to do a Mercator reprojection for each image, and save as netCDF4 - CF. I want that format because I want to read the images with python after the reprojection. I have tried to do the processes manually, and with batch processing, but I can't save, or export, the image as netCDF4 - CF. SeaDas allows me to save the image as netCDF4 - BEAM, but not as netCDF - CF.
A few weeks ago, prior to the renaming of the VIIRS and MODIS files with the recent R2022 reprocessing, I was able to do this but not now.
Thanks,
Fernando

Tags:

fbecker23
Posts: 17
Joined: Tue Oct 25, 2022 11:16 am America/New_York
Answers: 0

Re: Issue with saving MODIS AQUA L2 reproyected as netCDF-CF

by fbecker23 » Wed Jan 11, 2023 9:15 am America/New_York

More information about the problem. When I try to load the .xlm file in SeaDAS with the batch processing I get this error:

java.lang.NullPointerException
at org.esa.snap.graphbuilder.gpf.ui.ReprojectionUI.initParameters(ReprojectionUI.java:122)
at org.esa.snap.graphbuilder.gpf.ui.ReprojectionUI.CreateOpTab(ReprojectionUI.java:113)
at org.esa.snap.graphbuilder.rcp.dialogs.BatchGraphDialog.addGraphTabs(BatchGraphDialog.java:459)
[catch] at org.esa.snap.graphbuilder.rcp.dialogs.BatchGraphDialog.loadGraph(BatchGraphDialog.java:258)
at org.esa.snap.graphbuilder.rcp.dialogs.BatchGraphDialog.loadGraph(BatchGraphDialog.java:249)
at org.esa.snap.graphbuilder.rcp.dialogs.BatchGraphDialog.onYes(BatchGraphDialog.java:233)
at org.esa.snap.ui.AbstractDialog.lambda$initUI$3(AbstractDialog.java:482)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6539)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6304)
at java.awt.Container.processEvent(Container.java:2239)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
at java.awt.Container.dispatchEventImpl(Container.java:2283)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:733)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:159)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

OB SeaDAS - xuanyang02
Subject Matter Expert
Subject Matter Expert
Posts: 482
Joined: Tue Feb 09, 2021 5:42 pm America/New_York
Answers: 1
Been thanked: 1 time

Re: Issue with saving MODIS AQUA L2 reproyected as netCDF-CF

by OB SeaDAS - xuanyang02 » Wed Jan 11, 2023 1:25 pm America/New_York

It's a bug that SeaDAS can't save the reprojected file in the netCDF-CF format. We fixed it. Hopefully the fix will be in the next release.

OB SeaDAS - xuanyang02
Subject Matter Expert
Subject Matter Expert
Posts: 482
Joined: Tue Feb 09, 2021 5:42 pm America/New_York
Answers: 1
Been thanked: 1 time

Re: Issue with saving MODIS AQUA L2 reproyected as netCDF-CF

by OB SeaDAS - xuanyang02 » Wed Jan 11, 2023 2:42 pm America/New_York

Could you please share the content of your xml file?

fbecker23
Posts: 17
Joined: Tue Oct 25, 2022 11:16 am America/New_York
Answers: 0

Re: Issue with saving MODIS AQUA L2 reproyected as netCDF-CF

by fbecker23 » Wed Jan 11, 2023 4:56 pm America/New_York

I have read your answer and updated my SeaDAS to 8.3.0, but I still have the problem. My .xml and .par files are

*Example01.xml*

<graph id="Graph">
<version>1.0</version>

<node id="Read">
<operator>Read</operator>
<sources/>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<file>${path}${ifile}.${extention}</file>
</parameters>
</node>

<node id="BandMaths">
<operator>BandMaths</operator>
<sources>
<sourceProduct refid="Read"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<targetBands>
<targetBand>
<name>chlor_a</name>
<type>float32</type>
<expression>if chlor_a &gt; 8 or chlor_a &lt; 0.06 then NaN else chlor_a</expression>
<description/>
<unit>mg m^-3</unit>
<noDataValue>0.0</noDataValue>
</targetBand>
<targetBand>
<name>l2_flags</name>
<type>float32</type>
<expression>l2_flags</expression>
<description/>
<unit/>
<noDataValue>0.0</noDataValue>
</targetBand>
<targetBand>
<name>par</name>
<type>float32</type>
<expression>par</expression>
<description/>
<unit>einstein m^-2 day^-1</unit>
<noDataValue>0.0</noDataValue>
</targetBand>
</targetBands>
<variables/>
</parameters>
</node>

<node id="Reproject">
<operator>Reproject</operator>
<sources>
<sourceProduct refid="BandMaths"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<wktFile/>
<crs>PROJCS[&quot;Mercator_1SP / World Geodetic System 1984&quot;,
GEOGCS[&quot;World Geodetic System 1984&quot;,
DATUM[&quot;World Geodetic System 1984&quot;,
SPHEROID[&quot;WGS 84&quot;, 6378137.0, 298.257223563, AUTHORITY[&quot;EPSG&quot;,&quot;7030&quot;]],
AUTHORITY[&quot;EPSG&quot;,&quot;6326&quot;]],
PRIMEM[&quot;Greenwich&quot;, 0.0, AUTHORITY[&quot;EPSG&quot;,&quot;8901&quot;]],
UNIT[&quot;degree&quot;, 0.017453292519943295],
AXIS[&quot;Geodetic longitude&quot;, EAST],
AXIS[&quot;Geodetic latitude&quot;, NORTH]],
PROJECTION[&quot;Mercator_1SP&quot;],
PARAMETER[&quot;latitude_of_origin&quot;, 0.0],
PARAMETER[&quot;central_meridian&quot;, 0.0],
PARAMETER[&quot;scale_factor&quot;, 1.0],
PARAMETER[&quot;false_easting&quot;, 0.0],
PARAMETER[&quot;false_northing&quot;, 0.0],
UNIT[&quot;m&quot;, 1.0],
AXIS[&quot;Easting&quot;, EAST],
AXIS[&quot;Northing&quot;, NORTH]]</crs>
<resampling>Nearest</resampling>
<referencePixelX/>
<referencePixelY/>
<easting/>
<northing/>
<orientation/>
<pixelSizeX/>
<pixelSizeY/>
<width/>
<height/>
<tileSizeX/>
<tileSizeY/>
<orthorectify>false</orthorectify>
<elevationModelName/>
<noDataValue>NaN</noDataValue>
<includeTiePointGrids>true</includeTiePointGrids>
<addDeltaBands>false</addDeltaBands>
</parameters>
</node>

<node id="Subset">
<operator>Subset</operator>
<sources>
<sourceProduct refid="Reproject"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<sourceBands/>
<region>0,0,0,0</region>
<referenceBand/>
<geoRegion>POLYGON ((${west} ${north}, ${east} ${north}, ${east} ${south}, ${west} ${south}, ${west} ${north}))</geoRegion>
<subSamplingX>1</subSamplingX>
<subSamplingY>1</subSamplingY>
<fullSwath>false</fullSwath>
<tiePointGridNames/>
<copyMetadata>true</copyMetadata>
</parameters>
</node>

<node id="Write">
<operator>Write</operator>
<sources>
<sourceProduct refid="Subset"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<file>${path}${ifile}_${ofileSuffix}.${extention}</file>
<formatName>NetCDF4-CF</formatName>
</parameters>
</node>
<applicationData id="Presentation">
<Description>hola</Description>
<node id="Read">
<displayPosition x="37.0" y="134.0"/>
</node>
<node id="BandMaths">
<displayPosition x="245.0" y="72.0"/>
</node>
<node id="Reproject">
<displayPosition x="467.0" y="61.0"/>
</node>
<node id="Subset">
<displayPosition x="660.0" y="62.0"/>
</node>
<node id="Write">
<displayPosition x="868.0" y="60.0"/>
</node>
</applicationData>
</graph>

-----------------------------------------------------------------------
*Example01.par*

path = /home/fernando/Escritorio/
ifile = AQUA_MODIS.20100623T181501.L2.OC
extention = nc
west = -68
north = -42
east = -58
south = -49
ofileSuffix = _proyMerc

-----------------------------------------------------------------------
-----------------------------------------------------------------------


When I tried to load the .xml file in SeaDAS "Batch Processing", I get this error:

java.lang.NullPointerException
at org.esa.snap.graphbuilder.gpf.ui.ReprojectionUI.initParameters(ReprojectionUI.java:122)
at org.esa.snap.graphbuilder.gpf.ui.ReprojectionUI.CreateOpTab(ReprojectionUI.java:113)
at org.esa.snap.graphbuilder.rcp.dialogs.BatchGraphDialog.addGraphTabs(BatchGraphDialog.java:459)
[catch] at org.esa.snap.graphbuilder.rcp.dialogs.BatchGraphDialog.loadGraph(BatchGraphDialog.java:258)
at org.esa.snap.graphbuilder.rcp.dialogs.BatchGraphDialog.loadGraph(BatchGraphDialog.java:249)
at org.esa.snap.graphbuilder.rcp.dialogs.BatchGraphDialog.onYes(BatchGraphDialog.java:233)
at org.esa.snap.ui.AbstractDialog.lambda$initUI$3(AbstractDialog.java:482)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6539)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6304)
at java.awt.Container.processEvent(Container.java:2239)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
at java.awt.Container.dispatchEventImpl(Container.java:2283)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:733)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:159)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)


-----------------------------------------------------------------------
-----------------------------------------------------------------------

And when I tried to execute by gpt with this command line:
sh gpt /home/fernando/SeaDAS/bin/Example01.xml -p /home/fernando/SeaDAS/bin/Example01.par

I get this error:

/usr/lib/jvm/java-18-openjdk-amd64
SEVERE: org.esa.snap.runtime.Engine: Failed to start org.esa.snap.dataio.netcdf.NetCdfActivator
java.lang.RuntimeException: java.lang.NoSuchMethodException: Invalid method : initializePath
at org.esa.snap.core.util.NativeLibraryUtils.registerNativePaths(NativeLibraryUtils.java:59)
at org.esa.snap.dataio.netcdf.NetCdfActivator.activate(NetCdfActivator.java:44)
at org.esa.snap.dataio.netcdf.NetCdfActivator.start(NetCdfActivator.java:53)
at org.esa.snap.runtime.Engine.informActivators(Engine.java:222)
at org.esa.snap.runtime.Engine.lambda$start$0(Engine.java:121)
at org.esa.snap.runtime.Engine.runClientCode(Engine.java:189)
at org.esa.snap.runtime.Engine.start(Engine.java:121)
at org.esa.snap.runtime.Engine.start(Engine.java:90)
at org.esa.snap.runtime.Launcher.run(Launcher.java:51)
at org.esa.snap.runtime.Launcher.main(Launcher.java:31)
Caused by: java.lang.NoSuchMethodException: Invalid method : initializePath
at org.esa.snap.core.util.PrivilegedAccessor.getMethod(PrivilegedAccessor.java:201)
at org.esa.snap.core.util.PrivilegedAccessor.getMethod(PrivilegedAccessor.java:205)
at org.esa.snap.core.util.PrivilegedAccessor.getMethod(PrivilegedAccessor.java:205)
at org.esa.snap.core.util.NativeLibraryUtils.registerNativePaths(NativeLibraryUtils.java:54)
... 9 more

SEVERE: org.esa.snap.core.gpf.internal.OperatorSpiRegistryImpl: org.esa.s3tbx.olci.harmonisation.OlciO2aHarmonisationOp$Spi:OlciO2aHarmonisation conflicts with org.esa.s3tbx.olci.o2a.harmonisation.OlciO2aHarmonisationOp$Spi:OlciO2aHarmonisation
INFO: org.esa.snap.core.gpf.operators.tooladapter.ToolAdapterIO: Initializing external tool adapters
INFO: org.esa.snap.core.util.EngineVersionCheckActivator: Please check regularly for new updates for the best SeaDAS experience.
java.lang.ExceptionInInitializerError
at com.thoughtworks.xstream.XStream.setupConverters(XStream.java:820)
at com.thoughtworks.xstream.XStream.<init>(XStream.java:574)
at com.thoughtworks.xstream.XStream.<init>(XStream.java:496)
at com.thoughtworks.xstream.XStream.<init>(XStream.java:465)
at com.thoughtworks.xstream.XStream.<init>(XStream.java:411)
at com.thoughtworks.xstream.XStream.<init>(XStream.java:350)
at org.esa.snap.core.gpf.graph.GraphIO.initXstream(GraphIO.java:114)
at org.esa.snap.core.gpf.graph.GraphIO.read(GraphIO.java:76)
at org.esa.snap.core.gpf.main.DefaultCommandLineContext.readGraph(DefaultCommandLineContext.java:75)
at org.esa.snap.core.gpf.main.CommandLineTool.readGraph(CommandLineTool.java:543)
at org.esa.snap.core.gpf.main.CommandLineTool.runGraph(CommandLineTool.java:339)
at org.esa.snap.core.gpf.main.CommandLineTool.runGraphOrOperator(CommandLineTool.java:287)
at org.esa.snap.core.gpf.main.CommandLineTool.run(CommandLineTool.java:188)
at org.esa.snap.core.gpf.main.CommandLineTool.run(CommandLineTool.java:121)
at org.esa.snap.core.gpf.main.GPT.run(GPT.java:59)
at org.esa.snap.core.gpf.main.GPT.main(GPT.java:37)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:577)
at org.esa.snap.runtime.Launcher.lambda$run$0(Launcher.java:55)
at org.esa.snap.runtime.Engine.runClientCode(Engine.java:189)
at org.esa.snap.runtime.Launcher.run(Launcher.java:51)
at org.esa.snap.runtime.Launcher.main(Launcher.java:31)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private final java.util.Comparator java.util.TreeMap.comparator accessible: module java.base does not "opens java.util" to unnamed module @4a052440
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:180)
at java.base/java.lang.reflect.Field.setAccessible(Field.java:174)
at com.thoughtworks.xstream.core.util.Fields.locate(Fields.java:39)
at com.thoughtworks.xstream.converters.collections.TreeMapConverter.<clinit>(TreeMapConverter.java:50)
... 22 more

Error: java.lang.ExceptionInInitializerError


-----------------------------------------------------------------------
-----------------------------------------------------------------------

I tried those two ways with the same .xlm and got those errors.
Do you know of a way to solve this error?
Could it work by uninstalling seadas and installing an older version like 8.1.0?

Thanks

gnwiii
Posts: 700
Joined: Fri Jan 29, 2021 5:51 pm America/New_York
Answers: 2

Re: Issue with saving MODIS AQUA L2 reproyected as netCDF-CF

by gnwiii » Thu Jan 12, 2023 7:19 am America/New_York

fbecker23 wrote: Tue Jan 10, 2023 8:48 am America/New_York Hi,
I am working with several MODIS AQUA L2 images as "AQUA_MODIS.20100623T181501.L2.OC.x.nc". I currently have SeaDAS 8.2.0 installed, and I have tried to do a Mercator reprojection for each image, and save as netCDF4 - CF. I want that format because I want to read the images with python after the reprojection. I have tried to do the processes manually, and with batch processing, but I can't save, or export, the image as netCDF4 - CF. SeaDas allows me to save the image as netCDF4 - BEAM, but not as netCDF - CF.
A few weeks ago, prior to the renaming of the VIIRS and MODIS files with the recent R2022 reprocessing, I was able to do this but not now.
Thanks,
Fernando
Remapping level-2 files directly tends to overweight pass edge pixels due to the larger ground footprint. The usual workflow for level-2 to mapped images uses an intermediate binning step. If you have the OCSSW processing system, you can use the l2mapgen program.

If you aren’t doing statistical analysis, you should be able to read the images from the BEAM-DIMAP data with using PyBeamDimap.

OB SeaDAS - xuanyang02
Subject Matter Expert
Subject Matter Expert
Posts: 482
Joined: Tue Feb 09, 2021 5:42 pm America/New_York
Answers: 1
Been thanked: 1 time

Re: Issue with saving MODIS AQUA L2 reproyected as netCDF-CF

by OB SeaDAS - xuanyang02 » Thu Jan 12, 2023 11:04 am America/New_York

I made a few modifications on the Read and Write block in your Example01.xml --

<node id="Read">
<operator>Read</operator>
<sources/>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<file>${path}/${ifile}.${extention}</file>
</parameters>
</node>

<node id="Write">
<operator>Write</operator>
<sources>
<sourceProduct refid="Subset"/>
</sources>
<parameters class="com.bc.ceres.binding.dom.XppDomElement">
<file>${path}/${ifile}_${ofileSuffix}.${extention}</file>
<formatName>NetCDF4-BEAM</formatName>
</parameters>
</node>

and then try

Code: Select all

gpt /home/fernando/SeaDAS/bin/Example01.xml -p /home/fernando/SeaDAS/bin/Example01.par
Things should work.

If you really want to save your file in netCDF4-CF format, you can try SNAP. The latest SNAP seems to be able to save files in netCDF4-CF format -- https://step.esa.int/main/download/snap-download/

OB SeaDAS - xuanyang02
Subject Matter Expert
Subject Matter Expert
Posts: 482
Joined: Tue Feb 09, 2021 5:42 pm America/New_York
Answers: 1
Been thanked: 1 time

Re: Issue with saving MODIS AQUA L2 reproyected as netCDF-CF

by OB SeaDAS - xuanyang02 » Thu Jan 12, 2023 1:21 pm America/New_York

Also, Batch Processing can load the xml file that was built and saved through Graph Builder.

https://seadas.gsfc.nasa.gov/help-8.3.0/operators/graph_builder.html

fbecker23
Posts: 17
Joined: Tue Oct 25, 2022 11:16 am America/New_York
Answers: 0

Re: Issue with saving MODIS AQUA L2 reproyected as netCDF-CF

by fbecker23 » Mon Jan 23, 2023 3:00 pm America/New_York

Searching the net, I found a python library called Pyresample, which seems to do the same as l2mapgen.
Do you know this python library? do you know if there is any significant difference?

gnwiii
Posts: 700
Joined: Fri Jan 29, 2021 5:51 pm America/New_York
Answers: 2

Re: Issue with saving MODIS AQUA L2 reproyected as netCDF-CF

by gnwiii » Thu Jan 26, 2023 4:09 pm America/New_York

fbecker23 wrote: Mon Jan 23, 2023 3:00 pm America/New_York Searching the net, I found a python library called Pyresample, which seems to do the same as l2mapgen.
Do you know this python library? do you know if there is any significant difference?
From the description, I don't see that it attempts to deal with the variable pixel footprint issue that overweights pass edge data. There is a bucket method, but "Bucket resampling is useful for calculating averages and hit-counts when aggregating data to coarser scale grids." while l2gen can be used for similar scale output grids.

Post Reply