[mapserver-commits] r10001 - branches/branch-5-6/mapserver

svn at osgeo.org svn at osgeo.org
Wed Mar 24 12:30:22 EDT 2010


Author: warmerdam
Date: 2010-03-24 12:30:22 -0400 (Wed, 24 Mar 2010)
New Revision: 10001

Modified:
   branches/branch-5-6/mapserver/HISTORY.TXT
   branches/branch-5-6/mapserver/mapdrawgdal.c
   branches/branch-5-6/mapserver/mapraster.c
   branches/branch-5-6/mapserver/maprasterquery.c
   branches/branch-5-6/mapserver/mapresample.c
   branches/branch-5-6/mapserver/mapwcs.c
Log:
Reworked so that msGetGDALGeoTransform() assumes TLOCK_GDAL already held,
and it only releases it for GetExtent call. Also avoid calling the OWS
GetExtent function if we know there is ows metadata to avoid extra gdalopens.
Finally fixed raster GetExtent to use same lower level origin assumptions
for ungeoreferenced rasters as msGetGDALGeoTransform() makes. (#3368)


Modified: branches/branch-5-6/mapserver/HISTORY.TXT
===================================================================
--- branches/branch-5-6/mapserver/HISTORY.TXT	2010-03-24 16:23:04 UTC (rev 10000)
+++ branches/branch-5-6/mapserver/HISTORY.TXT	2010-03-24 16:30:22 UTC (rev 10001)
@@ -17,6 +17,11 @@
 
 - Fixed mapstring.c build problem related to errno (#3401).
 
+- Correct ungeoreferenced defaults via GetExtent() on raster layer (#3368)
+
+- More adjustments to how TLOCK_GDAL held around msGetGDALGeoTransform (#3368)
+
+
 Version 5.6.3 (2010-03-22):
 ---------------------------
 

Modified: branches/branch-5-6/mapserver/mapdrawgdal.c
===================================================================
--- branches/branch-5-6/mapserver/mapdrawgdal.c	2010-03-24 16:23:04 UTC (rev 10000)
+++ branches/branch-5-6/mapserver/mapdrawgdal.c	2010-03-24 16:30:22 UTC (rev 10001)
@@ -1613,7 +1613,8 @@
 /*                       msGetGDALGeoTransform()                        */
 /*                                                                      */
 /*      Cover function that tries GDALGetGeoTransform(), a world        */
-/*      file or OWS extents.                                            */
+/*      file or OWS extents.  It is assumed that TLOCK_GDAL is held     */
+/*      before this function is called.                                 */
 /************************************************************************/
 
 int msGetGDALGeoTransform( GDALDatasetH hDS, mapObj *map, layerObj *layer, 
@@ -1621,6 +1622,8 @@
 
 {
     const char *extent_priority = NULL;
+    const char *value;
+
 #if defined(USE_WMS_SVR) || defined (USE_WFS_SVR)
     rectObj  rect;
 #endif
@@ -1675,29 +1678,42 @@
 /* -------------------------------------------------------------------- */
 /*      Try worldfile.                                                  */
 /* -------------------------------------------------------------------- */
-    else if( GDALGetDescription(hDS) != NULL 
-             && GDALReadWorldFile(GDALGetDescription(hDS), "wld", 
-                                  padfGeoTransform) )
+    if( GDALGetDescription(hDS) != NULL 
+        && GDALReadWorldFile(GDALGetDescription(hDS), "wld", 
+                             padfGeoTransform) )
     {
         return MS_SUCCESS;
     }
 
 /* -------------------------------------------------------------------- */
-/*      Try OWS extent metadata.                                        */
+/*      Try OWS extent metadata.  We only try this if we know there     */
+/*      is metadata so that we don't end up going into the layer        */
+/*      getextent function which will in turn reopen the file with      */
+/*      potential performance and locking problems.                     */
 /* -------------------------------------------------------------------- */
 #if defined(USE_WMS_SVR) || defined (USE_WFS_SVR)
-    else if( msOWSGetLayerExtent( map, layer, "MFCO", &rect ) == MS_SUCCESS )
+    if ((value = msOWSLookupMetadata(&(layer->metadata), "MFCO", "extent"))
+        != NULL)
     {
-        padfGeoTransform[0] = rect.minx;
-        padfGeoTransform[1] = (rect.maxx - rect.minx) /
-            (double) GDALGetRasterXSize( hDS );
-        padfGeoTransform[2] = 0;
-        padfGeoTransform[3] = rect.maxy;
-        padfGeoTransform[4] = 0;
-        padfGeoTransform[5] = (rect.miny - rect.maxy) /
-            (double) GDALGetRasterYSize( hDS );
+        int success;
 
-        return MS_SUCCESS;
+        msReleaseLock( TLOCK_GDAL );
+        success = msOWSGetLayerExtent( map, layer, "MFCO", &rect );
+        msAcquireLock( TLOCK_GDAL );
+
+        if( success == MS_SUCCESS )
+        {
+            padfGeoTransform[0] = rect.minx;
+            padfGeoTransform[1] = (rect.maxx - rect.minx) /
+                (double) GDALGetRasterXSize( hDS );
+            padfGeoTransform[2] = 0;
+            padfGeoTransform[3] = rect.maxy;
+            padfGeoTransform[4] = 0;
+            padfGeoTransform[5] = (rect.miny - rect.maxy) /
+                (double) GDALGetRasterYSize( hDS );
+            
+            return MS_SUCCESS;
+        }
     }
 #endif
 
@@ -1706,17 +1722,14 @@
 /*      Reset our default geotransform.  GDALGetGeoTransform() may      */
 /*      have altered it even if GDALGetGeoTransform() failed.           */
 /* -------------------------------------------------------------------- */
-    else
-    {
-        padfGeoTransform[0] = 0.0;
-        padfGeoTransform[1] = 1.0;
-        padfGeoTransform[2] = 0.0;
-        padfGeoTransform[3] = GDALGetRasterYSize(hDS);
-        padfGeoTransform[4] = 0.0;
-        padfGeoTransform[5] = -1.0;
-
-        return MS_FAILURE;
-    }
+    padfGeoTransform[0] = 0.0;
+    padfGeoTransform[1] = 1.0;
+    padfGeoTransform[2] = 0.0;
+    padfGeoTransform[3] = GDALGetRasterYSize(hDS);
+    padfGeoTransform[4] = 0.0;
+    padfGeoTransform[5] = -1.0;
+    
+    return MS_FAILURE;
 }
 
 /************************************************************************/

Modified: branches/branch-5-6/mapserver/mapraster.c
===================================================================
--- branches/branch-5-6/mapserver/mapraster.c	2010-03-24 16:23:04 UTC (rev 10000)
+++ branches/branch-5-6/mapserver/mapraster.c	2010-03-24 16:30:22 UTC (rev 10001)
@@ -1533,9 +1533,7 @@
                 }
             }
 
-            msReleaseLock( TLOCK_GDAL );
             msGetGDALGeoTransform( hDS, map, layer, adfGeoTransform );
-            msAcquireLock( TLOCK_GDAL );
 
             /* 
             ** We want to resample if the source image is rotated, if

Modified: branches/branch-5-6/mapserver/maprasterquery.c
===================================================================
--- branches/branch-5-6/mapserver/maprasterquery.c	2010-03-24 16:23:04 UTC (rev 10000)
+++ branches/branch-5-6/mapserver/maprasterquery.c	2010-03-24 16:30:22 UTC (rev 10001)
@@ -1328,6 +1328,7 @@
   double adfGeoTransform[6];
   int nXSize, nYSize;
   GDALDatasetH hDS;
+  CPLErr eErr = CE_Failure;
 
   /*
   ** For the time being we only automatically derive extents from
@@ -1358,17 +1359,25 @@
   {
     nXSize = GDALGetRasterXSize( hDS );
     nYSize = GDALGetRasterYSize( hDS );
-    GDALGetGeoTransform( hDS, adfGeoTransform );
+    eErr = GDALGetGeoTransform( hDS, adfGeoTransform );
     
     GDALClose( hDS );
   }
   
   msReleaseLock( TLOCK_GDAL );
 
-  if( hDS == NULL )
+  if( hDS == NULL || eErr != CE_None )
   {
       return MS_FAILURE;
   }
+
+  /* If this appears to be an ungeoreferenced raster than flip it for
+     mapservers purposes. */
+  if( adfGeoTransform[5] == 1.0 && adfGeoTransform[3] == 0.0 )
+  {
+      adfGeoTransform[5] = -1.0;
+      adfGeoTransform[3] = nYSize;
+  }
   
   extent->minx = adfGeoTransform[0];
   extent->maxy = adfGeoTransform[3];

Modified: branches/branch-5-6/mapserver/mapresample.c
===================================================================
--- branches/branch-5-6/mapserver/mapresample.c	2010-03-24 16:23:04 UTC (rev 10000)
+++ branches/branch-5-6/mapserver/mapresample.c	2010-03-24 16:30:22 UTC (rev 10001)
@@ -1361,9 +1361,7 @@
 
     memcpy( adfDstGeoTransform, map->gt.geotransform, sizeof(double)*6 );
 
-    msReleaseLock( TLOCK_GDAL );
     msGetGDALGeoTransform( hDS, map, layer, adfSrcGeoTransform );
-    msAcquireLock( TLOCK_GDAL );
 
     nSrcXSize = GDALGetRasterXSize( hDS );
     nSrcYSize = GDALGetRasterYSize( hDS );

Modified: branches/branch-5-6/mapserver/mapwcs.c
===================================================================
--- branches/branch-5-6/mapserver/mapwcs.c	2010-03-24 16:23:04 UTC (rev 10000)
+++ branches/branch-5-6/mapserver/mapwcs.c	2010-03-24 16:30:22 UTC (rev 10001)
@@ -2053,7 +2053,6 @@
       return MS_FAILURE;
     }
 
-
     msGetGDALGeoTransform( hDS, layer->map, layer, cm->geotransform );
 
     cm->xsize = GDALGetRasterXSize( hDS );



More information about the mapserver-commits mailing list