Vai al contenuto

The Winter Catch: Mapping Italy’s 1-Hour Alpine Reach

Whenever we see an infographic about the Milano-Cortina 2026 Olympics, we see maps, a lot of maps. In these days of Olympic enthusiasm, an article from The Washington Post may have attracted the interest of chartography enthusiasts. "Explore where Winter Olympic sports are most accessible across the U.S.", with maps by Dylan Moriarty and Kati Perry and reporting by Emily Giambalvo, explores the accessibility of winter sports facilities across the USA to understand the real impact of these sports, which we only see at elite level every four years.

In this post, we reverse-engineer a classic "catchment analysis." We aren't just looking at where the rinks and slopes are, but we are asking: How many Italians can actually reach them in an hour? and we try to find answers using QGIS and available open data on facilities location and population distribution.

Learning Objectives

  • Network Analysis: Generate drive-time isochrones with the ORS plugin.

  • Data Integration: Handle both Vector (from OpenStreetMap) and Raster (from WorldPop) datasets.

  • Spatial Statistics: Use Zonal Statistics to aggregate population counts.

  • Comparative Analytics: Evaluate the "diversity" of sports across different regions.

The Toolkit: Data & Plugins

Data/Plugin Source Purpose
ORS Tools Plugin QGIS Plugin Manager Calculates driving-time isochrones.
Winter Sports facilities OpenStreetMap (Overpass) Locations of hockey, skating, bobsleigh, etc.
Population Raster WorldPop.org 100m resolution population density for Italy (ref.2020).
Administrative Borders ISTAT To define the national study area.

Step-by-Step Workflow

1. Gathering the "Ice and Snow" Data

We will extract all winter sports facilities from OpenStreetMap. In QGIS, use the QuickOSM plugin with the following OSM Key/Value pairs:

Key Value WikiOSM Geometry
sport bobsleigh Doc Node, Way, Closed Way
sport curling Doc Node, Closed Way
sport hockey Doc Node, Closed Way
sport ice_skating Doc Node, Closed Way
sport ski_jumping Doc Node, Way, Closed Way
sport biathlon Doc Node, Way, Closed Way
piste:type nordic Doc Way, Closed Way
piste:type downhill Doc Way, Closed Way

... or run a query in Overpass Turbo. Here's an example for downhill facilities:

/* Extracting downhill ski facilities in Italy */
[out:json][timeout:2500];
// fetch area “Italy” to search in
{{geocodeArea:Italy}}->.searchArea;
// gather results
nwr["piste:type"~"downhill"](area.searchArea);
// print results
out geom;

Tip: For linear features like cross-country skiing tracks, use Vector > Geometry Tools > Extract Specific Vertices (Index 0 and -1) to identify the entry points (gateways) of the tracks. For polygonal features, use Vector geometry > Centroids. Hence, copy and paste newly created points geometry inside the Overpass-derived point geometry layer of the corresponding sport type.

2. The 60-Minute Radius (Isochrones)

  • Open ORS Tools > Isochrones > Isochrones from Point-Layer

  • Input: Your points (hockey rinks, ski gateways, etc.).

  • Travel Mode: driving-car

  • Dimension: time

  • Comma-separated ranges: 60 (minutes)

  • Location type: destination

3. Preparing the population data

Download the WorldPop Italy 2020 raster. Each pixel represents the number of people living in that 100m x 100m area. Ensure your project is set to EPSG:32632 (UTM 32N) to ensure that area-based calculations remain accurate. Project the layer accordingly.

4. Spatial analysis

This is where we turn geometry into meaningful insight.

Calculate the national population

To know the percentage of people reached, we need the total population of Italy as seen by our raster.

  • Tool: Processing Toolbox > Raster Layer Statistics.

Note: Look for the SUM value in the HTML output. (Let's assume PopTotal​≈59,000,000).

Zonal statistics

We want to "sum" every person (pixel) inside our isochrones.

  • Run Processing Toolbox > Zonal Statistics

  • Input layer: isochrones calculated in the previous step.

  • Raster layer: WorldPop raster.

  • Output column prefix: pop_

  • Statistics to calculate: Sum

Your attribute table now shows exactly how many people live within an hour of each facility.

5. Defining accessibility indexes

Open the Field Calculator in the Attribute Table of the isochrones to create our performance indicators:

  • National Coverage (%)

How much of Italy is "served"?

Expression: "pop_sum" / 59000000 * 100

  • Population Density (People/km²)

To understand if the rink is in a high-density urban area or a low-density mountain area:

Expression: "pop_sum" / ($area / 1000000)

[UNDER CONSTRUCTION]

6. Comparison with 2026 Italian athletes hometown

Query WikiData

SELECT ?athlete ?athleteLabel (GROUP_CONCAT(DISTINCT ?eventLabel; separator=", ") AS ?events)
WHERE {
  {
    SELECT DISTINCT ?athlete ?event WHERE {
      # 1. Start with the most restrictive filter: Italian Citizens
      ?athlete wdt:P27 wd:Q38 .

      # 2. Check for the specific Occupation (Olympic athlete)
      ?athlete wdt:P106/wdt:P279* wd:Q50995749 .

      # 3. Connect to the 2026 Winter Olympics hierarchy
      ?event wdt:P361* wd:Q4630399 .
      { ?event wdt:P710 ?athlete . }
      UNION
      { ?athlete wdt:P1344 ?event . }
    }
  }

  # 4. Fetch labels outside the complex logic to prevent timeouts
  SERVICE wikibase:label { 
    bd:serviceParam wikibase:language "[AUTO_LANGUAGE],it,en". 
    ?athlete rdfs:label ?athleteLabel .
    ?event rdfs:label ?eventLabel .
  }
}
GROUP BY ?athlete ?athleteLabel
ORDER BY ?athleteLabel