We provide free and weekly updated vector tiles for transit maps generated from the entire OpenStreetMap data, in various layouts. Currently we offer tiles for the following network types: tram, subway-lightrail, rail-commuter, (long distance) rail and the following layouts: geo, octi, octi-geo, orthorad.

The code for generating these tiles can be found on GitHub.

An example map is shown on this page. The example code can be used to quickly add our vector tiles to a Leaflet web map. See also our full example map.

We offer the following TMS endpoints:

URL Description Layout
https://loom.cs.uni-freiburg.de/tiles/tram/geo/{z}/{x}/{y}.mvtAll tram networks in OSMGeographical
https://loom.cs.uni-freiburg.de/tiles/tram/octi/{z}/{x}/{y}.mvtOctilinear
https://loom.cs.uni-freiburg.de/tiles/tram/geo-octi/{z}/{x}/{y}.mvtGeo-Octilinear
https://loom.cs.uni-freiburg.de/tiles/tram/orthorad/{z}/{x}/{y}.mvtOrthoradial
https://loom.cs.uni-freiburg.de/tiles/subway-lightrail/geo/{z}/{x}/{y}.mvtAll subway/lightrail networks in OSMGeographical
https://loom.cs.uni-freiburg.de/tiles/subway-lightrail/octi/{z}/{x}/{y}.mvtOctilinear
https://loom.cs.uni-freiburg.de/tiles/subway-lightrail/geo-octi/{z}/{x}/{y}.mvtGeo-Octilinear
https://loom.cs.uni-freiburg.de/tiles/subway-lightrail/orthorad/{z}/{x}/{y}.mvtOrthoradial
https://loom.cs.uni-freiburg.de/tiles/rail-commuter/geo/{z}/{x}/{y}.mvtAll commuter rail networks in OSMGeographical
https://loom.cs.uni-freiburg.de/tiles/rail-commuter/octi/{z}/{x}/{y}.mvtOctilinear
https://loom.cs.uni-freiburg.de/tiles/rail-commuter/geo-octi/{z}/{x}/{y}.mvtGeo-Octilinear
https://loom.cs.uni-freiburg.de/tiles/rail-commuter/orthorad/{z}/{x}/{y}.mvtOrthoradial
https://loom.cs.uni-freiburg.de/tiles/rail/geo/{z}/{x}/{y}.mvtAll long-distance rail networks in OSMGeographical
https://loom.cs.uni-freiburg.de/tiles/rail/octi/{z}/{x}/{y}.mvtOctilinear
https://loom.cs.uni-freiburg.de/tiles/rail/geo-octi/{z}/{x}/{y}.mvtGeo-Octilinear
https://loom.cs.uni-freiburg.de/tiles/rail/orthorad/{z}/{x}/{y}.mvtOrthoradial

const map = L.map('map');
map.setView({lat: 48.145, lng: 11.574}, 12);

var baseLayer = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
    maxZoom: 17,
    opacity: 1
}).addTo(map);

L.vectorGrid.protobuf("https://loom.cs.uni-freiburg.de/tiles/subway-lightrail/orthorad/{z}/{x}/{y}.mvt", {
    vectorTileLayerStyles: {
        "lines": function(properties, zoom) {
            return {
                lineCap: properties.lineCap,
                weight: properties.width,
                color: '#' + properties.color
            }
        },
        "inner-connections": function(properties, zoom) {
            return {
                lineCap: properties.lineCap,
                weight: properties.width,
                color: '#' + properties.color
            }
        },
        "stations": function(properties, zoom) {
            return {
                lineCap: properties.lineCap,
                weight: properties.width,
                color: '#' + properties.color,
                fillColor: '#' + properties.fillColor,
                fillOpacity: 1,
                fill: true
            }
        },
    }
}).addTo(map);