Index: frmts/netcdf/netcdfdataset.cpp =================================================================== --- frmts/netcdf/netcdfdataset.cpp (revision 26089) +++ frmts/netcdf/netcdfdataset.cpp (working copy) @@ -2600,13 +2600,13 @@ } else { - nSpacingBegin = (int) poDS->rint((pdfXCoord[1] - pdfXCoord[0]) * 10000); + nSpacingBegin = (int) poDS->rint((pdfXCoord[1] - pdfXCoord[0]) * 1000); - nSpacingMiddle = (int) poDS->rint((pdfXCoord[xdim / 2] - - pdfXCoord[(xdim / 2) + 1]) * 10000); + nSpacingMiddle = (int) poDS->rint((pdfXCoord[xdim/2+1] - + pdfXCoord[xdim/2]) * 1000); - nSpacingLast = (int) poDS->rint((pdfXCoord[xdim - 2] - - pdfXCoord[xdim-1]) * 10000); + nSpacingLast = (int) poDS->rint((pdfXCoord[xdim-1] - + pdfXCoord[xdim-2]) * 1000); CPLDebug("GDAL_netCDF", "xdim: %ld nSpacingBegin: %d nSpacingMiddle: %d nSpacingLast: %d", @@ -2618,9 +2618,9 @@ pdfXCoord[xdim - 2], pdfXCoord[xdim-1]); #endif - if( ( abs( nSpacingBegin ) == abs( nSpacingLast ) ) && - ( abs( nSpacingBegin ) == abs( nSpacingMiddle ) ) && - ( abs( nSpacingMiddle ) == abs( nSpacingLast ) ) ) { + if( ( abs( abs( nSpacingBegin ) - abs( nSpacingLast ) ) <= 1 ) && + ( abs( abs( nSpacingBegin ) - abs( nSpacingMiddle ) ) <= 1 ) && + ( abs( abs( nSpacingMiddle ) - abs( nSpacingLast ) ) <= 1 ) ) { bLonSpacingOK = TRUE; } } @@ -2639,15 +2639,15 @@ else { nSpacingBegin = (int) poDS->rint((pdfYCoord[1] - pdfYCoord[0]) * - 10000); + 1000); - nSpacingMiddle = (int) poDS->rint((pdfYCoord[ydim / 2] - - pdfYCoord[(ydim / 2) + 1]) * - 10000); + nSpacingMiddle = (int) poDS->rint((pdfYCoord[ydim/2+1] - + pdfYCoord[ydim/2]) * + 1000); - nSpacingLast = (int) poDS->rint((pdfYCoord[ydim - 2] - - pdfYCoord[ydim-1]) * - 10000); + nSpacingLast = (int) poDS->rint((pdfYCoord[ydim-1] - + pdfYCoord[ydim-2]) * + 1000); CPLDebug("GDAL_netCDF", "ydim: %ld nSpacingBegin: %d nSpacingMiddle: %d nSpacingLast: %d", @@ -2664,32 +2664,28 @@ /* gridding */ /* -------------------------------------------------------------------- */ - if( (( abs( abs(nSpacingBegin) - abs(nSpacingLast) ) ) < 1000 ) && - (( abs( abs(nSpacingBegin) - abs(nSpacingMiddle) ) ) < 1000 ) && - (( abs( abs(nSpacingMiddle) - abs(nSpacingLast) ) ) < 1000 ) ) { - + if( ( abs( abs( nSpacingBegin ) - abs( nSpacingLast ) ) <= 1 ) && + ( abs( abs( nSpacingBegin ) - abs( nSpacingMiddle ) ) <= 1 ) && + ( abs( abs( nSpacingMiddle ) - abs( nSpacingLast ) ) <= 1 ) ) { bLatSpacingOK = TRUE; - - if( ( abs( nSpacingBegin ) != abs( nSpacingLast ) ) || - ( abs( nSpacingBegin ) != abs( nSpacingMiddle ) ) || - ( abs( nSpacingMiddle ) != abs( nSpacingLast ) ) ) { + } + else if( (( abs( abs(nSpacingBegin) - abs(nSpacingLast) ) ) <= 100 ) && + (( abs( abs(nSpacingBegin) - abs(nSpacingMiddle) ) ) <= 100 ) && + (( abs( abs(nSpacingMiddle) - abs(nSpacingLast) ) ) <= 100 ) ) { + bLatSpacingOK = TRUE; + CPLError(CE_Warning, 1,"Latitude grid not spaced evenly.\nSeting projection for grid spacing is within 0.1 degrees threshold.\n"); - CPLError(CE_Warning, 1,"Latitude grid not spaced evenly.\nSeting projection for grid spacing is within 0.1 degrees threshold.\n"); - - CPLDebug("GDAL_netCDF", - "Latitude grid not spaced evenly, but within 0.1 degree threshold (probably a Gaussian grid).\n" - "Saving original latitude values in Y_VALUES geolocation metadata" ); - Set1DGeolocation( nVarDimYID, "Y" ); - - } + CPLDebug("GDAL_netCDF", + "Latitude grid not spaced evenly, but within 0.1 degree threshold (probably a Gaussian grid).\n" + "Saving original latitude values in Y_VALUES geolocation metadata" ); + Set1DGeolocation( nVarDimYID, "Y" ); } + + if ( bLatSpacingOK == FALSE ) { + CPLDebug( "GDAL_netCDF", + "Latitude is not equally spaced." ); + } } - - if ( bLatSpacingOK == FALSE ) { - CPLDebug( "GDAL_netCDF", - "Latitude is not equally spaced." ); - } - if ( ( bLonSpacingOK == TRUE ) && ( bLatSpacingOK == TRUE ) ) { /* -------------------------------------------------------------------- */