Index: netcdfdataset.h
===================================================================
--- netcdfdataset.h	(revision 18846)
+++ netcdfdataset.h	(working copy)
@@ -54,6 +54,7 @@
 #define COORDINATES            "coordinates"
 #define LONLAT                 "lon lat"
 
+#define STD_PARALLEL           "standard_parallel"
 #define STD_PARALLEL_1         "standard_parallel_1"
 #define STD_PARALLEL_2         "standard_parallel_2"
 #define LONG_CENTRAL_MERIDIAN  "central_meridian"
@@ -151,6 +152,8 @@
     double       FetchCopyParm( const char *pszGridMappingValue, 
                                 const char *pszParm, double dfDefault );
 
+    char **    FetchStandardParallels( const char *pszGridMappingValue );
+
   public:
     int           cdfid;
     char         **papszMetadata;
Index: netcdfdataset.cpp
===================================================================
--- netcdfdataset.cpp	(revision 18846)
+++ netcdfdataset.cpp	(working copy)
@@ -651,7 +651,41 @@
         return dfDefault;
 }
     
+/************************************************************************/
+/*                           FetchStandardParallels()                   */
+/************************************************************************/
 
+char** netCDFDataset::FetchStandardParallels( const char *pszGridMappingValue )
+{
+    char         szTemp[ MAX_NC_NAME ];
+    char         **papszValues = NULL;
+    //cf-1.0 tags
+    strcpy( szTemp,pszGridMappingValue );
+    strcat( szTemp, "#" );
+    strcat( szTemp, STD_PARALLEL );
+    papszValues = CSLFetchNameValueMultiple( papszMetadata, szTemp );
+    //try gdal tags
+    if( papszValues == NULL )
+      {
+	strcpy( szTemp,pszGridMappingValue );
+	strcat( szTemp, "#" );
+	strcat( szTemp, STD_PARALLEL_1 );
+	
+	papszValues = CSLAddString( papszValues, 
+				    CSLFetchNameValue( papszMetadata, 
+						       szTemp ) );
+	
+	strcpy( szTemp,pszGridMappingValue );
+	strcat( szTemp, "#" );
+	strcat( szTemp, STD_PARALLEL_2 );
+	
+	papszValues = CSLAddString( papszValues, 
+				    CSLFetchNameValue( papszMetadata, 
+						       szTemp ) );
+      }
+    return papszValues;
+}
+
 /************************************************************************/
 /*                           SetProjection()                            */
 /************************************************************************/
@@ -879,15 +913,9 @@
 /*      Lambert conformal conic                                         */
 /* -------------------------------------------------------------------- */
 	    else if( EQUAL( pszValue, L_C_CONIC ) ) {
+
+	        char **papszStdParallels = NULL;
 		
-		dfStdP1 = 
-                    poDS->FetchCopyParm( szGridMappingValue, 
-                                         STD_PARALLEL_1, 0.0 );
-
-		dfStdP2 = 
-                    poDS->FetchCopyParm( szGridMappingValue, 
-                                         STD_PARALLEL_2, 0.0 );
-
 		dfCenterLon = 
                     poDS->FetchCopyParm( szGridMappingValue, 
                                          LONG_CENTRAL_MERIDIAN, 0.0 );
@@ -896,6 +924,10 @@
                     poDS->FetchCopyParm( szGridMappingValue, 
                                          LAT_PROJ_ORIGIN, 0.0 );
 
+		dfScale = 
+		    poDS->FetchCopyParm( szGridMappingValue, 
+					 SCALE_FACTOR, 1.0 );
+
 		dfFalseEasting = 
                     poDS->FetchCopyParm( szGridMappingValue, 
                                          FALSE_EASTING, 0.0 );
@@ -903,11 +935,38 @@
 		dfFalseNorthing = 
                     poDS->FetchCopyParm( szGridMappingValue, 
                                          FALSE_NORTHING, 0.0 );
+
+		papszStdParallels = 
+		    FetchStandardParallels( szGridMappingValue );
+
+		oSRS.SetWellKnownGeogCS( "WGS84" );
+
+		if( papszStdParallels != NULL ) {
+		  
+		  if ( CSLCount( papszStdParallels ) == 1 ) {
+		      dfStdP1 = CPLAtofM( papszStdParallels[0] );
+		      dfStdP2 = dfStdP1;
+		  }
 		
-		oSRS.SetWellKnownGeogCS( "WGS84" );
+		  else if( CSLCount( papszStdParallels ) == 2 ) {
+		      dfStdP1 = CPLAtofM( papszStdParallels[0] );
+		      dfStdP2 = CPLAtofM( papszStdParallels[1] );
+		  }
+		}
+		else {
+		    dfStdP1 = 
+		        poDS->FetchCopyParm( szGridMappingValue, 
+                                         STD_PARALLEL_1, 0.0 );
+
+		    dfStdP2 = 
+		        poDS->FetchCopyParm( szGridMappingValue, 
+                                         STD_PARALLEL_2, 0.0 );
+		}
+		
 		oSRS.SetLCC( dfStdP1, dfStdP2, dfCenterLat, dfCenterLon,
 			     dfFalseEasting, dfFalseNorthing );
-
+		
+		CSLDestroy( papszStdParallels );
 	    }
 /* -------------------------------------------------------------------- */
 /*      Is this Latitude/Longitude Grid                                 */

