TomTom data and caches

The car on the TomTom network reads the MultiNet road network of TomTom, with its historical speed profiles, from four caches in %NetworkModel_PrivDir%/TomTom/<edition>: Roads.mmd, Junctions.mmd, Speednetworks.mmd and Speedprofiles.mmd. This page describes how a delivery of TomTom becomes these caches. SourceData/Infrastructure/TomTom/Impl makes them, once per edition. UpdateAll.cmd does not make them, because a machine that runs the model needs only the caches and not the delivery. TomTom data are licensed to PBL: do not pass them on.

The edition that the model reads follows the analysis moment: the column CarCongestionSpeed_date of AnalysisMomentPresets, in group 7 of ModelParameters.dms. The steps below add an edition, for example the December edition of a new year. Their example is the edition yr2025_12 (MultiNet 2025.12.000) under the analysis moment Y2025. What the model does with the data is on Private transport, and what a run needs is under The TomTom caches on How to run the model.

Contents

Step 1: get the delivery

Get the delivery of TomTom MultiNet with the speed profiles, for the Netherlands and Belgium. The delivery of 2025.12.000 is one zip with 7z archives: for MultiNet one per country and tile (eur2025_12_000-shpa-mn-nld-...), for the speed profiles one per region (eur2025_12_000-shpd-sp-nld-nl1 and so on).

Step 2: unpack it

Unpack the delivery into the folder of the edition with batch\ExtractTomTomEdition.py. Name that folder after the edition as yr<year>_<month>, for example yr2025_12 for 2025.12.000. The car caches of the model take their name from it (TT2025-12).

python batch\ExtractTomTomEdition.py <delivery.zip> yr2025_12 --countries nld,bel --priv <folder of NetworkModel_PrivDir>

The script puts the shapefiles of MultiNet in multinet and the dbf files of the speed profiles in speedprofiles. It puts them there without subfolders, because the model looks for all files in the folder of the first one. It also unpacks the parts of each shapefile, which the delivery compresses one by one (.shp.gz and so on), and copies the documentation to doc. At the end it counts the files: no .gz file may be left. For 2025.12.000 that gives 1,397 shapefiles in multinet and 10 dbf files in speedprofiles, 15 GB with the documentation. The script needs py7zr 1.1 or later (pip install --user py7zr). With --dry-run it only lists the archives.

Step 3: set the edition

Put the edition in the column CarCongestionSpeed_date of the analysis moments that use it, in AnalysisMomentPresets (group 7 of ModelParameters.dms).

Step 4: write the file lists

Write the lists of the delivered files, in a GeoDmsRun of its own. Open a command prompt in the folder NetworkModel_PBL:

set "GEODMS_EXE=C:\Program Files\ObjectVision\GeoDms20.28.0.m\GeoDmsRun.exe"
set "GEODMS_Overridable_AnalysisMoment=Y2025"
set "TT=/SourceData/Infrastructure/TomTom"
if not exist batch\log md batch\log
"%GEODMS_EXE%" /Lbatch\log\TomTom_filelists.log cfg\main.dms @statistics %TT%/Impl/Generate_FileList_CSVs

The second line sets the analysis moment of these calls, as -set AnalysisMoment does for UpdateAll.cmd. Take one whose preset has the new edition. It also needs a GTFS feed (Y2015 or Y2023 to Y2026): without one, the check on GTFS_file_date stops the call with IntegrityCheck : ‘strlen(this) == 8’ is not true. @statistics before the item makes GeoDmsRun calculate it, and so run the two dir commands that write the lists; without it, the call ends at once and writes nothing. Generate_FileList_CSVs writes the lists to %LocalDataProjDir%/TomTom/dirinfo_<edition>_multinet.csv and dirinfo_<edition>_speedprofiles.csv.

Step 5: write the caches

Write the four caches, in a new GeoDmsRun in the same command prompt. The readers of the caches are made from the file lists of step 4, which is why that step needs a process of its own.

"%GEODMS_EXE%" /Lbatch\log\TomTom_write.log cfg\main.dms %TT%/Impl/Write_Roads %TT%/Impl/Write_Junctions %TT%/Impl/Write_Speednetworks %TT%/Impl/Write_Speedprofiles

The caches are written to the folder of the edition, next to multinet and speedprofiles. For yr2025_12 this step takes about 40 seconds and 3 GB of memory.

Step 6: check the caches

Read the caches back, in a third GeoDmsRun. Here @statistics writes the statistics of each item to the console, with the number of values in Count:

"%GEODMS_EXE%" /Lbatch\log\TomTom_read.log cfg\main.dms @statistics %TT%/Roads/FRC @statistics %TT%/Junctions0/ELEV @statistics %TT%/Speednetworks/VAL_DIR @statistics %TT%/Speedprofiles/rel_sp

No log of steps 4 to 6 may hold a line with [E]: an exit code 0 alone does not prove that the caches are right. A new edition has about as many rows as yr2025_12:

Cache Rows in yr2025_12 One row is
Roads 4,231,028 an element of the network: a road, a ferry connection or an address area boundary
Junctions 3,416,311 a junction
Speednetworks 6,331,226 a road element in one direction
Speedprofiles 421,920 a time slot of 5 minutes of a speed profile: 1,465 profiles of 288 slots

Step 7: the machines that run the model

A machine that only runs the model needs only the four caches, not multinet, speedprofiles and doc. Copy them to %NetworkModel_PrivDir%/TomTom/<edition> on that machine. The next run with the new edition makes new car caches, because their name holds the edition (see UpdateAll and cache internals).