1990sfirst libraries at the VU
declarativeresults, not steps
10 mthe Netherlands, interactively

Software

Developing software is one of the two things Object Vision does, and this page is about that half. Our main product is GeoDMS, an open-source modelling framework, and we build our own web-based viewers for presenting model results and the logic behind them. The other half is the modelling itself, applied to real questions in projects, which is where most of our work is and what the software exists for.

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.

Describing results, not steps

In a traditional script, you tell the computer what to do step by step. In a GeoDMS model, you describe what needs to be calculated and how the results depend on each other. The system determines the calculation steps.

This is the design decision everything else follows from. Each map, table and indicator is an expression over source data and other results, and the engine works out how, when and in what order to calculate them.

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

The models built on it, and what a model consists of besides its software, are on models.

Tools and data products

  • BAG tools, for turning the Dutch address and building register into something a model can use.
  • Pand Hoogte Nederland, a height for every building in the country, derived from the national elevation rasters.
  • A language server for editing configurations with completion and diagnostics.

All repositories: github.com/ObjectVision