Procházet zdrojové kódy

Fixed wrong tile size computation in case of huge raster3d maps.

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@48398 15284696-431f-4ddb-bdfa-cd5b030d7da7
Soeren Gebbert před 13 roky
rodič
revize
b099cba888
2 změnil soubory, kde provedl 14 přidání a 14 odebrání
  1. 3 1
      lib/raster3d/open2.c
  2. 11 13
      lib/raster3d/tilemath.c

+ 3 - 1
lib/raster3d/open2.c

@@ -105,9 +105,11 @@ void *Rast3d_open_new_opt_tile_size(const char *name, int cache, RASTER3D_Region
 
 
     Rast3d_get_tile_dimension(&oldTileX, &oldTileY, &oldTileZ);
-    
+
     Rast3d_compute_optimal_tile_dimension(region, type, &tileX, &tileY, &tileZ, maxSize);
 
+    G_debug(1, "New tile dimension X %i Y %i Z %i\n", tileX, tileY, tileZ);
+
     Rast3d_set_tile_dimension(tileX, tileY, tileZ);
 
     oldType = Rast3d_get_file_type();

+ 11 - 13
lib/raster3d/tilemath.c

@@ -331,13 +331,13 @@ Rast3d_compute_clipped_tile_dimensions(RASTER3D_Map * map, int tileIndex, int *r
 void
 Rast3d_compute_optimal_tile_dimension(RASTER3D_Region *region, int type, int *tileX, int *tileY, int *tileZ, int maxSize)
 {
-   int size = 0;
-   int x, y, z;
-   int i = 0;
-   int tileSize;
-   int divx = 2;
-   int divy = 2;
-   int divz = 2;
+   unsigned long size = 0;
+   unsigned long x, y, z;
+   unsigned long i = 0;
+   unsigned long tileSize;
+   unsigned long divx = 2;
+   unsigned long divy = 2;
+   unsigned long divz = 2;
 
    if(type == FCELL_TYPE)
       size = sizeof(FCELL);
@@ -352,9 +352,7 @@ Rast3d_compute_optimal_tile_dimension(RASTER3D_Region *region, int type, int *ti
    while(1) {
        tileSize = size * x * y * z;
 
-       /*
-       printf("Tilesize %i x %i y %i z %i\n", tileSize, x, y, z);
-       */
+       G_debug(2, "Rast3d_compute_optimal_tile_dimension: tilesize %li x %li y %li z %li\n", tileSize, x, y, z);
 
        if(tileSize <= maxSize * 1024)
           break;
@@ -391,9 +389,9 @@ Rast3d_compute_optimal_tile_dimension(RASTER3D_Region *region, int type, int *ti
          break;
    }
 
-   *tileX = x;
-   *tileY = y;
-   *tileZ = z;
+   *tileX = (int)x;
+   *tileY = (int)y;
+   *tileZ = (int)z;
 }