Almost everything in the Built Environment happens somewhere. Buildings, streets, energy use, flood risk, heat, noise, who lives where: sooner or later your data has coordinates, and sooner or later someone asks you for a map. This section is the foundation for making that map in code, reproducibly, rather than by hand.
It grew out of the October 2026 special edition of the Coding Café, the #30DayMapChallenge kick-off, and it is written so that you can work through the challenge with it: one theme a day, 1 to 30 November. The day-by-day guide points every theme at the page that covers it.
How a map gets made¶
Whatever tool you use, a map in code goes through the same five steps. Most of the problems people hit are a missing or skipped step, usually the second one.
The pages¶
Start here. One complete map, step by step, in Python and R. Everything else in the section is a deeper look at one of the five steps.
Points, lines and polygons. What a GeoDataFrame is, and the handful of operations (filter, buffer, distance, spatial join, dissolve) behind most maps.
Why your map looks squashed. Coordinate reference systems, EPSG:4326 vs 28992 vs 3857, and the mistakes that silently give wrong distances and areas.
OpenStreetMap, PDOK, CBS and Eindhoven open data. How to download from each, and what you must put on the map to credit it.
From a plot to a map. Visual hierarchy, colour, classification, legends, titles and credits, and a checklist to run before you post.
Beyond points on a plot. Hexagon grids, density surfaces, elevation rasters, basemaps and interactive maps.
What an AI assistant gets wrong about maps, how to prompt so it does not, and how to check its work. Fits the 2026/27 Coding Café theme.
All 30 themes, each with a technique, a page to read, and a data idea for Eindhoven or the Netherlands.
If you have one hour¶
Read Anatomy of a map and run its code on your own laptop.
Read the first half of Projections, up to The three you will meet.
Make the Day 1 Points map from the starter repo, then change one thing: the colour, the data, or the question it answers.
Before you share it, run the checklist at the end of Map design.
Setting up¶
You need either Python or R. You do not need both.
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install geopandas matplotlib mapclassifyConda users: conda install -c conda-forge geopandas matplotlib mapclassify.
geopandas brings shapely (geometry), pyproj (projections) and pyogrio (reading files)
with it.
install.packages(c("sf", "ggplot2"))
# optional, used on some pages:
install.packages(c("tmap", "terra", "osmdata", "classInt"))On Linux, sf needs the GDAL, GEOS and PROJ system libraries first
(sudo apt install libgdal-dev libgeos-dev libproj-dev on Ubuntu). On Windows and macOS the
CRAN binaries include them.
QGIS is free and reads every file on these pages. The ideas (projections, classification, design) apply unchanged; only the buttons differ. See Grids, rasters and web maps for the QGIS route.
Further reading¶
Geocomputation with R, Lovelace, Nowosad and Muenchow, free online at https://
r .geocompx .org, and its Python sibling Geocomputation with Python at https:// py .geocompx .org. The best next step after this section. GeoPandas user guide and the sf documentation
Rbanism, TU Delft’s community for R in urbanism, who run their own R edition of the #30DayMapChallenge every November