Global Ski Atlas

Improve the data

How Global Ski Atlas Data Works: From OpenStreetMap to the Map

September 10, 2026 · 12 min read

Follow Bristol Mountain from OSM way 320434895 through GeoParquet into the maps, charts, and downloads.

The worked example is Bristol Mountain, south of Canandaigua in the Finger Lakes. In the current GeoParquet it has 39 downhill ways, 6 lifts, and 149 skiable acres. Those figures come from OSM way 320434895, the pistes and aerialways attached to it, and one analyzed row in ski_areas_analyzed.parquet. The 3D scene on the right is that same package on a heightfield. If a trail is missing in OSM, it is missing here after the next ingest.

Bristol in 3D. Open the playable scene.

The 2D map is the wiki winter basemap with the same PMTiles pistes and lifts the rest of the site uses. Pan it. After a pipeline run, tagged objects show up here. Keep this view next to iD or JOSM when a count moves. The rest of the page follows this hill through extract, analyze, parquet, and the pages that read the table.

Bristol on the wiki 2D map. Same layers as the atlas wiki.

Step 1. Start from OpenStreetMap

Resort websites count mountains in different units: gladed acres, summit-to-base vertical you cannot ski in one run, trail totals that split every pitch into named segments. OSM is the shared geometry: a landuse=winter_sports polygon, piste:type=downhill ways, and aerialway=* lifts anyone can inspect. Global Ski Atlas does not keep a private ski graph. We ingest those objects, apply the same spatial rules in every region, and publish the result on the map, in Ski Resort Facts, and on Download Data.

Bristol's ski-area object is OSM way 320434895. The tags on that way today are landuse=winter_sports, leisure=sports_centre, name=Bristol Mountain Ski Resort, the resort website, Wikidata, and Wikipedia. That is the record the extract job keys on. Trails and chairs live as other ways inside or next to this polygon. If this way is missing or unclosed, Bristol never becomes a row. The tagging walkthrough for drawing that kind of object is how to tag a ski resort in OpenStreetMap.

MapTiler aerial and OSM way 320434895. The table is the live tag set from the OSM extract saved with this post.

Step 2. Extract nearby pistes and lifts

Raw planet files are huge. The jobs listed on Download Data pull winter-sports areas from a Geofabrik extract, then take OSM features within about 2 km (osm_nearby), then split out piste and lift geometries. On Bristol that nearby grab is messy on purpose: pistes.parquet currently has 43 rows whose Ski Area field is Bristol Mountain Ski Resort, and lifts.parquet has 84. Analyzed totals are 39 downhill trails and 6 lifts. The extra lift rows are other OSM ways that sat inside the search window (unnamed lines, non-aerialway leftovers) and still inherited the ski-area name. The analyze step is what keeps Galaxy Express and Lunar Launch and drops the junk.

Named downhill ways in that extract include Sunset Way, Upper Meteor, Beta, Orion's Belt, Morning Star, Lower Infinity, and Hale Bopp, most of them already tagged piste:lit=yes. The chairs in the lift file include Sunset Double, Galaxy Express Quad, Morning Star Quad, Rocket Triple, Comet Express Quad, and the Lunar Launch carpet. Those names are OSM, copied forward. The map on the left is aerial plus the same ski PMTiles the wiki uses, so you can see the lines the extract is trying to attach to the teal polygon from step 1.

Aerial plus atlas piste and lift tiles. Green, blue, and black follow American piste:difficulty.

Step 3. Analyze one hill under the same rules

Analyze attaches counts to the winter-sports geometry. For Bristol the current row says 759 acres inside the OSM polygon (total_area_acres) and 149 acres of skiable terrain (skiable_terrain_acres). The first number is the closed way, woods and parking included. The second is downhill geometry used as a proxy for what you can ski. downhill_trails is 39. Difficulty breaks out as 1 novice, 11 easy, 22 intermediate, 4 advanced, 1 expert. lift_types is chair lift: 5, magic carpet: 1. Night skiing is yes, with 36 lit pistes. Elevation columns on this row are still empty, so vertical drop is empty too. That is the file, not a guess from the brochure.

The bar chart is those five difficulty columns from ski_areas_analyzed.parquet, loaded in the browser from the same S3 object the download page links. Bristol is a blue hill in that table: more than half the tagged runs are intermediate. A marketing pie that paints everything "more difficult" is using a different unit.

Difficulty mix for Bristol, read from the analyzed parquet at page load.

Step 4. Put Bristol next to the rest of New York

The same parquet has 28 New York downhill areas with at least one trail. Gore sits at 119 trails and 749 skiable acres. Whiteface is 98 and 422. Holiday Valley 68 and 232. Bristol is 39 and 149, near Catamount (40 / 129) and Holimont (42 / 84). The scatter plots downhill_trails against skiable_terrain_acres for every New York row in that file. Teal is Bristol. If OSM grows a new named run at Bristol, the next combine_regions job should move the teal dot right by one trail, and maybe up a few acres if the new way adds area.

The jobs stay mechanical so Japan, Colorado, and the Finger Lakes share the same columns. About covers the cloud side (containers, object storage, catalogs). This page is what those jobs mean for one hill: one row, neighbors you can plot.

New York downhill areas from ski_areas_analyzed.parquet. Bristol is the teal point.

Step 5. Publish GeoParquet, then reuse the table

Processed output lands as GeoParquet on S3. Parquet is columnar, so facts pages can scan trail counts without parsing a planet file. GeoParquet adds geometry so maps can draw the same features. The four public files are ski_areas_analyzed.parquet, ski_areas.parquet, lifts.parquet, and pistes.parquet, linked from Download Data. The website, the wiki, comparison, and those downloads are supposed to read that set.

The table on the right is a slice of Bristol's analyzed row as hyparquet returns it in this browser: ids, acres, trails, lifts, mix, night skiing, website. total_trail_mi, longest_trail_mi, and avg_trail_mi are all 0.23 on this build. Thirty-nine trails cannot average 0.23 miles and also sum to 0.23 miles. That is a pipeline bug you can see in the file, the same as a missing chair in OSM.

Selected columns from Bristol's row in ski_areas_analyzed.parquet.

Step 6. What the products actually draw

Once the files are public, the surfaces split. The interactive map draws resort locations and, in closer, trail and lift tiles. Resort comparison and tier rank read the same stats columns. The wiki page for a hill sits on that structured row. Ski resort stats explained is how to read the columns. A tagging fix in OSM can show up on all of those after the next regional run. Emailing a one-off correction to this website would update one screenshot and leave the parquet stale.

The map here is the wiki 2D view again, because that is the product that most closely matches the parquet geometry: winter contours, the ski-area outline, difficulty-colored pistes, orange lifts. If this map and the analyzed row disagree, start with OSM, then the extract, then analyze. The website is last.

Same wiki 2D stack as the intro. This is what comparison and facts are summarizing.

Step 7. When a number looks wrong

Most "atlas bugs" are upstream or late. A missing hill usually means no coherent winter-sports geometry, or no pistes and lifts that survive inclusion rules. Tiny acres against a brochure usually means incomplete downhill ways or a polygon that stops at the lodge. A weird mix usually means missing piste:difficulty or a regional scheme you did not expect. A stale lift usually means OSM still has a chair that was cut, or the pipeline has not ingested the edit yet.

Work Bristol in that order. Search it on the map and zoom until trails should appear. Read the row in Ski Resort Facts or comparison. Open way 320434895 and the named pistes. Download the parquet if you need the machine-readable proof. Fix OSM with the tagging guide, then wait for the next build. The same loop updates OsmAnd, Wikipedia maps, and this atlas together. It is slower than editing a private database.

Step 8. Draft the wiki paragraph

The wiki lead is a separate job from analyze. generate_resort_copy_bedrock.py in the data repo reads the parquet row, sets a layout tier from size, then gathers Wikipedia summaries and DuckDuckGo snippets (Brave too, if a key is set). Those snippets go through miners, a curator, a Nova draft, a critic, and an editor, then a trim or expand pass so the word count lands in the plate band. Small hills are 90–100 words. Medium is 140–175, large 180–220, mega 520–680. Bristol's 39 trails and 149 skiable acres fall in that script's small_hill bucket, so you get the short plate. The markdown is bulk-loaded by wiki-bulk-update-resort-content.js. A person with a wiki account can still replace it.

The writer prompt says not to recap vertical, lift counts, acreage, or trail counts. Those columns already sit next to the prose as resort facts. The paragraph should come from the research bullets: place, landform, history, and on bigger plates maybe a pass or a season note. Small tier only runs history and landform miners, so the box is a thin web pass under a 90-word cap. South Bristol and the Finger Lakes are the place facts the searches are for. Trail mix stays in the parquet table from step 5 and on the wiki facts panel.

Bristol Mountain Ski Resort in South Bristol, New York, within the Finger Lakes region, offers a unique skiing experience. Its location provides a distinct backdrop, contrasting with typical alpine settings. Skiers enjoy the blend of natural beauty and recreational opportunities. The resort's trails and facilities cater to various skill levels, ensuring enjoyment for all. Bristol Mountain's integration into the local community adds charm and accessibility, making it a favored destination for both local and out-of-town skiers. The resort stands out for its scenic surroundings and community connection, enhancing the overall skiing experience.

Small-plate wiki lead for Bristol (target 90–100 words). Stats stay in the facts panel on the wiki page.

Takeaway

The site is the front of that path: OSM geometry in, the same spatial jobs in the middle, GeoParquet and maps out, then a sized wiki lead that is not supposed to repeat the facts table. Bristol is small enough that you can hold the polygon, the 39 ways, the 6 lifts, and the parquet row at once. When a local hill looks thin, ask which of those objects is missing. Start on the map, check Download Data, and edit OSM when the geometry is wrong.

Back to way 320434895. The analyzed row is derived from this polygon plus the pistes and lifts inside the extract window.

← Back to all articles