The S-57 format has a mechanism for the distribution of chart updates. Data providers distribute a baseline dataset and later issue updates that have to be applied on top of this baseline.

Usually, you will receive a collections of cell updates grouped into a catalog. Sometimes, you can encounter individual cell updates too.

Luciad products handle all this mostly automatically. You only have to make sure to create a single model for the base data as well as all updates in one go. You have three options, depending on how the updates are distributed, and how you organize your data:

  1. Cell updates located next to base cells are picked up automatically, see Cell update files.

  2. You can load multiple catalogs (base and update) together using a MULTICATALOG.031 file, see Catalog updates.

  3. You can combine any number of catalogs and cells (base and update) together programmatically using TLcdS57CatalogueDataSource.

Cell update files

Cell updates define changes to a base cell. Original new cell files are stored in files with extension .000. The changes to these cells are stored in update files with file extension .001 for the first update, .002 for the second update, and so on. When a cell is read, the updates of the .001 update file need to be applied first, followed by the changes of the .002 update file, and so on, to obtain an up-to-date version of the cell.

The TLcdS57UnifiedModelDecoder has built-in support for update files. When the decoder decodes a cell, it automatically looks for update files with extensions .001, .002, and so on, in the same directory. The decoder applies those updates directly in the correct order to the original cell file. Updates are applied in a transparent way: once the cell has been decoded into an ILcdModel, the ILcdModel will look as if the cell data were provided in a single, up-to-date cell file.

Catalog updates

Catalogues are often used to distribute a set of cell updates. After data provider have published the initial version of a catalogue with .000 cell files, they may publish update catalogues that contain update files with extensions .001, .002, and so on, for the cells in the base catalogue, as well as additional new cells.

Update catalogues cannot be read directly, as they do not contain a reference to the base data.

To read a base catalog as well as its update catalogs, place them all next to each-other in a common folder. Then place an empty MULTICATALOG.031 file in the shared folder.

LuciadFusion and LuciadLightspeed can both open this MULTICATALOG.031 file, and will automatically pick up any base catalog as well as all updates it can find. You can even place new updates in the same folder later on, these will be picked up when you re-create the model. In LuciadFusion, this is done automatically.

You can also use this mechanism to merge catalogues of different data providers into a single virtual catalogue. After decoding, the cells will be accessible and visualized as if they were part of one single catalogue.

Here’s an example of such a folder layout:

example/
├── MULTICATALOG.031
├── base/
│   └── ENC_ROOT/
│       └── CATALOG.031
├── update1/
│   └── ENC_ROOT/
│       └── CATALOG.031
└── update2/
    └── ENC_ROOT/
        └── CATALOG.031

Alternatively, you can load multiple catalogs together by creating a using TLcdS57CatalogueDataSource that lists them all.