Learning

A free-parking map for Berlin

November 14, 2026

The parking page answers a practical question: is this place in a Berlin parking zone, and do parking charges apply right now?

Open data

The zones come from the Berlin Geoportal, the layer Parkraumbewirtschaftung. The service is a WFS. A GeoJSON snapshot of the 104 zone polygons is stored in the repo, and scripts/parkzonen/refresh.mjs downloads a fresh copy. The script trims the fields and turns the free-text hours into day and hour ranges where the text matches a pattern the tests know.

The licence is Datenlizenz Deutschland – Zero – Version 2.0. It sets no conditions and does not require attribution. The page credits Geoportal Berlin / Parkraumbewirtschaftung anyway.

Inside a zone, and outside all of them

A point-in-polygon test says whether the address sits in a zone. The pin on the map is then moved to the nearest drivable street, because a search hit can land on a building. The suggested parking place is not that boundary. It is the nearest kerb, from the city's street-parking map, that is outside every paid zone and is not a no-stopping restriction. The kerb has to sit on a drivable street, and not in a park, on water, on railway land, or in a station. Neighbouring zones share edges, so a point just outside one polygon is often still inside the next one, or in a park such as Mauerpark. Turf does the point-in-polygon tests.

The distance on the page is straight across the map. The walking time takes that distance, multiplies by 1.3, and assumes 5 km/h. It is labelled as an estimate. It is not a walking route.

Messy hours

The hour field is written by hand. Most lines look like "Mo-Sa 9-22 Uhr". Some repeat the same text twice, some put a slash between the weekday hours and Saturday, and one mentions Advent Saturdays. The parser accepts the shapes that appear in the file. The Advent line does not parse. The raw text is kept, and the page says to check the signs for charging hours.

Whether charges apply is decided in the browser from those ranges and the clock in Europe/Berlin. The end of a range is exclusive, so charges stop at 22:00 when the text says 9-22. A Bewohnerparkausweis is a separate rule: with one, you can park in your own zone. The page says so. It does not know who has one.

The rest of the map

The base map is OpenStreetMap, drawn with MapLibre and OpenFreeMap tiles. Search uses Photon, biased to Berlin. A public-transport duration, when the request succeeds, comes from the VBB community API. There is no API key. If that request fails, the zone answer and a link to transit directions still show.

Signs on the street are the rule that counts. A zone polygon can be out of date, and a single block can differ from the zone around it. The page says that, and it does not claim otherwise.

All notes