This is a portolan catalog version of https://developer.trimet.org/gis/ - taking the static data layers there and making them fully cloud-native and interactive.
All existing bus and rail lines. 200 LineString features covering the TriMet
service district in the Portland, Oregon metropolitan area, published by TriMet
as tm_routes and last updated at the source on
July 13, 2026.
Every fixed-route alignment TriMet operates, bus and rail together, as one line per route and direction. 200 features covering 179 bus, 13 MAX, 4 streetcar, 2 commuter rail and 2 aerial tram segments.
The frequent flag marks TriMet's Frequent Service network β 51 of the 200
route-directions β which is the set of lines scheduled often enough that riders
are told not to consult a timetable.
Agents: see AGENTS.md for join keys, verified query recipes and the caveats that will otherwise cost you a wrong answer.
Preview it on a map, inspect the schema and license, and download the GeoParquet or PMTiles directly.
Read it straight from object storage β DuckDB fetches only the byte ranges it needs, so there is nothing to download first:
Or with GeoPandas:
styles/default.json reproduces the line weights and colors from TriMet's
published trimet-routes MapLibre style.rte is not a primary key. 87 route numbers appear twice, once per
direction. The key is (rte, dir). A GROUP BY rte that forgets this
double-counts every two-way route.frequent is the only
service-level hint, and it is a flag rather than a frequency. Use the
GTFS feed for anything time-based.LINESTRING and 109 are
MULTILINESTRING, so a route can be several disconnected pieces. Functions
that assume a single linestring will silently misbehave β see the quirks.rail-lines
is generalized for display and carries per-line colors; the MAX geometry here
is the operational alignment.Column descriptions are TriMet's own, taken verbatim from
meta_tm_routes.shtml. The same text is carried in
table:columns in collection.json.
The PMTiles layer is named routes. Styles reference it as ../routes.pmtiles,
so they load unmodified against this directory.
Produced by TriMet GIS (4012 SE 17th Ave, GIS3,
Portland, OR 97202,
gis@trimet.org) and distributed at
developer.trimet.org/gis as tm_routes.
The originals are linked as assets and are the authoritative copy: Shapefile Β· KML Β· Metadata
This collection was produced by converting TriMet's Shapefile to GeoParquet,
keeping its native EPSG:2913 (NAD83(HARN) / Oregon North (ft)), and to PMTiles in
WGS84 for display. No features were added, removed or edited. The exact commands
are in tools/convert.py.
This catalog is generated, and both halves are open source: the catalog at
cholmes/portolan-catalog-trimet and the
data browser at
cholmes/trimet-data-browser. If something here is wrong or
could be better β a description, a column definition, a query, a style β
open an issue or send a pull request. Corrections to
the underlying data go to TriMet at gis@trimet.org.
TriMet distributes these datasets free of charge, but the terms of use do not
grant redistribution rights. Section 4 of TriMet's
Terms of Use reserves
reproduction, modification, distribution and republication of site Content
without written consent; the redistribution license in section 5 covers the Web
Services API, not these GIS downloads. The collections therefore declare
"license": "other" with a link to those terms, rather than claiming an open
license the source does not offer.
Practically: use the data, and contact gis@trimet.org before redistributing it or building a product on it. If you need transit data under clear open terms, TriMet's GTFS feed is the better starting point.
geometry| binary |
| Feature geometry, WGS84 lon/lat. |
geometry_bbox | struct<xmin: float not null, ymin: float not null, xmax: float not null, ymax: float not null> | GeoParquet 1.1 covering column, for row-group pruning. Same projected feet as the geometry. |