# .gdalg files to replay serialized "gdal" commands

A subset of subcommands of gdal support generating on-the-fly / streamed raster of vector datasets. They are typically saved to a "real" output dataset, but it is also possible to save them in a JSON file of extension `.gdalg.json`, that can be read by the GDALG: GDAL Streamed Algorithm driver or GDALG: GDAL Streamed Algorithm driver to apply the saved processing on-the-fly and use the resulting dataset as a regular input dataset for `GDALOpenEx()`, or anywhere in GDAL API or command line utilities where a raster input dataset is expected. GDALG files are conceptually close to VRT (Virtual) files, although the implementation is substantially different.

## In-process stream execution

For algorithms that support GDALG output, it is also possible to use the `stream` output format to indicate that a raster or vector streamed dataset must be returned.

For example the following snippet, runs that "gdal vector geom set-type" algorithm on a source dataset and iterates over features from the returned streamed dataset.

    from osgeo import gdal
    gdal.UseExceptions()

    alg = gdal.GetGlobalAlgorithmRegistry()["vector"]["geom"]["set-type"]
    alg["input"] = src_ds
    alg["output"] = ""
    alg["output-format"] = "stream"
    alg["geometry-type"] = "LINESTRING Z"

    alg.Run()

    out_ds = alg["output"].GetDataset()
    out_lyr = out_ds.GetLayer(0)
    for f in our_lyr:
        f.DumpReadable()

## Examples

### Example 1: Serialize the command of a reprojection of a GeoPackage file in a GDALG file, and later read it

        $ gdal vector pipeline --progress ! read in.gpkg ! reproject --dst-crs=EPSG:32632 ! write in_epsg_32632.gdalg.json --overwrite
        $ gdal vector info in_epsg_32632.gdalg.json

    The content of :file:`in_epsg_32632.gdalg.json` is:

    .. code-block:: json

        {
            "type": "gdal_streamed_alg",
            "command_line": "gdal vector pipeline ! read in.gpkg ! reproject --dst-crs=EPSG:32632"
        }