Proposal:Freight Terminal
| Freight Terminal | |
|---|---|
| Proposal status: | Proposed (under way) |
| Proposed by: | Takje |
| Draft started: | 2026-04-14 |
| RFC start: | 2026-04-14 |
Problem Statement
Freight terminals are the operational sites where cargo is loaded, unloaded, or transferred between transport modes. They are often owned by one company and fenced off. They can be recognised from the typical stacks of containers, warehouse buildings, but also liquid storage facilities, or bunkers.
These freight terminals occur most commonly in ports but are not port exclusive. They are often tagged as ports in OpenStreetMap, but not consistently. This also creates duplication since often they are already part of a wider port tagged region. Terminals are frequently tagged as their main mode (e.g. port, railway or air), but often are connection points and the other modes are just as important. It is typically unclear what other modes they connect to. Other times they are tagged as container_terminal, but often their functions are wider than just containers. Here are some examples to illustrate the problem:
- Hutchison Delta 2 Terminal in Maasvlakte uses
landuse=industrial+industrial=port+cargo=container. Theindustrial=porttag is reused here for a single operator's site within a much larger port. It is unclear from the tagging that this terminal has access to the road, barge and rail network. The terminal is part of the Port of Rotterdam, but the encompassing port area is not explicitly tagged. - Port Newark Container Terminal in New Jersey uses
landuse=industrial+industrial=portwithout any further indications other than the word terminal in the name. It is also part of the wider Port Newark-Elizabeth port tag. - MPET (MSC PSA European Terminal) in Antwerp's Deurganckdok is tagged only as
landuse=industrialwith a name. There is no indication from the tagging that it is a freight terminal at all. - PSA Noordzeeterminal, also in the Port of Antwerp-Bruges and this time tagged as
industrial=container_terminal - Genk Cargo Connect uses a combination of
industrial=port+port=cargo+railway=terminal. This is an intermodal terminal. That is already clearer from the tags, but they seem scattered. - Port of Dover - Eastern Docks is entirely tagged
landuse=industrial+industrial=port. This is correct for the port envelope but offers no way to express that it is also a single ro-ro/passenger terminal. - Brucargo is simply tagged as
landuse=industrial. No indication that this is a transport hub with warehouse capacities. - Terminal Container Athus is only tagged as
man_made=container_terminal. While this is also a transport hub that connects the road and rail network and offers storage and other terminal services.
None of these patterns clearly express the main role of a terminal: which transport modes connect to the terminal, and which cargo types it handles. The current tagging scheme also makes it virtually impossible to separate functions of the wider port areas from the individual terminal functions.
Proposal
Introduce terminal=yes as an additive marker for freight terminals, combined with two orthogonal namespaces: the existing cargo:* schema for cargo handled, and a new freight:mode=* namespace for transport modes connected.
Applies to areas (closed ways and multipolygons) and relations.
The proposal is strictly additive. No existing tag is deprecated, retagged, or replaced. Existing industrial=port, aeroway=aerodrome or railway=yard features that are also terminals simply gain terminal=yes. For new freight terminals not already tagged as ports, railway yards or airports, industrial=terminal is introduced as a peer to industrial=port. This also facilitates the tagging where a port can encompass multiple distinct terminals. The wider area is tagged with industrial=port, while the individual terminals can be tagged with industrial=terminal.
The terminal=yes marker does double duty: it classifies freight terminals and serves as a migration bridge. Large ports like Antwerp and Rotterdam are currently mapped as patchworks of industrial=port polygons without an encompassing envelope. terminal=yes can be added to those polygons immediately, and as port envelopes get drawn over time, individual polygons can migrate to industrial=terminal nested inside an industrial=port multipolygon without changing the marker's meaning. The bare terminal=* key is safe at the top level because terminal has a very logistic centric meaning and other uses are also logistics related (aeroway=terminal, amenity=ferry_terminal).
Rationale
A freight terminal is the operational unit where cargo is handed off between modes (ship to rail, truck to barge), or between transport and storage. It is smaller than a port (an envelope containing many tenants and operators) and larger than a single quay or dock. Most modern terminals are intermodal and multi-cargo.
Three things improve upon previous proposals:
terminal=yesis additive. Rather than introducing a competing top-level value or forcing retagging of existingindustrial=portfeatures,terminal=yessits on top of existing tagging.- The existing cargo=* schema is reused unchanged. The wiki already recommends semicolon separated lists (
cargo=container) for multi-value cases. - The
freight:mode=*namespace introduces similar semicolon keys for the second important characteristic.
Previous attempts
Two earlier proposals tried and failed: Combined transport terminal (2012, rejected as unclear) and Intermodal Terminal (2014, rejected on key namespace grounds and because there was no way to express which transport modes the terminal served). This proposal addresses the 2014 substantive objection directly via the freight:mode=* namespace, and avoids the namespace fight by being additive to existing industrial=* tagging.
Tagging
Base feature
For freight terminals that are not an existing port polygon:
landuse=industrial industrial=terminal terminal=yes name=* operator=* operator:wikidata=* website=*
For features already tagged as industrial=port that are terminals (or contain a single terminal coinciding with the port boundary), keep the existing tags and add:
terminal=yes
The terminal=yes marker is what makes a feature discoverable as a freight terminal regardless of whether it is also tagged as a port.
However, in the future recommend tagging separate terminals within a port with industrial=terminal while the surrounding port is tagged as a whole with industrial=port.
What to map
The terminal polygon should cover the operational footprint. This is the area cargo actively moves through. Concretely, this includes:
- The free-moving area for cargo (yard, container stacking, vehicle storage)
- Storage space (warehouses, silos, tank farms)
- Quay edges and the adjacent water surface used for berthing, for water-based terminals
- Rail sidings used for handling, for rail-connected terminals
- The gate and immediate access road, for road-connected terminals
- The apron and adjacent runway access, for air cargo terminals
It is bigger than a single quay (also covers storage and gates) and smaller than the port envelope (does not extend to other operators' areas, public roads, or unrelated industrial tenants). It is usually quite easy to separate given that there is a specific owner for this land and the area is typically protected with fences.
Cargo handled reuses cargo=*
Cargo is expressed using the existing cargo=* schema with semicolon-separated values for multi-cargo terminals. For terminals that handle a single cargo type, cargo=container is sufficient; terminals handling multiple types list them separated by semicolons, e.g. cargo=container;reefer;break_bulk. This matches the semicolon form documented on the cargo wiki page and the general OSM semi-colon value separator convention.
The values relevant to freight terminals are:
| Value | Meaning |
|---|---|
cargo=container
|
Standard ISO dry containers (20', 40', 45') |
cargo=reefer
|
Refrigerated containers |
cargo=tank_container
|
ISO tank containers |
cargo=dry_bulk
|
Coal, grain, ore, aggregates, fertiliser |
cargo=liquid_bulk
|
Chemicals, oils, LNG, vegetable oils |
cargo=ro_ro
|
Roll-on / roll-off such as vehicles, trailers, heavy plant |
cargo=vehicles
|
New or used vehicles handled as cargo |
cargo=break_bulk
|
Palletised, bagged, crated, project cargo or large unitized objects (e.g. wind turbine blades) |
cargo=passenger
|
Passenger handling (ferries, cruise) |
Transport modes use freight:mode=*
The transport modes a terminal actively serves are expressed with a new freight:mode=* key, using semicolon-separated values for terminals serving multiple modes, aligned with the cargo=* key. For example, a road/rail/barge inland terminal uses freight:mode=road;rail;barge; a deep-sea container terminal with full intermodal connections uses freight:mode=road;rail;barge;short_sea;deep_sea.
The values are:
| Value | Meaning |
|---|---|
freight:mode=road
|
Truck access, gate operations |
freight:mode=rail
|
Rail sidings with active handling |
freight:mode=barge
|
Inland waterway vessels |
freight:mode=short_sea
|
Coastal / intra-continental maritime |
freight:mode=deep_sea
|
Ocean-going vessels |
freight:mode=air
|
Air freight |
freight:mode=pipeline
|
Pipeline interconnection |
The barge / short_sea / deep_sea distinction is commercially meaningful and heavily used in the industry. It reflects the terminal's designed and typical traffic, sourced from operator documentation, rather than a physical property observable from imagery.
Differences and disambiguation with other terminal tags
Several existing tags overlap partially with freight terminals. This section clarifies how terminal=yes relates to each, and where it adds value.
industrial=container_terminalis in active use (e.g. PSA Noordzeeterminal in the Port of Antwerp-Bruges) but undocumented on the wiki. It describes only the cargo type and says nothing about connected transport modes, operator footprint, or whether the site handles more than containers. Most modern container terminals do (reefer, break bulk, occasional project cargo). Existing features can be enriched by addingterminal=yes, the relevantfreight:mode=*tags, and additionalcargo=*sub-keys where applicable. New mapping should preferindustrial=terminal+cargo=container+ transport modes. No automated migration is proposed.
man_made=container_terminal: The general tag for container transshipment facilities, documented on the wiki alongsiderailway=container_terminalin a shared "Container terminal" section. The wiki describes it as a transshipment facility for shipping containers between ships and rail, or rail and truck, recommends area mapping, and pairs it withlanduse=industrial. In practice it is used on features such as Terminal Container Athus. The limitation is that it captures only the cargo type and leaves the connected transport modes implicit. The wiki text hard-codes a ship/rail/truck assumption that does not hold for barge- or pipeline-connected terminals and does not distinguish single-cargo from multi-cargo sites. The 2014 Intermodal Terminal proposal also argued on key-namespace grounds against placing transport terminals underman_made=*. New mapping should preferindustrial=terminalwith explicitfreight:mode=*andcargo=*tags. Existing features can be enriched additively withterminal=yesand the relevant sub-keys.
railway=container_terminal: The rail-specific variant, documented in the same wiki section as a tag for a container terminal that has to involve rail transport. It shares the same limitations asman_made=container_terminal: containers-only, modes implicit. Most rail container terminals are in fact intermodal road/rail/(barge) sites, whichindustrial=terminalcombined withfreight:mode=*can express directly. Existing features can be enriched additively withterminal=yes.
port=cargois an informal combination seen on some features (e.g. Genk Cargo Connect, cited in the problem statement). Superseded in practice byindustrial=terminal+freight:mode=*+cargo=*, which expresses the same intent more precisely and more completely. Not formally deprecated by this proposal.
industrial=portis the wider port envelope, typically containing multiple operators and tenants. A terminal is a single-operator operational unit within or alongside a port. See the proposal above for howterminal=yesrelates to existingindustrial=portfeatures and how new terminals inside ports should be tagged.
amenity=ferry_terminalis a point or building tag for the ferry passenger facility. Orthogonal to this proposal: a ro-ro/passenger site such as Port of Dover - Eastern Docks can carry both, withamenity=ferry_terminalon the passenger building andterminal=yeson the operational polygon covering the yard, quays and gates.
aeroway=terminalis the passenger building of an airport. Air cargo terminals (e.g. Brucargo at Brussels Airport) are physically and operationally separate from passenger terminals, typically located on a dedicated freight apron with their own warehouses and landside gates. They should be mapped withindustrial=terminal+freight:mode=airon the operational polygon, independently of anyaeroway=terminalpassenger building elsewhere on the airfield.
amenity=bus stationis a passenger bus terminal, out of scope.
Examples
MPET — MSC PSA European Terminal (Deurganckdok, Antwerp — deep-sea container):
landuse=industrial industrial=terminal terminal=yes name=MSC PSA European Terminal (MPET) alt_name=MSC PSA European Terminal short_name=MPET operator=PSA;MSC website=https://www.mpet.be/ freight:mode=road;rail;barge;short_sea;deep_sea cargo=container;reefer;break_bulk
Genk Cargo Connect (Albert Canal — replaces the homegrown port=cargo + railway=terminal combination):
landuse=industrial industrial=terminal terminal=yes name=Genk Cargo Connect website=https://genkcargoconnect.be/ freight:mode=road;rail;barge cargo=container
Port of Dover - Eastern Docks (existing industrial=port kept, terminal=yes added):
landuse=industrial industrial=port terminal=yes name=Port of Dover - Eastern Docks operator=Port of Dover freight:mode=road;short_sea cargo=ro_ro;vehicles;passenger
The amenity=ferry_terminal tag remains valid for the passenger building on the same site.
Impact on Data Consumers
This proposal is strictly additive and introduces no breaking changes.
- Renderers (standard layer, OpenSeaMap, etc.) require no changes. Existing
industrial=portpolygons continue to render as before. It is actively encouraged to have a wider area around the terminal tagged as port if the terminal has water access. Renderers may optionally introduce a distinct symbol forterminal=yesfeatures in the future; this is not required. - Editors (iD, JOSM, Vespucci) require no changes. Adding presets for
terminal=yes,freight:mode=*, and the cargo sub-keys would improve mapper experience but is not a prerequisite for the schema to be useful. - Data consumers and routers gain the ability to query for freight terminals by connected mode and cargo type, which is the primary motivation for this proposal. Use cases include freight routing, modal-shift analysis, and commercial intelligence applications.
- Backwards compatibility: all existing tags (
industrial=port,cargo=container,amenity=ferry_terminal,railway=yard) continue to function. No deprecation is proposed and no migration is required.
Features/Pages affected
New wiki pages to be created if approved:
Existing wiki pages to be updated with cross-references:
- Tag:industrial=port — note the relationship to
terminal=yesas an additive marker - Key:cargo — note extended use on freight terminal features
- Tag:amenity=ferry_terminal — note the relationship to
terminal=yesfor the operational footprint surrounding the passenger building - Tag:railway=yard — note that rail freight terminals may co-tag with
terminal=yes
External discussions
To be added: links to forum threads, mailing list discussions, and any related conversations.
- OSM Community Forum (tagging category): https://community.openstreetmap.org/t/rfc-feature-proposal-freight-terminal/143056
Comments
Please comment on the discussion page.