Distance and CO2 ​

Every segment in the API carries the distance one passenger travels on it and the CO2 that passenger's trip emits, and this page explains how both figures are made.

What the figures are ​

distance (in km) and co2 (in kg) are fields on every Segment, wherever segments appear: timetable journeys from journeys, offers from journeyOffer and their parts, booked offer parts, and the segments of a JourneyOrderItem on an order.

  • Per passenger. Each figure is for one passenger. Multiply by the number of passengers for a party.
  • Per segment. A journey's total is the sum of its segments, and unknown if any segment is unknown.
  • Null means unknown. A figure is null when we can't compute it, for example for a station we hold no coordinates for. It is never 0.
  • Round for display. value is not rounded for display: distance comes to the meter and CO2 to the gram. Round it yourself.

Every figure is modeled, and no figure says how it was made. This page is the method to point travelers at.

Reading them from the API ​

Both fields are a Quantity: a value and the unit to print after it ("km" for distance, "kg" for CO2). Treat unit as a display symbol, not a closed set.

Example: Distance and CO2 on an offer's segments
graphql
query JourneyOffer {
  journeyOffer(
    journeyId: "c0b652bb-ff2a-4dea-80f0-24f8f5333d36"
    passengers: [{ type: ADULT }]
  ) {
    itinerary {
      ... on SegmentCollection {
        segments {
          origin {
            name
          }
          destination {
            name
          }
          distance {
            value
            unit
          }
          co2 {
            value
            unit
          }
        }
      }
    }
  }
}
query JourneyOffer {
  journeyOffer(
    journeyId: "20080268-899b-4d1a-8aa1-9d63e89117e4"
    passengers: [{ type: ADULT }]
  ) {
    itinerary {
      ... on SegmentCollection {
        segments {
          origin {
            name
          }
          destination {
            name
          }
          distance {
            value
            unit
          }
          co2 {
            value
            unit
          }
        }
      }
    }
  }
}
json
{
  "data": {
    "journeyOffer": {
      "itinerary": [
        {
          "segments": [
            {
              "origin": { "name": "Stockholm Central" },
              "destination": { "name": "Göteborg Central" },
              "distance": { "value": 455.4, "unit": "km" },
              "co2": { "value": 1.157, "unit": "kg" }
            }
          ]
        }
      ]
    }
  }
}
{
  "data": {
    "journeyOffer": {
      "itinerary": [
        {
          "segments": [
            {
              "origin": { "name": "Stockholm Central" },
              "destination": { "name": "Göteborg Central" },
              "distance": { "value": 455.4, "unit": "km" },
              "co2": { "value": 1.157, "unit": "kg" }
            }
          ]
        }
      ]
    }
  }
}

Distance ​

A segment's distance is the track distance between its two stations, as reported by the timetable or the operator. When there is none, we estimate it from the straight lines between the train's stops × 1.13, or from the straight line between the two stations × 1.25 when the stops are unknown. The multipliers make up for the curves and detours of the track.

Once we have a track distance for a pair of stations, we keep it and reuse it in both directions, whichever operator sells the journey.

How the multipliers were calibrated
Applied toFactorEvidence
The sum of straight lines from stop to stop× 1.13Best single value over 150 legs in 27 countries. The per-leg median is 1.131, and with 1.13, 89% of legs are within ±10%. Country medians run from 1.03 (EE) to 1.26 (CZ), so the error is about ±10% by country.
The straight line between a segment's two ends× 1.25Median of 152 legs (1.247). One value for every country, because a line's detours follow the terrain, not the border.

The reference track distances for this calibration come from OpenRailRouting on OpenStreetMap. They were first checked on 18 legs against track distances reported by the timetable or operator in Norway, Germany, Sweden and the UK: median ratio 1.0005, every leg within −2.1% to +1.2%.

CO2 ​

Every factor is in g CO2e (CO2 equivalent) per passenger-km, for one passenger at average occupancy. It is well-to-wheel: running the vehicle plus producing its energy or fuel. Building trains, ships and track is not counted.

We use our own factors in every country rather than the figures operators publish, because operators measure different things. Some count building the trains and track, and others leave it out. Some divide a train's emissions by its seats, as if every seat were taken, and others by the passengers actually on board. Side by side, their figures would not compare.

Buses and ferries have one factor each. Trains have a factor per country, and a train that crosses a border is weighted by the distance it runs in each country. The CO2 is the distance × the factor, kept to the whole gram.

Rail, per country ​

A country's rail factor depends on how much CO2 its power stations emit and how much of its intercity traffic still runs on diesel. Electric trains carry the emissions of the power they draw, at the country's own generation mix in 2024. Diesel trains carry a fixed 60 g per passenger-km. The two are weighted by the country's diesel share.

The electricity figures come from Ember, a UK not-for-profit that publishes yearly electricity data for every country.

How the rail factor is calculated

factor = (1 − d) × E × L × I + d × D

InputValueWhat it isSource
E0.07 kWh/pkmElectricity an intercity train draws from the grid per passenger-km, at about half occupancy. Median of intercity measurements brought to grid intake (range 0.045–0.095). Regional trains use the same value, although they run 1.5–2× higher, because the train type is not reliably known per segment.KTH, Andersson & Lukaszewicz 2006 (X2000 0.077, Signatur 0.079); DB UmweltMobilCheck Grundlagenbericht 2019 (IC, ICE ≤200 km/h); SBB reporting 2025 (Fernverkehr 5.94 kWh/100 pkm); SJ fleet average via Travel & Climate v5.1; EEA TERM 2020, table A1.7
L1.04High-voltage transmission loss between the power station and the railway's grid intakeKTH 2006 (about 4%); Eurostat transmission losses 1–3.4%
Iper countryLifecycle emissions per kWh of the country's own electricity generation in 2024, imports excludedEmber, Yearly Electricity Data (files dated 22 Sep 2026, CC BY 4.0)
dper countryShare of intercity passenger-km that runs on dieselper country, below
D60 g/pkmIntercity diesel train, well-to-wheelCOWI for DSB 2025: IC3 53.2, IC4 72.2. ORR 2024-25: CrossCountry 66.5, Grand Central 66.5, Chiltern 49.0 (converted from tank-to-wheel with the DESNZ 2025 gas-oil factor, × 1.227)
CountryFactor (g CO2e/pkm)Grid intensity 2024 (gCO2e/kWh)Diesel shareBasis for the diesel share
Austria7.5103.4570intercity is electric
Belgium9.2126.9310intercity is electric
Bulgaria22.8279.0590.062all services, gross tonne-km 2021 (UIC RAILISA, BDZ)*
Croatia27.2170.5270.31all services, gross tonne-km 2024 (Eurostat); Zagreb–Split is diesel south of Oštarije
Czechia36.2414.1810.204all services, gross tonne-km 2024 (Eurostat)*
Denmark37.3132.1670.55DSB long-distance and regional passenger-km 2025 (DSB Annual Report)
Estonia60.0344.1651long-distance lines are diesel (IRG-Rail 2026; 225 km electrified)
Finland4.966.9050intercity is electric
France2.940.3370intercity is electric
Germany24.7339.8730intercity is electric
Greece29.6321.8060.169all services, train-km 2024 (IRG-Rail)*
Hungary17.6183.8940.091all services, gross tonne-km 2024 (UIC RAILISA, MÁV)*
Ireland60.0270.7501Irish Rail intercity is all diesel; only DART is electric (NTA 2023)
Italy20.5281.4350intercity is electric
Latvia60.0134.5211long routes are diesel (Vivi)
Lithuania40.4116.0970.62all services, gross tonne-km 2024 (Eurostat)
Luxembourg9.2125.8280intercity is electric
Netherlands18.3250.7680intercity is electric
Norway7.929.6430.1Nordlandsbanen, 9–13% of long-distance passenger-km (SSB table 10484)
Poland44.3608.4680intercity is electric
Portugal8.1110.6390intercity is electric
Romania29.9259.6970.267all services, gross tonne-km 2017 (CFR Călători)*
Slovakia18.797.1880.219all services, gross tonne-km 2022 (Eurostat)*
Slovenia35.4230.4930.43all services, gross tonne-km 2024 (Eurostat)*
Spain13.5146.2580.057all services, gross tonne-km 2024 (Eurostat)*
Sweden2.534.9080intercity is electric
Switzerland2.534.5920intercity is electric
United Kingdom29.0216.4730.3intercity operators 21–38% (ORR 2024-25, tables 6103/6108)

* No source splits intercity from regional there, so the all-services share is used. It likely overstates intercity trains.

Factors are shown rounded to 0.1 g. The CO2 is computed from the unrounded factor.

When Ember publishes final data for the next year, we update every country's grid intensity and the default. The method stays the same.

Other modes and the default ​

ValueSource
Night train× 1.2 on the rail factor the segment would otherwise get (country or border-weighted)UIC Night Trains 2.0 (DB International for UIC, 2013); European Parliament TRAN study 2017; Back-on-Track 2022. Range 1.0 (couchettes) to 2.0 (2-berth sleepers)
Bus and coach, night buses included30 gUBA, TREMOD 6.71B (10/2025): long-distance coach (Linienbus Fernverkehr) 2024, 53% occupancy. Cross-checks: ADEME 33, DESNZ 2025 34
Ferry, per foot passenger36 gFraunhofer ISI and CE Delft for the EEA (2020), table 7.6: RoPax ferries 2018, 35.9 g, from EU MRV fuel reporting
Default: a country not in the table, or unknown15.4 gThe rail calculation with Ember's EU-27 grid intensity for 2024, 211.647 gCO2e/kWh, and no diesel