Re: [netcdf-java] The problem about converting netcdf to Geotiff

Hi Yuanzheng,

ShaoYuanzheng wrote:
> Hi list,
> I have got the netcdf file, which is generated from OIS(DMSP data) by
> ucar.nc2.FileWriter.writeToFile(). Because the OIS data contain visible
> and infrared imagery, so the next step I want to extract these two
> imagery and put them into different geotiff file. I learned that
> GeotiffWriter can perform this work. But I met some problems in the
> course of using GeotiffWriter.
> 
> The following code pieces indicate the error information.
> ////////////////////////////////////////////////////////////////////////////
> step1: using ucar.nc2.FileWriter to convert OIS into netcdf file
> ////////////////////////////////////////////////////////////////////////////
>   String datasetIn = "C:/13532264810612.ois";
>   String datasetOut = "C:/13532264810612.nc";
>   try {
>    NetcdfFile ncfileIn = ucar.nc2.Net cdfFile.open(datasetIn, null);
>    NetcdfFile ncfileOut = ucar.nc2.FileWriter.writeToFile(ncfileIn,
> datasetOut, false);
>    ncfileIn.close();
>    ncfileOut.close();
>    System.out.println("NetcdfFile written = " + ncfileOut);
>   } catch (Exception e) {
>    e.printStackTrace();
>   }

Unless you have another reason you want a netCDF file, you don't need to
read the OIS and write the data as a netCDF file. The netCDF-Java
library can read the OIS file the same as it reads a netCDF file.

> ////////////////////////////////////////////////////////////////////////////////////////
> step2. Write the infrared information from netcdf to geotiff
> ////////////////////////////////////////////////////////////////////////////////////////
> writer.writeGrid("C:/13532264810612.nc", "infraredImagery", 0, 0, true,
> llr);

My comment above means that this line could instead be written:

writer.writeGrid( "C:/13532264810612.ois", "infraredImagery", 0, 0,
true, llr);

Though you will still run into the same problem which I discuss below.

> ...
> ...
> public void writeGrid(String fileName, String gridName, int time, int
> level, boolean greyScale, LatLonRect pt) throws IOException {
>     double scaler;
>     GridDataset dataset = ucar.nc2.dt .grid.GridDataset.open(fileName);
>     GridDatatype grid = dataset.findGridDatatype(gridName);
>     GridCoordSystem gcs = grid.getCoordinateSystem();
>     ProjectionImpl proj = grid.getProjection();
>     if (grid == null)
>       throw new IllegalArgumentException("No grid named " + gridName + "
> in fileName");
>     if (!gcs.isRegularSpatial())//syz The problem!
>       throw new IllegalArgumentException("Must have 1D x and y axes for
> " + grid.getName());
> ////////////////////////////////////////////////////////////////////////////
>  
> The above red code will throw the error info "Must have 1D x and y axes
> for infraredImagery"
>  
> The method "boolean isRegularSpatial()" in GridCoordSystem return
> false.T he GridCorrdSystem need both X and Y axes are 1 dimension, but
> actually, the netcdf is 32 dimension in netccdf, because the longitude
> and latitude both are decided by the scan line and sample order.

GeoTIFF requires 1-D regularly spaced X and Y in some *known*
projection. The DMSP data is swath data so it isn't in a known projection.

We do some crunching with the satellite location and scan pattern to
come up with the 2-D latitude(numScans, numSamplesPerScan) and
longitude(numScans, numSamplesPerScan) coordinates.

> I also viewed the "13532264810612.nc" in the NetCDF 2.2 Tools. And the
> imagery could displayed correctly in the Viewer tab.
> So I doubt the Dimension information maybe something omitted, and I
> tried to add the LatitudeDimension and LongitudeDimension to the netcdf
> file, but it doesn't work.

The latitude and longitude don't work for GeoTIFF but they do allow us
to view the data as you mention you did in ToolsUI.

Ethan

> Thanks very much. Any advices is appreciate.
>
> Yuanzheng Shao
> State Key Lab of Information Engineering in Surveying Mapping and Remote
> Sensing,
> Wuhan University

-- 
Ethan R. Davis                                Telephone: (303) 497-8155
Software Engineer                             Fax:       (303) 497-8690
UCAR Unidata Program Center                   E-mail:    edavis@xxxxxxxx
P.O. Box 3000
Boulder, CO  80307-3000                       http://www.unidata.ucar.edu/
---------------------------------------------------------------------------


  • 2009 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdf-java archives: