Mapped by Stubbs — Ortsdaten aus OpenStreetMap: Verfahren des Auszugs Mapped by Stubbs — place data from OpenStreetMap: how the extract is made Daten / data: © OpenStreetMap-Mitwirkende / OpenStreetMap contributors, Open Database License (ODbL) 1.0 — https://www.openstreetmap.org/copyright DEUTSCH Diese Datei beschreibt, wie wir aus OpenStreetMap die Ortsdaten erzeugen, aus denen Mapped by Stubbs Orte für Touren und Pausen wählt (Angebot nach ODbL 1.0, Abschnitt 4.6). Sie wird aus dem Quelltext des Auszugs erzeugt und ändert sich mit ihm. Was: ein Auszug für Deutschland, Österreich und die Schweiz mit den Orten, die für Stadtrundgänge und Pausen in Frage kommen — Cafés, Restaurants, Bars, Museen, Kirchen, Denkmäler, Parks, Plätze, Aussichtspunkte und Ähnliches. Wann: jede Woche automatisch, sonntags um 01:00 UTC. Wie: 1. Laden: Auszug „europe/dach“ der Geofabrik GmbH (download.geofabrik.de), geprüft über die MD5-Prüfsumme. Fehlt er, werden Deutschland, Österreich und die Schweiz einzeln geladen, gefiltert und zusammengeführt. 2. Vorfiltern mit osmium tags-filter und den Regeln am Ende dieser Datei; Knoten von Wegen und Teile von Flächen, die eine Regel trifft, kommen als Bestandteil mit. 3. Exportieren mit osmium export als GeoJSON: Punkte und Flächen, keine Linien. 4. Aufbereiten, je Objekt: - Verworfen werden Objekte ohne Namen (außer Parks, Gärten und Plätzen mit Wikidata-Eintrag), Ketten in der Gastronomie (Marke oder bekannter Kettenname), Stolpersteine und Gedenktafeln, Grenz- und Meilensteine, Wegkreuze und Bildstöcke ohne Wikidata-Eintrag, Straßen, Bahnanlagen, Grenzen und Routen, Orte (Dörfer, Stadtteile; Plätze bleiben) sowie alles, dem sich keine der Arten unten zuordnen lässt. Bei den übrigen historischen oder mit Wikidata benannten Objekten fallen außerdem Läden, Hotels, Dienstleister, Sportanlagen, Gewässer, Wald und Schutzgebiete weg. Doppelte Objekte zählen einmal; Orte in Kacheln außerhalb des Gebiets (Geofabrik-.poly) fallen weg. - Behalten werden nur diese Merkmale: name, name:en, wikidata, wikipedia, opening_hours, check_date, check_date:opening_hours, survey:date, website, contact:website, cuisine, brand, brand:wikidata, operator, heritage, religion, denomination, tourism, historic, amenity, leisure, man_made, natural, place, highway, area, memorial, building, addr:street, addr:housenumber, addr:postcode, addr:city, addr:country, outdoor_seating, diet:vegetarian, wheelchair, shop, gambling, microbrewery, brewery, diet:vegan, description, name:full, official_name, alt_name, start_date, architect, building:architecture - Lage: Punkte unverändert; Flächen als ein Punkt innerhalb der Fläche (polylabel) samt Fläche in Quadratmetern. Koordinaten auf 5 Nachkommastellen (etwa 1 m). - Kennung: osm-n (Knoten), osm-w (Weg), osm-r (Relation). - Art: eine der Arten unten, aus den Merkmalen abgeleitet. 5. Aufteilen in Kacheln von 0,25° × 0,25°. Nur Kacheln ganz im Gebiet gelten als vollständig; an der Grenze und außerhalb fragt unser Server stattdessen Geoapify (ebenfalls OpenStreetMap-Daten). 6. Prüfen und hochladen in einen nicht öffentlichen Speicher: Hat der neue Auszug weniger als 90 % der bisher vollständigen Kacheln oder weniger als 70 % der bisherigen Orte, bricht der Lauf ab und die Vorwoche bleibt gültig. Sonst wird zuerst alles hochgeladen, erst danach zeigt das Verzeichnis (manifest.json) auf die neue Fassung. Die vorige Fassung bleibt bis zum nächsten Lauf erhalten. 7. Wege für die Routenführung (nur in Läufen mit eingeschalteten Linien): zwei weitere Vorfilter (unten), Export als Linien. Behalten wird nur in der Nähe von Orten (Stadt 6 km, Kleinstadt 3 km, Dorf 1 km um den Ortspunkt) und je Zelle von 0,05° × 0,05°: Fußwege bis 60 m neben Flüssen und Kanälen oder bis 35 m neben Wasserflächen (höchstens 400 Wege, jeder dritte Stützpunkt) samt den Fluss- und Kanallinien (höchstens 200), dazu Fußgängerflächen und Plätze mit den Fußwegen bis 100 m daneben. Sie dienen nur der Linienführung unserer Touren und werden nicht angezeigt. Pausen-Arten (Merkmal amenity): cafe amenity=cafe restaurant amenity=restaurant bar amenity=bar, amenity=pub, amenity=biergarten Arten: cafe, restaurant, bar, pub, biergarten, museum, gallery, attraction, viewpoint, artwork, zoo, castle, monument, memorial, ruins, archaeological_site, city_gate, tower, church, cathedral, chapel, monastery, synagogue, mosque, place_of_worship, townhall, fountain, theatre, arts_centre, park, garden, square, peak, waterfall, cave, lighthouse, bridge, historic, heritage, landmark Quelltexte des Verfahrens: .github/workflows/osm-extract.yml scripts/osm-extract/filter.txt scripts/osm-extract/filter-lines-base.txt scripts/osm-extract/filter-lines-ways.txt scripts/osm-extract/build.mjs scripts/osm-extract/lines.mjs scripts/osm-extract/upload.mjs lib/places/osm-tags.js lib/places/tiles.js lib/places/lines.js ENGLISH This file describes how we derive the place data from OpenStreetMap that Mapped by Stubbs uses to choose places for tours and breaks (offer under ODbL 1.0, section 4.6). It is generated from the source code of the extract and changes with it. What: an extract for Germany, Austria and Switzerland with the places that suit city walks and breaks — cafés, restaurants, bars, museums, churches, monuments, parks, squares, viewpoints and the like. When: automatically every week, Sundays at 01:00 UTC. How: 1. Download: the "europe/dach" extract from Geofabrik GmbH (download.geofabrik.de), verified by its MD5 checksum. If it is missing, Germany, Austria and Switzerland are downloaded, filtered and merged one by one. 2. Pre-filter with osmium tags-filter and the rules at the end of this file; nodes of ways and members of areas matched by a rule are kept as components. 3. Export with osmium export as GeoJSON: points and areas, no lines. 4. Prepare each object: - Dropped: objects without a name (except parks, gardens and squares with a Wikidata entry), chains among cafés, restaurants and bars (brand or well-known chain name), Stolpersteine and memorial plaques, boundary stones and milestones, wayside crosses and shrines without a Wikidata entry, roads, railways, boundaries and routes, settlements (villages, districts; squares stay) and anything that fits none of the kinds below. Among the remaining historic objects and objects named only through Wikidata, shops, hotels, service businesses, sports facilities, waters, woods and protected areas are dropped as well. Duplicates count once; places in tiles outside the region (Geofabrik .poly) are dropped. - Only these attributes are kept: name, name:en, wikidata, wikipedia, opening_hours, check_date, check_date:opening_hours, survey:date, website, contact:website, cuisine, brand, brand:wikidata, operator, heritage, religion, denomination, tourism, historic, amenity, leisure, man_made, natural, place, highway, area, memorial, building, addr:street, addr:housenumber, addr:postcode, addr:city, addr:country, outdoor_seating, diet:vegetarian, wheelchair, shop, gambling, microbrewery, brewery, diet:vegan, description, name:full, official_name, alt_name, start_date, architect, building:architecture - Location: points as they are; areas as one point inside the area (polylabel) plus the area in square metres. Coordinates rounded to 5 decimals (about 1 m). - ID: osm-n (node), osm-w (way), osm-r (relation). - Kind: one of the kinds below, derived from the attributes. 5. Split into tiles of 0.25° × 0.25°. Only tiles entirely inside the region count as complete; at the border and elsewhere our server asks Geoapify instead (also OpenStreetMap data). 6. Check and upload to non-public storage: if the new extract has fewer than 90% of the previously complete tiles or fewer than 70% of the previous places, the run stops and the previous week stays valid. Otherwise everything is uploaded first, and only then does the index (manifest.json) point to the new version. The previous version is kept until the next run. 7. Paths for routing (only in runs with lines switched on): two more pre-filters (below), exported as lines. Kept only near settlements (City 6 km, town 3 km, village 1 km around the settlement point) and per cell of 0.05° × 0.05°: footpaths up to 60 m from rivers and canals or up to 35 m from water areas (at most 400 ways, every third vertex) with the river and canal lines (at most 200), plus pedestrian areas and squares with the footpaths up to 100 m next to them. They only shape our routes and are never shown. Break categories (attribute amenity): cafe amenity=cafe restaurant amenity=restaurant bar amenity=bar, amenity=pub, amenity=biergarten Kinds: cafe, restaurant, bar, pub, biergarten, museum, gallery, attraction, viewpoint, artwork, zoo, castle, monument, memorial, ruins, archaeological_site, city_gate, tower, church, cathedral, chapel, monastery, synagogue, mosque, place_of_worship, townhall, fountain, theatre, arts_centre, park, garden, square, peak, waterfall, cave, lighthouse, bridge, historic, heritage, landmark Source files of the method: .github/workflows/osm-extract.yml scripts/osm-extract/filter.txt scripts/osm-extract/filter-lines-base.txt scripts/osm-extract/filter-lines-ways.txt scripts/osm-extract/build.mjs scripts/osm-extract/lines.mjs scripts/osm-extract/upload.mjs lib/places/osm-tags.js lib/places/tiles.js lib/places/lines.js ----- osmium tags-filter (scripts/osm-extract/filter.txt) ----- # Ortsspeicher (T2+T3) — Vorauswahl für `osmium tags-filter --expressions=`. # Eine Regel je Zeile: [Typen/]Schlüssel[=Wert,Wert…]; ein Schlüssel ohne Wert = jeder Wert. # Typen: n = Knoten, w = Wege, r = Relationen, a = Flächen. Achtung: osmiums a/ trifft geschlossene Wege UND Relationen mit # type=multipolygon oder type=boundary — also auch Verwaltungsgrenzen. Darum steht kein a/ oder r/ auf einem Schlüssel ohne # Wert, den jede Grenze trägt (wikidata, name, boundary, admin_level …); siehe das Auffangnetz am Ende. # Was wirklich in die Kacheln kommt, entscheidet classify() in lib/places/osm-tags.js # (Namen, Ketten, Stolpersteine, Straßen …) — hier wird nur grob vorsortiert, damit der # Export klein bleibt. tests/osm-extract-filter.test.js hält beide aufeinander abgestimmt. # Gastronomie (Pausen) na/amenity=cafe,restaurant,bar,pub,biergarten # … wie sie in OSM wirklich vorkommt: mehrwertig (amenity=cafe;bar) und groß geschrieben (amenity=Cafe). classify() # zählt Gastronomie nur als ERSTEN amenity-Wert (in Kleinbuchstaben): „cafe;bar“ ist ein Café, „school;cafe“ eine Schule # mit Café-Ecke und keine Pause (amenityOf in lib/places/osm-tags.js). osmium vergleicht Werte aber EXAKT (keine Platzhalter, # die sich ohne osmium prüfen ließen) — also stehen die gängigen Schreibweisen einzeln hier, alle mit der Gastronomie an # erster Stelle: die 20 geordneten Paare aus den fünf Werten und die fünf großgeschriebenen. Nicht erfasst: Dreier-Kombinationen, # Großgeschriebenes mit mehreren Werten, Gastronomie an zweiter Stelle (sie zählt für classify() nicht). # tests/osm-extract-filter.test.js hält die Liste gleich der von classify(). na/amenity=cafe;restaurant,cafe;bar,cafe;pub,cafe;biergarten na/amenity=restaurant;cafe,restaurant;bar,restaurant;pub,restaurant;biergarten na/amenity=bar;cafe,bar;restaurant,bar;pub,bar;biergarten na/amenity=pub;cafe,pub;restaurant,pub;bar,pub;biergarten na/amenity=biergarten;cafe,biergarten;restaurant,biergarten;bar,biergarten;pub na/amenity=Cafe,Restaurant,Bar,Pub,Biergarten # Sehenswertes na/tourism=attraction,museum,gallery,viewpoint,artwork,zoo,aquarium na/historic na/amenity=place_of_worship,monastery,theatre,arts_centre,fountain,townhall na/leisure=park,garden na/place=square a/highway=pedestrian na/man_made=tower,lighthouse,bridge na/natural=peak,cliff,cave_entrance na/waterway=waterfall na/heritage # Auffangnetz: benannte Objekte mit Wikidata (Brücken, Tore, Türme sind oft nur so erfasst). # Nur Knoten und Wege — als Relation brächte es alle Verwaltungsgrenzen samt Grenzwegen mit. Dasselbe gälte für a/wikidata, # denn osmiums a/ trifft auch type=boundary-Relationen (jede Verwaltungsgrenze trägt wikidata). nw/wikidata ----- Ende des Filters / end of filter ----- ----- osmium tags-filter für Linien / for lines (scripts/osm-extract/filter-lines-*.txt) ----- # scripts/osm-extract/filter-lines-base.txt # Plan C — Grundlage der Linien für `osmium tags-filter` (Regeln wie filter.txt): Orte für die Ortsnähe, Flüsse und Kanäle, # Wasserflächen (Uferwege) und Fußgängerflächen (Platz-Zugänge). a/ = geschlossene Wege und Multipolygone — nur mit Werten, # die keine Verwaltungsgrenze trägt. Was wirklich in die Linien-Kacheln kommt, entscheidet scripts/osm-extract/lines.mjs. n/place=city,town,village w/waterway=river,canal a/waterway=riverbank a/natural=water a/highway=pedestrian,footway a/area:highway=pedestrian,footway a/place=square # scripts/osm-extract/filter-lines-ways.txt # Plan C — Wege der Linien (Uferwege wie overpassQueryForTile, Fußgängerlinien wie approachQuery). Der Export geht als Strom an # scripts/osm-extract/lines.mjs; nur Wege in Ortsnähe und an Wasser bzw. Fußgängerflächen bleiben übrig. w/highway=footway,path,pedestrian,cycleway,track,living_street,steps ----- Ende des Filters / end of filter -----