🗺️ Turning a Simple Excel Table into a Map — My #30DayMapChallenge Story

For this year’s #30DayMapChallenge day one points, I wanted to do something lightweight:
just take one of those never-ending Excel tables that everyone in GIS seems to have lying around and turn it into a map.
No heavy software, no complicated setup — just Python, a cup of coffee, and curiosity.

The starting point

I had this table with road section data, the so called Mauttabelle — IDs, names, coordinates — the usual.
Something like this:

Abschnitts-IDVonNachLängeBundesfernstraßeBundeslandBreite VonLänge VonBreite NachLänge Nach
6259Heiligenhafen-OstHeiligenhafen-Mitte3.1A1SH54.3628011.0098054.3611010.96360
6231Heiligenhafen-MitteGremersdorf3.8A1SH54.3611010.9636054.3317010.93340

The first hiccup

When I first ran the script, Python threw a KeyError for “Länge Von”.
I instantly thought: “Ha! Must be the Umlaut again.”
But nope. The real reason? The Excel file had a first line describing the dataset version — something like:

Version 157, gĂźltig ab 01.10.2025

A quick detour: What’s the Mauttabelle anyway?

If you’re not from Germany, the word “Mauttabelle” probably sounds like something between mathematics and motorways — and honestly, that’s not too far off.

In short, the Mauttabelle is Germany’s official toll table for highways (Bundesautobahnen) and major roads (Bundesstraßen).
It lists every road segment where truck tolls apply — including details like:

ColumnMeaning
Abschnitts-IDThe unique ID of the road segment
Von / NachThe start and end locations (often junction names or exits)
LängeLength of the segment in kilometers
BundesfernstraßeThe official road number (like “A1” or “B27”)
BundeslandThe federal state where the segment is located
Breite Von / Länge VonCoordinates of the segment’s starting point (latitude/longitude)
Breite Nach / Länge NachCoordinates of the segment’s endpoint

The fixed code

Here’s the version that worked perfectly — and it’s still just a few lines long.

import pandas as pd
import geopandas as gpd
from shapely.geometry import Point

# file paths
excel_path = "./data.xlsx"
output_geojson = "./points.geojson"

# read the Excel file, skipping the first row with metadata
df = pd.read_excel(excel_path, skiprows=1)

# show the columns so we know what’s inside
print("Columns: ", df.columns.tolist())

# create a GeoDataFrame using longitude (Länge) and latitude (Breite)
gdf = gpd.GeoDataFrame(
    df,
    geometry=gpd.points_from_xy(df["Länge Von"], df["Breite Von"]),
    crs="EPSG:4326"
)

# export to GeoJSON
gdf.to_file(output_geojson, driver="GeoJSON")

print("success: ", output_geojson)

Quick install reminder

If you’re new to this, make sure you have the right Python packages installed:

pip install pandas geopandas shapely openpyxl

That’s it. Now you’ve got everything you need to turn an Excel sheet into a map layer.

The best part — seeing it come alive

After running the script, I opened points.geojson in QGIS —
and suddenly all those 137101 lines of Excel data were dots along the major streets in Germany
It’s such a small thing, but that moment when your table becomes geography… that’s the spark that keeps us all in GIS, isn’t it?

maps of mautknoten in Germany

Final thoughts

What I love about these small #30DayMapChallenge projects is how they remind me that GIS doesn’t have to be heavy or intimidating.
Sometimes it’s just a quick Python script and a bit of data wrangling — and you end up learning something along the way (like, oh, always check for that sneaky first line in Excel files 😅).

So if you’ve got some coordinate columns lying around, give it a go.
Turn them into a map.
You’ll be surprised how satisfying it is.

4 1 vote
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Inline Feedbacks
View all comments