1990sfirst libraries at the VU
declarativea model is a specification
10 mthe Netherlands, interactively
100 %of our software is open source

Software

Software is one of the two things this company is built on. Everything we make is open source: the engine, the models and the documentation, so that results can be checked, reused and argued with.

GeoDMS

GeoDMS is an open-source platform for building large, fast and transparent spatial models. It combines a declarative modelling language, a high-performance calculation engine and an interactive map and table viewer, and it has been the engine behind national and European policy models since the late 1990s.

A model is a specification, not a script

This is the design decision everything else follows from. In GeoDMS you do not write the steps; you declare what every result is. Each map, table and indicator is an expression over source data and other results. The engine works out how, when and in what order to calculate.

Most spatial models start as a script and eventually hit three walls. Time, because every run recalculates everything, so you start saving intermediate files by hand and are never quite sure which ones are stale. Memory, because national grids at fine resolution stop fitting in RAM. And trust, when a reviewer asks how exactly a number on a map was produced and the honest answer is a guided tour through notebooks and an undocumented run order.

A declarative model removes all three at once, not with more code but with a different structure.

What that buys

Scale. GeoDMS calculates interactively with country to continent sized grids: the Netherlands at 2.5 or 10 metres, Europe at 100 metres, hundreds of millions of cells, on an ordinary Windows machine. Automatic tiling processes grids segment by segment, so a model can work with far more data than fits in memory.

Only what is needed. All results form a dependency tree that is evaluated lazily. Only what you actually ask for is computed, nothing is computed twice within a session, and stable intermediates can be written to disk by a declaration in the model text rather than by save-calls scattered through scripts. Iterating on the part you are working on then takes minutes instead of hours.

Fewer silent errors. Data items carry units with a metric, and the engine checks that they are consistent. Metres cannot be added to seconds; euros per square metre times square metres gives euros. A whole class of mistakes that passes unnoticed in a script fails at configuration time here.

Traceability. Every result can be traced through its expression down to the source data. Configurations are plain text, so they can be versioned, diffed and reviewed in git like any other code. Reviewing a model means browsing it, not reconstructing it.

Scenarios side by side. Model variants are configured as substitutions on a shared tree, so alternatives are computed and compared while everything they have in common is calculated once.

Coming from Python?

Most modellers who consider GeoDMS already know Python, and the real question is not which language is nicer but where the model itself should live. Our advice, after twenty-five years of national-scale models: build the model in GeoDMS and, if you really want, use Python around it. The core is where correctness, speed and traceability are earned. A script in the middle of a calculation chain is a black box to the engine and breaks the audit trail for everything downstream. At the edges Python is excellent, for estimating parameters, machine learning, figures and reports, and there are several supported ways to connect the two.

Documentation · Source and releases · Getting started course

Models built on it

Model What it does Documentation
RSopen Open-source RuimteScanner 2.0: land use, actors and objects for the Netherlands geodms.nl/rsopen
CRISP Global downscaling of population and built-up area on a 1 km grid, behind the UN urbanization outlook geodms.nl/crisp
NetworkModel PBL Car, bicycle, walking and public transport accessibility for the Netherlands geodms.nl/networkmodel_pbl
NetworkModel World A routable car network for the entire planet, with catchments and functional rural areas Wiki
NetworkModel EU The European equivalent, for the Joint Research Centre GitHub
LUISA / EU-ClueScanner Land-use component of the Commission's territorial assessment platform JRC LUISA
Vesta Energy demand and supply matching in the built environment github.com/pbl-nl
Land Use Scanner Germany Land-use allocation for Germany, with the BBR GitHub
IGOR Individuals Grouped Over Ratios: splits gridded population totals into five-year sex and age groups Wiki

Tools and data products

Concepts and methods

All repositories: github.com/ObjectVision