## GPT Cookbook: Reprojection

Creates a file which is a mapped reprojection of an input source file.

Example 1 Geographic Lat/Lon Projection

This example uses a standard geographic lat/lon projection with pixel resolution of 0.009 degrees (roughly 1km resolution). The CRS (coordinate reference system) is fully defined within the graph file.

Command Line Entry

    gpt ReprojectGraphEx01.xml -p ReprojectEx01.par -Pifile=A2017023193500.L2_LAC_OC.nc -Pofile=A2017023193500_ReprojectEx01.dim

File = ReprojectGraphEx01.xml

    <graph id="ReprojectGeoLatLonGraph">
      <version>1.0</version>
      <node id="Read">
        <operator>Read</operator>
        <sources/>
        <parameters class="com.bc.ceres.binding.dom.XppDomElement">
                <file>${ifile}</file>
                <formatName>SeaDAS-L2</formatName>
        </parameters>
      </node>
      <node id="Reproject">
        <operator>Reproject</operator>
        <sources>
          <sourceProduct refid="Read"/>
        </sources>
        <parameters class="com.bc.ceres.binding.dom.XppDomElement">
          <wktFile/>
          <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>${resampling}</resampling>
          <orientation>0.0</orientation>
          <pixelSizeX>${pixelSize}</pixelSizeX>
          <pixelSizeY>${pixelSize}</pixelSizeY>
          <orthorectify>false</orthorectify>
          <noDataValue>NaN</noDataValue>
          <includeTiePointGrids>true</includeTiePointGrids>
          <addDeltaBands>false</addDeltaBands>
        </parameters>
      </node>
      <node id="Write">
        <operator>Write</operator>
        <sources>
          <sourceProduct refid="Reproject"/>
        </sources>
        <parameters class="com.bc.ceres.binding.dom.XppDomElement">
          <file>${ofile}</file>
          <formatName>BEAM-DIMAP</formatName>
        </parameters>
      </node>
    </graph>

File = ReprojectEx01.par

    pixelSize=0.009
    resampling=Bilinear
    maskExpression=!l2_flags.HIGLINT and !l2_flags.HISATZEN and !l2_flags.LOWLW and !l2_flags.HILT
    retainValidPixelExpression=true
    applyValidPixelExpression=true

Example 2 Oblique Stereographic Projection

This example uses an oblique stereographic projection with pixel resolution of 1km. The CRS (coordinate reference system) is defined within the graph file, but the location specific parameters "central_meridian" and "latitude_of_origin" are defined for convenience within the par file for reusability of the graph file.

Command Line Entry

    gpt ReprojectGraphEx02.xml -p ReprojectEx02.par --Pifile=A2017023193500.L2_LAC_OC.nc -Pofile=A2017023193500_ReprojectEx02.dim

File = ReprojectGraphEx02.xml

    <graph id="ReprojectObliqueStereoGraph">
      <version>1.0</version>
      <node id="Read">
        <operator>Read</operator>
        <sources/>
        <parameters class="com.bc.ceres.binding.dom.XppDomElement">
          <file>${ifile}</file>
          <formatName>SeaDAS-L2</formatName>
        </parameters>
      </node>
      <node id="Reproject">
        <operator>Reproject</operator>
        <sources>
          <sourceProduct refid="Read"/>
        </sources>
        <parameters class="com.bc.ceres.binding.dom.XppDomElement">
          <wktFile/>
          <crs>
             PROJCS["Oblique_Stereographic / World Geodetic System 1984",
                    GEOGCS["WGS84(DD)",
                           DATUM["WGS84",
                                 SPHEROID["WGS84", 6378137.0, 298.257223563, AUTHORITY["EPSG","7030"]],
                                 AUTHORITY["EPSG","6326"]],
                           PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"],
                           UNIT["degree", 0.017453292519943295],
                           AXIS["Geodetic longitude", EAST],
                           AXIS["Geodetic latitude", NORTH]],
                    PROJECTION["Oblique_Stereographic"],
                    PARAMETER["central_meridian", ${lon}],
                    PARAMETER["latitude_of_origin", ${lat}],
                    PARAMETER["scale_factor", 1.0],
                    PARAMETER["false_easting", 0.0],
                    PARAMETER["false_northing", 0.0],
                    UNIT["m", 1.0],
                    AXIS["Easting", EAST],
                    AXIS["Northing", NORTH]]
          </crs>
          <resampling>${resampling}</resampling>
          <orientation>0.0</orientation>
          <pixelSizeX>${pixelSize}</pixelSizeX>
          <pixelSizeY>${pixelSize}</pixelSizeY>
          <orthorectify>false</orthorectify>
          <noDataValue>NaN</noDataValue>
          <includeTiePointGrids>true</includeTiePointGrids>
          <addDeltaBands>false</addDeltaBands>
        </parameters>
      </node>
      <node id="Write">
        <operator>Write</operator>
        <sources>
          <sourceProduct refid="Reproject"/>
        </sources>
        <parameters class="com.bc.ceres.binding.dom.XppDomElement">
          <file>${ofile}</file>
          <formatName>BEAM-DIMAP</formatName>
        </parameters>
      </node>
    </graph>

File = ReprojectEx02.par

    lat=25.0
    lon=-90.0
    pixelSize=1000.0
    resampling=Bilinear
    maskExpression=!l2_flags.HIGLINT and !l2_flags.HISATZEN and !l2_flags.LOWLW and !l2_flags.HILT
    retainValidPixelExpression=true
    applyValidPixelExpression=true

Here is what example 2 would look like if you use the GUI, in which case there are no variables. The following graph will load into the GUI via the GraphBuilder tool (note: you need to edit the ifile and ofile paths).

File = ReprojectGraphGUIEx02.xml

    <graph id="Graph">
      <version>1.0</version>
      <node id="Read">
        <operator>Read</operator>
        <sources/>
        <parameters class="com.bc.ceres.binding.dom.XppDomElement">
          <file>/Users/seadas/GPT_Cookbook/ReprojectEx02/A2017023193500.L2_LAC_OC.nc</file>
          <formatName>SeaDAS-L2</formatName>
        </parameters>
      </node>
      <node id="Reproject">
        <operator>Reproject</operator>
        <sources>
          <sourceProduct refid="Read"/>
        </sources>
        <parameters class="com.bc.ceres.binding.dom.XppDomElement">
          <wktFile/>
          <crs>
             PROJCS["Oblique_Stereographic / World Geodetic System 1984",
                    GEOGCS["WGS84(DD)",
                           DATUM["WGS84",
                                 SPHEROID["WGS84", 6378137.0, 298.257223563, AUTHORITY["EPSG","7030"]],
                                 AUTHORITY["EPSG","6326"]],
                           PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"],
                           UNIT["degree", 0.017453292519943295],
                           AXIS["Geodetic longitude", EAST],
                           AXIS["Geodetic latitude", NORTH]],
                    PROJECTION["Oblique_Stereographic"],
                    PARAMETER["central_meridian", -90.0],
                    PARAMETER["latitude_of_origin", 25.0],
                    PARAMETER["scale_factor", 1.0],
                    PARAMETER["false_easting", 0.0],
                    PARAMETER["false_northing", 0.0],
                    UNIT["m", 1.0],
                    AXIS["Easting", EAST],
                    AXIS["Northing", NORTH]]
          </crs>
          <resampling>Bilinear</resampling>
          <referencePixelX/>
          <referencePixelY/>
          <easting/>
          <northing/>
          <orientation>0.0</orientation>
          <pixelSizeX>1000.0</pixelSizeX>
          <pixelSizeY>1000.0</pixelSizeY>
          <width/>
          <height/>
          <tileSizeX/>
          <tileSizeY/>
          <orthorectify>false</orthorectify>
          <elevationModelName/>
          <noDataValue>NaN</noDataValue>
          <includeTiePointGrids>true</includeTiePointGrids>
          <addDeltaBands>false</addDeltaBands>
        </parameters>
      </node>
      <node id="Write">
        <operator>Write</operator>
        <sources>
          <sourceProduct refid="Reproject"/>
        </sources>
        <parameters class="com.bc.ceres.binding.dom.XppDomElement">
          <file>/Users/seadas/GPT_Cookbook/ReprojectEx02/A2017023193500_RprojectGUIEx02.dim</file>
          <formatName>BEAM-DIMAP</formatName>
        </parameters>
      </node>
      <applicationData id="Presentation">
        <Description/>
        <node id="Read">
                <displayPosition x="37.0" y="134.0"/>
        </node>
        <node id="Reproject">
                <displayPosition x="313.0" y="270.0"/>
        </node>
        <node id="Write">
                <displayPosition x="455.0" y="135.0"/>
        </node>
      </applicationData>
    </graph>

Example 3 Lambert Azimuthal Equal Area Projection

This example uses an Lambert azimuthal equal area projection with pixel resolution of 1km. Similar to example 2, the CRS (coordinate reference system) is defined within the graph file, but the location specific parameters "longitude_of_center" and "latitude_of_center" are defined for convenience within the par file for reusability of the graph file.

Command Line Entry

    gpt ReprojectGraphEx03.xml -p ReprojectEx03.par --Pifile=A2017023193500.L2_LAC_OC.nc -Pofile=A2017023193500_ReprojectEx03.dim

File = ReprojectGraphEx03.xml

    <graph id="ReprojectLambertAzGraph">
      <version>1.0</version>
      <node id="Read">
        <operator>Read</operator>
        <sources/>
        <parameters class="com.bc.ceres.binding.dom.XppDomElement">
          <file>${ifile}</file>
          <formatName>SeaDAS-L2</formatName>
        </parameters>
      </node>
      <node id="Reproject">
        <operator>Reproject</operator>
        <sources>
          <sourceProduct refid="Read"/>
        </sources>
        <parameters class="com.bc.ceres.binding.dom.XppDomElement">
          <wktFile/>
          <crs>
             PROJECS["Lambert_Azimuthal_Equal_Area / World Geodetic System 1984"
                    GEOGCS["World Geodetic System 1984",
                            DATUM["World Geodetic System 1984",
                                  SPHEROID["WGS84", 6378137.0, 298.257223563, AUTHORITY["EPSG","7030"]],
                                  AUTHORITY["EPSG","6326"]],
                            PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]],
                            UNIT["degree", 0.017453292519943295],
                            AXIS["Geodetic longitude", EAST],
                            AXIS["Geodetic latitude", NORTH]],
                    PROJECTION["Lambert_Azimuthal_Equal_Area"],
                    PARAMETER["latitude_of_center", ${lat}],
                    PARAMETER["longitude_of_center", ${lon}],
                    PARAMETER["false_easting", 0.0],
                    PARAMETER["false_northing", 0.0],
                    UNIT["m", 1.0],
                    AXIS["Easting", EAST],
                    AXIS["Northing", NORTH]]
          </crs>
          <resampling>${resampling}</resampling>
          <orientation>0.0</orientation>
          <pixelSizeX>${pixelSize}</pixelSizeX>
          <pixelSizeY>${pixelSize}</pixelSizeY>
          <orthorectify>false</orthorectify>
          <noDataValue>NaN</noDataValue>
          <includeTiePointGrids>true</includeTiePointGrids>
          <addDeltaBands>false</addDeltaBands>
        </parameters>
      </node>
      <node id="Write">
        <operator>Write</operator>
        <sources>
          <sourceProduct refid="Reproject"/>
        </sources>
        <parameters class="com.bc.ceres.binding.dom.XppDomElement">
          <file>${ofile}</file>
          <formatName>BEAM-DIMAP</formatName>
        </parameters>
      </node>
    </graph>

File = ReprojectEx03.par

    lat=25.0
    lon=-90.0
    pixelSize=1000.0
    resampling=Bilinear
    maskExpression=!l2_flags.HIGLINT and !l2_flags.HISATZEN and !l2_flags.LOWLW and !l2_flags.HILT
    retainValidPixelExpression=true
    applyValidPixelExpression=true

Example 4 Lambert Azimuthal Equal Area Projection (SST)

Same as example 3 except for SST file.

Command Line Entry

    gpt ReprojectGraphEx04.xml -p ReprojectEx04.par -P-ifile=AUQA_MODIS.20101010T180508.L2.SST.nc -Pofile=AUQA_MODIS.20101010T180508_ReprojectEx04.dim

File = ReprojectGraphEx04.xml

    <graph id="ReprojectLambertAzGraph">
      <version>1.0</version>
      <node id="Read">
        <operator>Read</operator>
        <sources/>
        <parameters class="com.bc.ceres.binding.dom.XppDomElement">
          <file>${ifile}</file>
          <formatName>SeaDAS-L2</formatName>
        </parameters>
      </node>
      <node id="Reproject">
        <operator>Reproject</operator>
        <sources>
          <sourceProduct refid="Read"/>
        </sources>
        <parameters class="com.bc.ceres.binding.dom.XppDomElement">
          <wktFile/>
          <crs>
             PROJECS["Lambert_Azimuthal_Equal_Area / World Geodetic System 1984"
                    GEOGCS["World Geodetic System 1984",
                            DATUM["World Geodetic System 1984",
                                  SPHEROID["WGS84", 6378137.0, 298.257223563, AUTHORITY["EPSG","7030"]],
                                  AUTHORITY["EPSG","6326"]],
                            PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]],
                            UNIT["degree", 0.017453292519943295],
                            AXIS["Geodetic longitude", EAST],
                            AXIS["Geodetic latitude", NORTH]],
                    PROJECTION["Lambert_Azimuthal_Equal_Area"],
                    PARAMETER["latitude_of_center", ${lat}],
                    PARAMETER["longitude_of_center", ${lon}],
                    PARAMETER["false_easting", 0.0],
                    PARAMETER["false_northing", 0.0],
                    UNIT["m", 1.0],
                    AXIS["Easting", EAST],
                    AXIS["Northing", NORTH]]
          </crs>
          <resampling>${resampling}</resampling>
          <orientation>0.0</orientation>
          <pixelSizeX>${pixelSize}</pixelSizeX>
          <pixelSizeY>${pixelSize}</pixelSizeY>
          <orthorectify>false</orthorectify>
          <noDataValue>NaN</noDataValue>
          <includeTiePointGrids>true</includeTiePointGrids>
          <addDeltaBands>false</addDeltaBands>
        </parameters>
      </node>
      <node id="Write">
        <operator>Write</operator>
        <sources>
          <sourceProduct refid="Reproject"/>
        </sources>
        <parameters class="com.bc.ceres.binding.dom.XppDomElement">
          <file>${ofile}</file>
          <formatName>BEAM-DIMAP</formatName>
        </parameters>
      </node>
    </graph>

File = ReprojectGrah04.par

    lat=37.0
    lon=-76.0
    pixelSize=1000.0
    resampling=Bilinear
    maskExpression=qual_sst == 0 or  qual_sst == 1
    retainValidPixelExpression=true
    applyValidPixelExpression=true

Example 5 True Color Imagery

This is basically the same as example 2 except refined for something like true color. In this case if we are perhaps dealing with the rhos bands (surface reflectance) then we may not want the brightest clouds being masked out so we need to deactivate all the masking. HISATZEN is however masked out as it can be a bit blurry at high sensor zenith angles. For convenience and flexibility, the parameters are mostly hard coded in the graph file with only lat, lon, and res being sent in. In this case they are sent in directly from the command line.

Command Line Entry

    gpt ReprojectGraphEx05.xml -Pifile=A2017023193500.L2_HKM_TC.nc -Plat=25.0 -Plon=-90.0 -Pres=500.0 -t A2017023193500_ReprojectEx05.dim

... or in generic form ..

    gpt ReprojectGraphEx05.xml -Pifile={IFILE} -Plat={LAT} -Plon={LON} -Pres={RES} -Pofile={OFILE}

File = ReprojectGraphEx05.xml

    <graph id="ReprojectTCGraph">
      <version>1.0</version>
      <node id="Read">
        <operator>Read</operator>
        <sources/>
        <parameters class="com.bc.ceres.binding.dom.XppDomElement">
          <file>${ifile}</file>
          <formatName>SeaDAS-L2</formatName>
        </parameters>
      </node>
      <node id="Reproject">
        <operator>Reproject</operator>
        <sources>
          <sourceProduct refid="Read"/>
        </sources>
        <parameters class="com.bc.ceres.binding.dom.XppDomElement">
          <wktFile/>
          <crs>
             PROJCS["Oblique_Stereographic / World Geodetic System 1984",
                    GEOGCS["WGS84(DD)",
                            DATUM["WGS84",
                                 SPHEROID["WGS84", 6378137.0, 298.257223563, AUTHORITY["EPSG","7030"]],
                                 AUTHORITY["EPSG","6326"]],
                            PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"],
                            UNIT["degree", 0.017453292519943295],
                            AXIS["Geodetic longitude", EAST],
                            AXIS["Geodetic latitude", NORTH]],
                    PROJECTION["Oblique_Stereographic"],
                    PARAMETER["central_meridian", ${lon}],
                    PARAMETER["latitude_of_origin", ${lat}],
                    PARAMETER["scale_factor", 1.0],
                    PARAMETER["false_easting", 0.0],
                    PARAMETER["false_northing", 0.0],
                    UNIT["m", 1.0],
                    AXIS["Easting", EAST],
                    AXIS["Northing", NORTH]]
          </crs>
          <resampling>Bilinear</resampling>
          <orientation>0.0</orientation>
          <pixelSizeX>${res}</pixelSizeX>
          <pixelSizeY>${res}</pixelSizeY>
          <orthorectify>false</orthorectify>
          <noDataValue>NaN</noDataValue>
          <includeTiePointGrids>true</includeTiePointGrids>
          <addDeltaBands>false</addDeltaBands>
        </parameters>
      </node>
      <node id="Write">
        <operator>Write</operator>
        <sources>
          <sourceProduct refid="Reproject"/>
        </sources>
        <parameters class="com.bc.ceres.binding.dom.XppDomElement">
          <file>${ofile}</file>
          <formatName>BEAM-DIMAP</formatName>
        </parameters>
      </node>
    </graph>

Example 6 Geographic Lat/Lon Projection (alternate)

This is identical to Example 1 except illustrates placing the entire CRS within the parameters file.

Command Line Entry

    gpt ReprojectGraphEx06.xml -p ReprojectEx06.par -Pifile=A2017023193500.L2_LAC_OC.nc -Pofile=A2017023193500_ReprojectEx06.dim

File = ReprojectEx06.xml

    <graph id="ReprojectGraphEx06">
        <version>1.0</version>
        <node id="Read">
            <operator>Read</operator>
            <sources/>
            <parameters class="com.bc.ceres.binding.dom.XppDomElement">
                <file>${ifile}</file>
                <formatName>SeaDAS-L2</formatName>
            </parameters>
        </node>
        <node id="Reproject">
            <operator>Reproject</operator>
            <sources>
                <sourceProduct refid="Read"/>
            </sources>
            <parameters class="com.bc.ceres.binding.dom.XppDomElement">
                <wktFile/>
                <crs>${crs}</crs>
                <resampling>${resampling}</resampling>
                <orientation>0.0</orientation>
                <pixelSizeX>${pixelSize}</pixelSizeX>
                <pixelSizeY>${pixelSize}</pixelSizeY>
                <orthorectify>false</orthorectify>
                <noDataValue>NaN</noDataValue>
                <includeTiePointGrids>true</includeTiePointGrids>
                <addDeltaBands>false</addDeltaBands>
            </parameters>
        </node>
        <node id="Write">
            <operator>Write</operator>
            <sources>
                <sourceProduct refid="Reproject"/>
            </sources>
            <parameters class="com.bc.ceres.binding.dom.XppDomElement">
                <file>${ofile}</file>
                <formatName>BEAM-DIMAP</formatName>
            </parameters>
        </node>
    </graph>

File = ReprojectEx06.par

    pixelSize=0.009
    resampling=Bilinear
    maskExpression=!l2_flags.HIGLINT and !l2_flags.HISATZEN and !l2_flags.LOWLW and !l2_flags.HILT
    retainValidPixelExpression=true
    applyValidPixelExpression=true
    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]]

Notes 1 Resampling Options

Here is a full list of the resampling options and their specific names as used by the Reproject operator. Please be aware that these names differ for the Collocate operator. We may address this discrepancy in a future SeaDAS release.

    resampling=Nearest
    resampling=Bilinear
    resampling=Bicubic