Part 3 – Attribute Tables & Choropleth Map

Data Preparation
Cartography
Select a study-area subset from a province-wide density dataset, clean up its attribute table, and produce a choropleth map of building density change in Vlissingen.
Published

August 6, 2026

Classification: Beginner GIS Analysis | Spatial Data Basics | Attribute Tables & Choropleth Mapping

Learning Level: Beginner

Time Estimate: 45 minutes

Software Required: QGIS LTR 3.44

Author: Daniele Cannatella


Overview

This exercise is the third hands-on block of the Week 1 GIS workshop, following directly on from Part 2 – Raster Import & Basemap. You will select the municipality of Vlissingen out of a province-wide density dataset (RUDIFUN), clean up its attribute table, and produce a choropleth map showing how building density changed between 2019 and 2024.

Learning Outcomes

By completing this exercise, you will be able to:

✅ Select features by attribute expression and export the selection as a new layer
✅ Delete unneeded fields from an attribute table
✅ Classify a numeric field using graduated symbology (Natural Breaks / Jenks)
✅ Calculate a new field expressing change between two years
✅ Style and export a choropleth map for sharing


Data & Software

You will need:

Resource Type Description
vlissingen-part-3.qgz QGIS project Starter project, pre-loaded with the RUDIFUN dataset for the province of Zeeland
PV29__00_Basis_Bouwblok Vector layer (polygon) RUDIFUN building-block density dataset (FSI, MXI), province-wide — not yet clipped to Vlissingen

Background: The RUDIFUN dataset (Ruimtelijke Dichtheden en Functiemenging in Nederland — “Spatial Densities and Function Mix in the Netherlands”) supports research into how spatial density and the mixing of housing with other functions relate to urban issues such as mobility, liveability, and the real-estate market. It reports two indicators — the Floor-Space Index (FSI), a measure of built-up density, and the Mixed-Use Index (MXI), the ratio of housing to working floor space — calculated at the scale of the building block, neighbourhood, district, and municipality. Data on this portal may be reused under CC BY 4.0 NL, with attribution.


Step 1: Select and Export the Study Area

1.1 Explore the Full Dataset

  1. Launch QGIS LTR 3.44
  2. Open the project vlissingen-part-3.qgz
  3. The layer PV29__00_Basis_Bouwblok should already be loaded, covering the whole of Zeeland
  4. Open its Attribute Table and note the feature count and the available fields, in particular GM_CODE (municipality code) and the FSI fields for 2019 and 2024 ([FSI_19] / [FSI_24])

Result: The attribute table lists building blocks for the entire province, not just Vlissingen.

1.2 Select Vlissingen by Expression

  1. Right-click the layer → Open Attribute Table
  2. Click Select Features Using an Expression (the ε icon)
  3. Enter the expression:
"GM_CODE" = 'GM0718'
  • "GM_CODE" – the field holding the municipality code
  • = 'GM0718' – matches rows where that code equals Vlissingen’s municipality code, written as a quoted text string
  1. Click Select Features

Result: Only the building blocks belonging to Vlissingen are now highlighted in yellow on the canvas and selected (highlighted) in the attribute table.

1.3 Export the Selection as a New Layer

  1. Right-click the layer → Export → Save Selected Features As…
  2. Format: GeoPackage
  3. Click on the three dots (besides the File name field) and navigate to the data_output folder
  4. Name: vlissingen_rudifun
  5. Click Save, then OK
  6. Add the new layer to the map if it isn’t added automatically

Why work with a subset instead of the full dataset?

  • More agile layers — a smaller file renders and processes faster
  • Less visual noise — the map only shows the area you’re analysing
  • Focused analysis — easier to compare against other Vlissingen-only layers, like the neighbourhood boundaries from Part 1

Step 2: Clean Up the Attribute Table

2.1 Remove Unneeded Fields

The full dataset carries many more indicators than this exercise needs. To keep the table readable, remove everything except GM_CODE and the FSI fields for 2019 and 2024.

  1. Right-click the vlissingen_rudifun layer → Properties → Fields
  2. Click the pencil icon to toggle editing mode
  3. Select the fields you don’t need for this exercise, and click the Delete Field button (red X) for each
  4. Keep only GM_CODE, FSI_19, and FSI_24
  5. Click OK to apply, then save your edits

Result: The attribute table now shows only the fields relevant to this exercise.


Step 3: Where Are the Densest Buurten in 2024?

3.1 Classify by FSI 2024

  1. Select the vlissingen_rudifun layer, open Layer Styling (F7)
  2. Change the classification type to Graduated
  3. Value: FSI_24
  4. Classification Mode: Natural Breaks (Jenks)
  5. Classes: 5
  6. Choose a sequential colour ramp (e.g. Blues or Oranges) and click Classify, then Apply

Tip: Natural Breaks (Jenks) groups similar values together and maximises the difference between classes — it’s a good default for density data where you want the classification to reflect real gaps in the distribution, rather than splitting the data into equal-sized groups.

Result: Building blocks are now shaded from low to high FSI in 2024.

❓ Question: Looking at the map, which areas of Vlissingen are the densest in 2024?

✅ Solution (click to reveal):

The darkest class should fall over the historic city centre and the most built-up residential blocks, where floor space is high relative to plot area. Lighter classes typically correspond to industrial or port areas, green space, and low-density suburban blocks.


Step 4: How Did Density Change Between 2019 and 2024?

4.1 Duplicate the Layer

  1. Right-click the vlissingen_rudifun layer → Duplicate Layer
  2. Rename the copy density_change

4.2 Filter Out Empty Blocks

Building blocks with no built floor space in 2024 aren’t meaningful for a change map, so filter them out before calculating the difference.

  1. Right-click density_change → Properties → Source
  2. In the Provider Feature Filter box, enter:
"FSI_24" > 0
  1. Click OK

4.3 Calculate the Change

  1. Open the Attribute Table for density_change, toggle editing mode
  2. Open Field Calculator
  3. Create a new field: fsi_change (type: Decimal number)
  4. Expression:
"FSI_24" - "FSI_19"
  • "FSI_24" – FSI value in 2024
  • "FSI_19" – FSI value in 2019
  • Subtracting gives the change in FSI over the period: a positive value means the block densified, a negative value means it lost built density
  1. Click OK, save your edits, and toggle editing off

4.4 Classify the Change

  1. Open Layer Styling (F7) for density_change
  2. Value: fsi_change
  3. Choose a diverging colour ramp (e.g. RdBu or Spectral), so decreases and increases are visually distinct
  4. Set the classification so that 0 sits on a class break — either by choosing Natural Breaks (Jenks) and checking the generated breaks, or by manually editing a break to fall at 0
  5. Click Classify, then Apply

Result: Areas that densified between 2019 and 2024 appear in one colour, areas that lost density appear in the other, and the intensity of the colour shows the size of the change.

❓ Question: Which parts of Vlissingen densified the most between 2019 and 2024? Are there any areas that lost density?

✅ Solution (click to reveal):

Look for the darkest class on the “increase” side of the ramp — this often clusters around recent infill or redevelopment sites. A small number of blocks in the darkest “decrease” class may point to demolitions or a data artefact (e.g. a block that was reclassified between the two survey years) rather than genuine density loss — worth flagging as a limitation.


Step 5: Export and Share

  1. Take a screenshot of the QGIS canvas showing the fsi_change choropleth, with the legend visible
  2. Upload the screenshot to the course Miro board
  3. File → Save Project

Reflection

  • Why classify continuous density data into discrete classes rather than using a continuous colour ramp?
  • What does the change map tell you about how Vlissingen has densified between 2019 and 2024?
  • What are the limitations of comparing two snapshots in time (2019 vs. 2024) without knowing what happened in between?

Back to top