示例#1
0
void
Rast3d_coord2tile_index(RASTER3D_Map * map, int x, int y, int z, int *tileIndex,
		    int *offset)
{
    int xTile, yTile, zTile, xOffs, yOffs, zOffs;

    Rast3d_coord2tile_coord(map, x, y, z,
			&xTile, &yTile, &zTile, &xOffs, &yOffs, &zOffs);
    *tileIndex = Rast3d_tile2tile_index(map, xTile, yTile, zTile);
    *offset = zOffs * map->tileXY + yOffs * map->tileX + xOffs;
}
示例#2
0
void
Rast3d_retile(void *map, const char *nameOut, int tileX, int tileY, int tileZ)
{
    void *map2;
    double value;
    int x, y, z, saveType;
    int rows, cols, depths, typeIntern;
    int xTile, yTile, zTile;
    int xOffs, yOffs, zOffs, prev;
    int tileXsave, tileYsave, tileZsave;
    RASTER3D_Region region;

    if (!Rast3d_tile_use_cache_map(map)) {
	retileNocache(map, nameOut, tileX, tileY, tileZ);
	return;
    }

    saveType = Rast3d_get_file_type();
    Rast3d_set_file_type(Rast3d_file_type_map(map));
    Rast3d_get_tile_dimension(&tileXsave, &tileYsave, &tileZsave);
    Rast3d_set_tile_dimension(tileX, tileY, tileZ);

    typeIntern = Rast3d_tile_type_map(map);
    Rast3d_get_region_struct_map(map, &region);

    map2 =
	Rast3d_open_cell_new(nameOut, typeIntern, RASTER3D_USE_CACHE_DEFAULT, &region);
    if (map2 == NULL)
	Rast3d_fatal_error("Rast3d_retile: error in Rast3d_open_cell_new");

    Rast3d_set_file_type(saveType);
    Rast3d_set_tile_dimension(tileXsave, tileYsave, tileZsave);

    Rast3d_coord2tile_coord(map2, 0, 0, 0,
			&xTile, &yTile, &zTile, &xOffs, &yOffs, &zOffs);

    prev = zTile;

    x = 0;
    y = 0;

    Rast3d_get_coords_map(map, &rows, &cols, &depths);

    for (z = 0; z < depths; z++) {
        G_percent(z, depths, 1);
	Rast3d_coord2tile_coord(map2, x, y, z, &xTile, &yTile, &zTile,
			    &xOffs, &yOffs, &zOffs);
	if (zTile > prev) {
	    if (!Rast3d_flush_all_tiles(map2))
		Rast3d_fatal_error("Rast3d_retile: error in Rast3d_flush_all_tiles");
	    prev++;
	}

	for (y = 0; y < rows; y++)
	    for (x = 0; x < cols; x++) {

		Rast3d_get_value_region(map, x, y, z, &value, typeIntern);
		if (!Rast3d_put_value(map2, x, y, z, &value, typeIntern))
		    Rast3d_fatal_error("Rast3d_retile: error in Rast3d_put_value");
	    }
    }

    G_percent(1, 1, 1);
    if (!Rast3d_flush_all_tiles(map2))
	Rast3d_fatal_error("Rast3d_retile: error in Rast3d_flush_all_tiles");
    if (!Rast3d_close(map2))
	Rast3d_fatal_error("Rast3d_retile: error in Rast3d_close");
}
示例#3
0
int
Rast3d_flush_tiles_in_cube(RASTER3D_Map * map, int xMin, int yMin, int zMin, int xMax,
		     int yMax, int zMax)
{
    int xTileMin, yTileMin, zTileMin, xTileMax, yTileMax, zTileMax;
    int xOffs, yOffs, zOffs;
    int regionMaxX, regionMaxY, regionMaxZ;

    if (!map->useCache)
	Rast3d_fatal_error
	    ("Rast3d_flush_tiles_in_cube: function invalid in non-cache mode");
     /*AV*/
	/*BEGIN OF ORIGINAL CODE */
	/*
	 *  Rast3d_get_coords_map (map, &regionMaxX, &regionMaxY, &regionMaxZ);
	 */
	 /*AV*/
	/* BEGIN OF MY CODE */
	Rast3d_get_coords_map(map, &regionMaxY, &regionMaxX, &regionMaxZ);
    /* END OF MY CODE */

    if ((xMin < 0) && (xMax < 0))
	Rast3d_fatal_error("Rast3d_flush_tiles_in_cube: coordinate out of Range");
    if ((xMin >= regionMaxX) && (xMax >= regionMaxX))
	Rast3d_fatal_error("Rast3d_flush_tiles_in_cube: coordinate out of Range");

    xMin = MIN(MAX(0, xMin), regionMaxX - 1);

    if ((yMin < 0) && (yMax < 0))
	Rast3d_fatal_error("Rast3d_flush_tiles_in_cube: coordinate out of Range");
    if ((yMin >= regionMaxY) && (yMax >= regionMaxY))
	Rast3d_fatal_error("Rast3d_flush_tiles_in_cube: coordinate out of Range");

    yMin = MIN(MAX(0, yMin), regionMaxY - 1);

    if ((zMin < 0) && (zMax < 0))
	Rast3d_fatal_error("Rast3d_flush_tiles_in_cube: coordinate out of Range");
    if ((zMin >= regionMaxZ) && (zMax >= regionMaxZ))
	Rast3d_fatal_error("Rast3d_flush_tiles_in_cube: coordinate out of Range");

    zMin = MIN(MAX(0, zMin), regionMaxZ - 1);

    Rast3d_coord2tile_coord(map, xMin, yMin, zMin,
			&xTileMin, &yTileMin, &zTileMin,
			&xOffs, &yOffs, &zOffs);

    if (xOffs != 0)
	xTileMin++;
    if (yOffs != 0)
	yTileMin++;
    if (zOffs != 0)
	zTileMin++;

    Rast3d_coord2tile_coord(map, xMax + 1, yMax + 1, zMax + 1,
			&xTileMax, &yTileMax, &zTileMax,
			&xOffs, &yOffs, &zOffs);

    xTileMax--;
    yTileMax--;
    zTileMax--;

    if (!Rast3d_flush_tile_cube(map, xTileMin, yTileMin, zTileMin,
			   xTileMax, yTileMax, zTileMax)) {
	Rast3d_error("Rast3d_flush_tiles_in_cube: error in Rast3d_flush_tile_cube");
	return 0;
    }

    return 1;
}