Skip to content

#30DayMapChallenge Day 2: Lines

Posted on:November 1, 2026 at 10:00 PM

Day 2 of the #30DayMapChallenge 2026.

Lines — A map challenge classic. Map with lines.

Few things make better lines on a map than railways. So for Day 2 I asked MapAI to draw the rail network of Greater Sydney, and then to do the same for London.

MapAI showing the Greater Sydney rail network: black railway lines radiating from the CBD, 275 blue station circles and a red dotted Greater Sydney boundary along the coast and harbour

The prompt

Let’s fetch all the train/railway/subway/light trail/metro stations within Sydney (use GCCSA boundary). Connect them using the railway lines. The lines are black, stations are medium sized blue circles, Sydney boundary is a red dotted line.

Yes, I typed “light trail” instead of “light rail”. MapAI worked out what I meant anyway.

What MapAI did

By the numbers, the Sydney map took:

Here is its evidence trail, in its own words where possible.

How it understood the question

The workflow

  1. Fetched the 2021 Greater Sydney GCCSA boundary from the Australian Bureau of Statistics.
  2. Fetched Overture railway stations, subway stations and light-rail stops within a bounding box around Sydney.
  3. Fetched Overture railway segments within the same bounding box.
  4. Kept the 275 stations covered by the GCCSA and the 2,927 railway segments that intersect it.
  5. Converted any station that was not a point into a representative point, and saved three styled layers.

The data

The SQL

This is the query behind the station layer. It takes the railway and subway stations covered by Greater Sydney, appends the light-rail stops, and uses ST_PointOnSurface so that stations mapped as areas still come out as a single dot:

WITH
  sydney AS (
    SELECT
      geometry
    FROM
      user_data.ingest_xsxypfvumiaw_abs_data_api_2d88f9f5
    WHERE
      gccsa_code_2021 = '1GSYD'
  )
SELECT
  s.primary_name AS station_name,
  s.class AS station_type,
  ST_PointOnSurface (s.geometry) AS geometry
FROM
  user_data.ingest_xsxypfvumiaw_frastructure_1a56fc41 s,
  sydney b
WHERE
  ST_Covers (b.geometry, s.geometry)
UNION ALL
SELECT
  s.primary_name AS station_name,
  'light_rail' AS station_type,
  ST_PointOnSurface (s.geometry) AS geometry
FROM
  user_data.ingest_xsxypfvumiaw_frastructure_df757218 s,
  sydney b
WHERE
  ST_Covers (b.geometry, s.geometry)

The railway layer is simpler: every segment that intersects the boundary (ST_Intersects), with a quick bounding-box check (&&) first.

Gaps and uncertainties

MapAI flagged two:

Same again, somewhere else

The nice thing about a map you made from a prompt is that the prompt is reusable. I ran the same for London by simply asking:

can you do the same for Camden, London

MapAI showing the rail network of Camden, London: black railway lines converging on King's Cross, St Pancras and Euston, 31 blue station circles and a red dotted Camden boundary

MapAI reused the method and the styling from the earlier turns and found the Camden boundary itself. This time it took 20 tool calls and just under 2 minutes (118 seconds), and came back with:

It also told me what it did not find. For Camden, there were no matching light-rail or tram stops. That kind of “here is what’s missing” note is exactly what I want from a tool like this.

What I noticed

Sydney’s network is a spider web. Almost every line runs into the CBD, and the stations string out along them like beads. The thick black patches are not mistakes: they are rail yards and sidings, where dozens of parallel tracks sit side by side.

Camden is the opposite story. It is a small borough, but the lines are dense, because three of London’s big terminals (King’s Cross, St Pancras and Euston) sit on its southern edge. Plenty of the lines on that map pass straight through Camden without a single stop.

Same prompt, two cities, two very different shapes.

Day 2 done. Tomorrow: polygons.

#30DayMapChallenge #mapai #madewithmapai