Skip to content

OpenRailwayMap-vector integration#132

Open
hiddewie wants to merge 666 commits intoOpenRailwayMap:masterfrom
hiddewie:master
Open

OpenRailwayMap-vector integration#132
hiddewie wants to merge 666 commits intoOpenRailwayMap:masterfrom
hiddewie:master

Conversation

@hiddewie
Copy link
Contributor

@hiddewie hiddewie commented Jun 7, 2025

Hi!

Over the past years I have been working on a fork of the OpenRailwayMap.

The announcement can be found on the OpenRailwayMap mailing list and on the OpenStreetMap community forum.

The fork has several features, and is actively being developed by me and several more contributors:

  • Vector-based data: the map is interactive with e.g. hover and popup showing data details.
  • Map style improvements: station size, state of lines and statons, signal support for many new countries.
  • Visual UI improvements like: configurable background map, map settings and dark mode.
  • Additional layers: loading gauge and track class.
  • Daily data updates for the entire planet.
  • OpenHistoricalMap integration for historical railway infrastructure.

At the moment the fork is hosted on https://openrailwaymap.app using Fly.io. This is purely practical, it could be hosted anywhere else.

This pull request is a starter to discuss:

  • Can we integrate the fork into the Github OpenRailwayMap organization
  • Can we publish the fork on the domain openrailwaymap.org?

These are open questions, any response is appreciated!

hiddewie and others added 29 commits July 11, 2025 19:44
Part of #219

(https://localhost/#view=3.94/39.43/-94.7&style=operator)
<img width="1586" height="1116" alt="image"
src="https://github.com/user-attachments/assets/15aac02f-73fa-4d53-81c4-dc64addfa34a"
/>

(Chicago:
https://localhost/#view=12.02/41.70103/-87.58216&style=operator)
<img width="1586" height="1116" alt="image"
src="https://github.com/user-attachments/assets/28183e33-8b50-4994-b1c2-c655be6ef135"
/>

(St Louis,
https://localhost/#view=11.09/38.5243/-90.2815&style=operator)
Shame that *Union Pacific Railroad* and *BNSF Railway* hash to almost
the same color.
<img width="1586" height="1116" alt="image"
src="https://github.com/user-attachments/assets/4e49b6f1-2469-48ce-b084-1574d34a6d83"
/>
Shows stations with operator. Includes yards, junctions, halts, tram
stops, crossovers and sites.

Railway line with matching operator:
(https://localhost/#view=11.93/38.7991/-90.45345&style=operator)
<img width="1116" height="790" alt="image"
src="https://github.com/user-attachments/assets/a75a0ead-660a-406c-9c71-429eb06529d3"
/>
<img width="1116" height="790" alt="image"
src="https://github.com/user-attachments/assets/bc61244f-3a0a-43b8-ad15-42b763711e4a"
/>

Most stations and yards do not have a matching operator:
(https://localhost/#view=10.6/38.6372/-90.1333&style=operator)
<img width="1662" height="1061" alt="image"
src="https://github.com/user-attachments/assets/12139c01-92f6-4be8-a45f-167208b0f10d"
/>

(https://localhost/#view=13.15/38.22554/-89.67217&style=operator)
<img width="881" height="534" alt="image"
src="https://github.com/user-attachments/assets/11fdf7ec-9302-4a52-9e8e-4a85b8650d08"
/>
<img width="881" height="534" alt="image"
src="https://github.com/user-attachments/assets/d3cb3d6a-6444-4987-899f-0bb2127fdfd9"
/>



Popup:
<img width="881" height="534" alt="image"
src="https://github.com/user-attachments/assets/d0dcb3f4-c8d6-4282-8e4e-2b5031706828"
/>
Fixes #473 

Changes:
- Add API that does a lookup for Wikidata image URLs
- Show only thumbnails
- Call the API to find the Wikidata image, and show it in the popup.

<img width="819" height="752" alt="image"
src="https://github.com/user-attachments/assets/ecef20c6-6937-4f47-8760-015dbc3d8953"
/>
<img width="588" height="792" alt="image"
src="https://github.com/user-attachments/assets/4cdd4d56-2c70-4d35-ba94-95119f3d8147"
/>
Only platform nodes are used now for station area station <-> platform
and station <-> stop position references. Platform ways should also
work.
Add ASES train protection. Separate entry, but same color as ACSES.
Handles the `railway:ases = yes` tag.

From
#450 (comment)
Part of #392

Improve import and parsing of railway positions. 

Move logic from SQL to the Lua pre-processing.

Changes:
- Split milestones into multiple values, storing each as a separate
position
- Store the numeric position separate from the textual position. A
textual position is always present, a numerical value is optional.
- Simplify tile and search SQL views.
- Store if a milestone is a *zero*
- Support `km`, `mi` and `pkm` types of milestones


A zero milestone still has a popup with the textual value:
<img width="384" height="264" alt="image"
src="https://github.com/user-attachments/assets/70b35e49-b2b3-4d9c-a18d-e2d4466bbede"
/>

Higher zooms show exact values:
<img width="501" height="453" alt="image"
src="https://github.com/user-attachments/assets/660870cb-221e-468b-bbb5-52d6266e868e"
/>

Negative milestones:
<img width="845" height="643" alt="image"
src="https://github.com/user-attachments/assets/61ad3b11-6ba2-4cb4-95ef-e20de2e8d680"
/>

Support for `km`, `mi` and `pkm` position types:
<img width="470" height="343" alt="image"
src="https://github.com/user-attachments/assets/e8acb110-c23a-4bdb-80a8-cd01c9aee193"
/>
When the map has a bearing on page load, the colored bearing map control
did not show a color, even though it was rotated.

<img width="703" height="567" alt="image"
src="https://github.com/user-attachments/assets/ef74a5ff-e69c-4b75-889e-32b22eeb731c"
/>
Followup on #481. A property was wrong, failing to import `mi:` and
`pkm:` milestones.
The views were recreated when they already existed.
<img width="768" height="501" alt="image"
src="https://github.com/user-attachments/assets/87693e43-e64c-4b26-ad27-7bd1f78c5977"
/>

This will also be shown in the Operator layer. 

Part of #219 

(http://localhost:8000/#view=13.02/52.47984/13.38297&style=operator)
<img width="414" height="264" alt="image"
src="https://github.com/user-attachments/assets/0719d531-4626-424e-bd9a-bcf80d6ae3fd"
/>
<img width="895" height="640" alt="image"
src="https://github.com/user-attachments/assets/f4aafb39-702e-4d01-84a0-040db4e00fc3"
/>
Users that have saved their configuration have no different behaviour.

For new users, the default background map will have a saturation of 0.0
(unchanged) and opacity of 0.35 (from 1.0).

Before:
<img width="1920" height="1034" alt="image"
src="https://github.com/user-attachments/assets/4e21d256-9563-4b32-ba66-9934dd3f7f08"
/>

After:
<img width="1920" height="1034" alt="image"
src="https://github.com/user-attachments/assets/8bd7875c-b1df-4de3-8f35-6dc257265b3c"
/>
Following performance scanning from
https://gtmetrix.com/reports/openrailwaymap.app/IynOcHM9/ and Google
Lighthouse.

Changes:
- Put the `<script>` includes in the page head, with `defer`. Execution
order is important
- Lazy load the banner image
- Enable gzip compression on more content types (taken from
https://www.digitalocean.com/community/tutorials/how-to-improve-website-performance-using-gzip-and-nginx-on-ubuntu-20-04)
Fixes #476

(http://localhost:8000/#view=19/52.5065983/13.4797794)
<img width="1226" height="886" alt="image"
src="https://github.com/user-attachments/assets/1c7fe13e-db76-4cac-9745-90e5c185aecf"
/>
Fixes #494

Followup of #481

Part of #392

Changes:
- Match exact positions against non-exact positions. If exact positions
do not have a corresponding non-exact position, they are used as is.
- Use textual position (not exact position) for determining if a
milestone is a zero.

(https://openrailwaymap.app/#view=10.39/49.5818/11.4117&style=signals)

Before:
<img width="1418" height="1110" alt="image"
src="https://github.com/user-attachments/assets/2f26bb69-58b7-4545-988c-8c4c82ac613b"
/>

After:
<img width="1417" height="1113" alt="image"
src="https://github.com/user-attachments/assets/23e64517-4986-406a-8bf9-db51c51a3b02"
/>
Hi there, I've created and added rendering for PL 6-cell semaphores ->
those are tagged similarly to 4- and 5-cell combined signals, but they
additionally include `railway:signal:combined:shape=two_column` tag.
I've recently updated OSM wiki and semaphores on map (in Radom Wschodni,
Gdańsk Główny and Ełk stations)

Examples of IRL 6-cell semaphores:
http://lighting-gallery.pl/viewtopic.php?f=55&t=1125&start=170#p274717
<img width="1024" height="576" alt="image"
src="https://github.com/user-attachments/assets/152420ce-68a9-4773-9cf4-1020ec280689"
/>
http://lighting-gallery.pl/viewtopic.php?f=55&t=1125&start=170#p275045
<img width="1024" height="575" alt="image"
src="https://github.com/user-attachments/assets/0428848d-d42f-453e-8520-9b6ea572789a"
/>

---------

Co-authored-by: Hidde Wieringa <hidde@hiddewieringa.nl>
Fixes #503

Import all switches, including those without a `ref`.

http://localhost:8000/#view=17.71/50.956407/7.012742

Before:
<img width="1434" height="1114" alt="image"
src="https://github.com/user-attachments/assets/ef650870-d709-408d-a552-08ce602ff7cb"
/>

After:
<img width="1434" height="1114" alt="image"
src="https://github.com/user-attachments/assets/ba5b471a-4f84-4896-9c0b-1ef937332d14"
/>
Fix the order of the integration test results, which depends on the
Berlin OSM data.
There's no "CM" track class and I changed the only occurrence yesterday
to the correct one (Value of "CM4" taken from trassenfinder.de). There
are also a few other lines in the former GDR that have "CM4" set.
Part of #270

Solution strategy: make the cone larger for high (16+) zooms when the
references are visible, such that the reference cannot fully cover the
signal cone.

Changes:
- Large signal cone from zoom 16+
- Lower opacity a bit for signal cone between zooms 13 and 16.

Zoom 13-16: signals with small cones and references/captions <img
width="872" height="963" alt="Image"
src="https://github.com/user-attachments/assets/ff3adb6e-2e41-4186-98f6-e3747cf116a7"
/>

Zooms 16+: signals with big cones, partially transparent, and
references/captions <img width="872" height="963" alt="Image"
src="https://github.com/user-attachments/assets/a507698f-c794-4c55-95b0-ebc0a1c9d0c5"
/>
Fixes #500

This pull request moves the symbols for borders and owner change to the
operator layer.

In the future, if we like, we could also display a symbol (POI) on
multiple layers (e.g. _infrastructure_ and _operator_). For e.g. borders
this could be sensible.

(http://localhost:8000/#view=16/52.48671/13.373722&style=operator)
<img width="909" height="575" alt="image"
src="https://github.com/user-attachments/assets/77b382af-70ce-4abd-a6bb-bc351dadd6d3"
/>
This code/filtering in the style is no longer needed because tiles are
available for every zoom level.
Path rewriting for source URLs is no longer needed because everything
runs in Docker with the same proxying rules. No tiles with different
URLs.
Nakaner pushed a commit that referenced this pull request Feb 22, 2026
Add test cases for web and tiles

Fixes #86 

Tasks:

- [x] Download a small piece of OSM data (Berlin is already cached from
the API tests)
- [x]     Import the data, verify import succeeded
- [x]     Generate tiles, verify tiles build
- [x] start martin-cp and verify tile requests work
- [x]     Start Martin
- [x]     Start API
- [x]     Start proxy
- [x] Run web browser tests, viewing the page, making screenshots,
searching and asserting some basic things on the screen.
- [x] Reuse built artifacts
hiddewie and others added 29 commits February 22, 2026 11:00
Currently they are rather white in color, making them harder to
distinguish from Zs3 signals.
To reduce the imported data a tiny bit.
Fixes #802.

Currently routes and search results cannot be deselected once shown.
This pull request adds a button that is shown when a route is selected.
Clicking the button will remove the route from the map again.

The "hide route" button has a pink outline, just like the routes, to
associate it with the routes. The "hide search results" button has a
green outline when there are search results, to associate it with the
search.

Route:
<img width="1115" height="401" alt="image"
src="https://github.com/user-attachments/assets/d9e92474-a582-4349-9fa8-80a072cfca9a"
/>

Search results:
<img width="1433" height="646" alt="image"
src="https://github.com/user-attachments/assets/1fa17dd6-0d49-470e-8036-e1bf522c234f"
/>
<img width="706" height="418" alt="image"
src="https://github.com/user-attachments/assets/159105a0-c3f0-4d3b-9fb9-b2ff0cccf0b1"
/>
Fixes #827

This is a regression from
#824.

Booleans were instead returned as optional booleans, `true`, `false` or
`null`. The `null` values were not possible before, creating errors
where the map style expected a boolean and not a null value.

Switches and catenary masts work again:
<img width="655" height="386" alt="image"
src="https://github.com/user-attachments/assets/c091f6cb-6e47-4a65-911a-3278aa2270cf"
/>
<img width="779" height="549" alt="image"
src="https://github.com/user-attachments/assets/71eb6f2e-f335-4603-98c0-77adefb10ad2"
/>
From comment in
#544 (comment).

Currently wiki languages are interpreted as countries, to display an
emoji flag. But the emoji flag system only supports countries, not
languages. As such, translation is error-prone. The easiest is to not
display the flag at all for Wikipedia links.

Reverts most of
#556

(http://localhost:8000/#view=15.65/52.339521/4.894221):

Before:
<img width="1000" height="738" alt="image"
src="https://github.com/user-attachments/assets/50a2bdec-c3d5-4915-b1df-63dc0e2fd637"
/>

After:
<img width="1000" height="738" alt="image"
src="https://github.com/user-attachments/assets/09590193-2f77-44cd-bca1-9f8aa2715622"
/>
- Added icons for primary signal states: C (Carré), Cv (Carré violet), S
(Sémaphore), D (Disque), A (Avertissement), and ID (Indicateurs de
directions)
- Updated French parsing in signals_railway_signals.yaml to always
display the most restrictive primary state for each signal
- Ensures the rendered icon always represents the signal's primary
state, independent of the target type

---------

Co-authored-by: Hidde Wieringa <hidde@hiddewieringa.nl>
Part of #789

Implementation of
https://wiki.openstreetmap.org/wiki/Cs:Original_tagging_of_Czech_railway_signals

Also see
#391 (comment)

Icons designed by
https://openstreetbrowser.org/#map=17/49.75606/13.50031&basemap=hot&categories=custom/d489fc1c1463352a6159941529e8c671

## Testing

### Station distant signals
(http://localhost:8000/#view=18.14/49.755008/13.501037&style=signals):
<img width="685" height="423" alt="image"
src="https://github.com/user-attachments/assets/d1b41ab8-2c91-478e-bdad-197d925f295a"
/>

(http://localhost:8000/#view=17.83/49.778896/13.718423&style=signals):
<img width="685" height="423" alt="image"
src="https://github.com/user-attachments/assets/8154dc94-72ce-422e-a33a-29bf9cdab011"
/>

Shortened
(http://localhost:8000/#view=16.03/49.762986/13.501773&style=signals):
<img width="813" height="534" alt="image"
src="https://github.com/user-attachments/assets/92a3aa98-339a-459f-96cf-b0402b364828"
/>


### Stop signals

(http://localhost:8000/#view=16.2/49.767235/13.505628&style=signals):
<img width="499" height="517" alt="image"
src="https://github.com/user-attachments/assets/93ce7c6d-48ed-44b0-a877-d40407d7cd83"
/>

(http://localhost:8000/#view=18.67/49.7793714/13.5029451&style=signals):
<img width="552" height="703" alt="image"
src="https://github.com/user-attachments/assets/5a966fa0-8aa5-4197-9840-733d7d80ff90"
/>

(http://localhost:8000/#view=16.69/49.825953/13.578226&style=signals):
<img width="518" height="441" alt="image"
src="https://github.com/user-attachments/assets/c5d51ed3-a679-4997-bea2-a2c9656c6da1"
/>


### Whistle

(http://localhost:8000/#view=17.07/49.794716/13.490002&style=signals):
<img width="813" height="534" alt="image"
src="https://github.com/user-attachments/assets/fb9ce218-292f-478f-8cbc-cf00db2b2b4d"
/>

### Resetting switch

(http://localhost:8000/#view=18.48/49.8284769/13.5750067&style=signals):
<img width="574" height="655" alt="image"
src="https://github.com/user-attachments/assets/9e202b7a-cd8e-48e8-a45d-74eea638c50d"
/>

### Crossing

(http://localhost:8000/#view=17.2/49.823982/13.579852&style=signals):
<img width="700" height="634" alt="image"
src="https://github.com/user-attachments/assets/11afb905-f07d-4cd1-a847-58db73a2ce9f"
/>

### Shunting 

Derailers with semaphore shunting signals
(http://localhost:8000/#view=17.38/49.787501/13.495874&style=signals):
<img width="535" height="580" alt="image"
src="https://github.com/user-attachments/assets/a3162fd1-6e01-413d-b8ad-c73f922be44c"
/>

### Distant signals

Normal
(http://localhost:8000/#view=17.6/49.764124/13.502116&style=signals):
<img width="998" height="560" alt="image"
src="https://github.com/user-attachments/assets/f163e5bf-652d-4319-a16d-b82fe7cbc6dc"
/>

Repeated
(http://localhost:8000/#view=18.17/49.752077/13.509463&style=signals):
<img width="998" height="560" alt="image"
src="https://github.com/user-attachments/assets/d32c8735-75cc-4274-a208-01e168998c46"
/>

Shortened and entry distant signals do not exit yet.

### Main / Combined signals in station

(http://localhost:8000/#view=16.72/49.701314/13.667077&style=signals):
<img width="1420" height="865" alt="image"
src="https://github.com/user-attachments/assets/84b5ac67-138d-4645-b001-9383f3786d7f"
/>

(http://localhost:8000/#view=17.06/49.74398/13.389809&style=signals):
<img width="1420" height="865" alt="image"
src="https://github.com/user-attachments/assets/5af23a2b-490a-4fa2-bbef-7b32231780f2"
/>


Sign, circle
(http://localhost:8000/#view=17.39/49.76435/13.401474&style=signals):
<img width="991" height="630" alt="image"
src="https://github.com/user-attachments/assets/bbe7a16c-1184-46e0-b6ea-2cc02a0ea4d7"
/>
Fixes #807.

In the attribution box, show the time since the last full download of
the OpenStreetMap data.

<img width="1037" height="303" alt="image"
src="https://github.com/user-attachments/assets/961a3321-e37e-4b0a-8671-8ed8fc430ad0"
/>

Data image for nightly update contains timestamp:
```shell
dive ghcr.io/hiddewie/openrailwaymap-data:latest
```
<img width="1594" height="181" alt="image"
src="https://github.com/user-attachments/assets/f1464934-a87d-4258-932e-8f7b7cd8cecc"
/>
Also the disabled extensions were not present. `postgis` was already
enabled.
Changed operator RFI to Rete Ferroviaria Italiana (Issue #836)

Co-authored-by: Hidde Wieringa <hidde@hiddewieringa.nl>
fixed an error from last entry used "&" instead of "and" for the current
names on OSM operators
Part of #441

Fixes #819

Import of references. They are the references with 200 or more usages
worldwide from the list in
#441 (comment).

Implementation: store all references in a hash in the stations table, to
ensure they can be searched generally.

The station popup shows all station references, sorted by importance
(order in the definition list).

Search searches all known references, and the search results show the
references next to the station names. The search option for UIC
reference has been removed because it is automatically included in the
reference search.

The references are exported in the Taginfo output as well.
Part of #441.

Import station references for stop areas, and render them in the popup
for grouped stations.

For example Malmö C, https://www.openstreetmap.org/node/25589138. with
stop area https://www.openstreetmap.org/relation/2556732, where the
Swedish community tag the Rikshållplats.
<img width="704" height="741" alt="image"
src="https://github.com/user-attachments/assets/58ff5220-04b1-4140-b1f0-6e687175f619"
/>

Search includes stop areas:
<img width="898" height="450" alt="image"
src="https://github.com/user-attachments/assets/25366026-9ba1-4e77-bf92-a0db04321442"
/>
This improves two German tram signals as part of #811.

### Departure signals A 1 / A 2
Currently, at departure signals
([documentation](https://wiki.openstreetmap.org/wiki/DE:OpenRailwayMap/Tagging_Trams_in_Germany#Abfertigungssignale_(A)))
which can show both the A 1 and A 2 aspect, only the A 2 one is
rendered. This PR fixes that.

#### Example
([12377252458](https://www.openstreetmap.org/node/12377252458))
<img width="442" height="472" alt="Screenshot 2026-03-01 162702"
src="https://github.com/user-attachments/assets/d1f01920-6eab-4e53-a862-839f52f97d09"
/>

### Fahrsignal
The Fahrsignal `DE-BOStrab:f`
([documentation](https://wiki.openstreetmap.org/wiki/DE:OpenRailwayMap/Tagging_Trams_in_Germany#Fahrsignale_(F)))
has two problems at the moment:
* The F 0 aspect is not rendered. Instead, every Fahrsignal has an
additional "empty" signal light. I don't know whether this was an
intentional choice, but (as noted in #811) this makes it impossible to
distinguish (rare) signals without an F 0 aspect.
* Signals where the states are not explicitly tagged are not rendered at
all. There is a `tram Fahrsignal (unknown)` in the signal specification,
but this is never reached as these signals also match the section above.

This PR makes the following changes:
* The F 0 aspect is rendered when tagged.
* The rendering of the additional "empty" signal light is removed.
* Instead, an additional empty light is rendered if there are further,
untagged aspects (indicated by a `?` in `railway:signal:main:states`).
This allows to visually distinguish signals which are tagged completely
from those which are not. It also ensures that (as before) no signals
are rendered with only one light, as this looks not nice – except for
the case where there really is only one light on the ground (see
example).
* Signals without any tagged states are now rendered, as the "normal"
Fahrsignal now matches only to those signals where at least one state
has been tagged.
* For this case, I replaced the previous symbol `de/bostrab/f-unknown`
(traffic light showing a question mark) by `de/bostrab/f0-old` (traffic
light showing F 0). I think this is better since it allows to visually
recognize the signal as a Fahrsignal (as opposed to e.g. a switch signal
which also "looks like a traffic light"). There are several hundred
Fahrsignale without tagged states. Almost every Fahrsignal has an F 0
aspect, which is also why F 0 was the default icon for the Fahrsignal
before the more detailed rendering was introduced.

#### Examples (before/after)
typical case
([13015719193](https://www.openstreetmap.org/node/13015719193))
<img width="210" height="198" alt="Screenshot 2026-03-01 165253"
src="https://github.com/user-attachments/assets/564be6bd-204f-4010-81b5-305ae7255d83"
/><img width="205" height="197" alt="Screenshot 2026-03-01 165304"
src="https://github.com/user-attachments/assets/11d16675-38a6-45c2-aec5-c932ec61a092"
/>

without specified states
([10963864069](https://www.openstreetmap.org/node/10963864069))
<img width="313" height="284" alt="Screenshot 2026-03-01 162616"
src="https://github.com/user-attachments/assets/0b48a8b2-c24e-43ca-8352-39d7c9e08bc3"
/><img width="299" height="268" alt="Screenshot 2026-03-01 162627"
src="https://github.com/user-attachments/assets/7187b65f-797c-4358-b127-946075e96858"
/>

without F 0 state
([13015719198](https://www.openstreetmap.org/node/13015719198))
<img width="226" height="194" alt="Screenshot 2026-03-01 165147"
src="https://github.com/user-attachments/assets/d2d9af1f-4715-4e5c-b2d2-8dfff03c74ce"
/><img width="201" height="174" alt="Screenshot 2026-03-01 165153"
src="https://github.com/user-attachments/assets/5e8f25a9-03ad-421a-ba46-1e9dd8a0c82f"
/>

with additional `?` states (on the left,
[13449257639](https://www.openstreetmap.org/node/13449257639))
<img width="205" height="174" alt="Screenshot 2026-03-01 165945"
src="https://github.com/user-attachments/assets/d33f4c5f-7738-4a96-b08f-908e6fd70234"
/><img width="202" height="176" alt="Screenshot 2026-03-01 165959"
src="https://github.com/user-attachments/assets/33eff484-1b38-423b-910d-e245abe75388"
/>
…#844)

Reverts #842

The nightly update and deployment times out after 6 hours of database
generation.

Revert until this is solved.
This is a regression from
#832, noticed in
#832 (comment).

The variable `value` was overwritten by the formatted key/value pairs in
the body of the popup items.

After this pull request
<img width="642" height="382" alt="image"
src="https://github.com/user-attachments/assets/7446e820-2aef-42af-85b3-8e9b0b02a34a"
/>
This adds a symbol for unknown slope signals (in grey like other low
priority signals).

Before/after
([1504400550](https://www.openstreetmap.org/node/1504400550)):
<img width="186" height="147" alt="Screenshot 2026-03-10 125728"
src="https://github.com/user-attachments/assets/bc4c3000-99f7-4673-aa0e-e68710ab9f90"
/> <img width="151" height="127" alt="Screenshot 2026-03-10 130309"
src="https://github.com/user-attachments/assets/26e674d7-04ed-4f4d-b347-22f0da6cc418"
/>
Merge classes "tarcze zaporowe" into one (differentiate by form) -
before that, somehow, semaphore minor Tz signals weren't displayed at
all (eg.
https://openrailwaymap.app/#view=18.73/52.5293808/17.6071616&style=signals)

---------

Co-authored-by: Hidde Wieringa <hidde@hiddewieringa.nl>
This adds the slope signal for the UK.

Documentation:
https://wiki.openstreetmap.org/wiki/OpenRailwayMap/Tagging_in_the_United_Kingdom#Gradient_post

### Examples
Board shape:
[13565427184](https://www.openstreetmap.org/node/13565427184)
<img width="237" height="201" alt="Screenshot 2026-03-10 032425"
src="https://github.com/user-attachments/assets/6da79927-b000-4c9e-99a0-82c0be31f41b"
/>

Arms shape: (test only, not yet used in OSM)
<img width="219" height="200" alt="Screenshot 2026-03-10 034142"
src="https://github.com/user-attachments/assets/c1ef1e2b-ef5d-4ce5-a4b9-5c213ef3c7ea"
/>

---------

Co-authored-by: Hidde Wieringa <hidde@hiddewieringa.nl>
Includes #842, reverts #844 

The nightly update had performance issues generating the database.
Instead, try to have less array joins with indices, and use normal
relational join tables with simple btree indices.
This selects the best image according to [Wikidata
rank](https://www.wikidata.org/wiki/Help:Ranking), which is not
necessarily the earliest image in the API response. Fixes #849.

Also migrates to the REST API endpoint for the flatter, cleaner response
structure.

---------

Co-authored-by: Hidde Wieringa <hidde@hiddewieringa.nl>
See changes on wiki in
https://wiki.openstreetmap.org/w/index.php?title=OpenRailwayMap/Tagging_in_Belgium&diff=0&oldid=2948607

Part of #763

Followup on #821


On http://localhost:8000/#view=18.47/50.8828234/4.3905015&style=signals:
<img width="1019" height="706" alt="image"
src="https://github.com/user-attachments/assets/777a02a0-5af2-4b2f-8f74-ace13bb58963"
/>
Adds rear clear marker/indicator.
Adds engineering stop board (these are used
permanently/semi-permanently).

Tagging ~~will be~~ added ~~shortly~~ to the wiki.
Examples can be found at Reading (rear clear), and Ashford Depot
(engineering stop board).
Part of #848

In addition to querying the images from WikiData, we also need to query
the WikiMedia Commons API to determine the image file metadata.

Example query from WikiMedia Commons:
https://www.wikidata.org/w/api.php?action=query&prop=imageinfo&iiprop=extmetadata&titles=File%3aReading_Station_drone_view.jpg&format=json
From discussion in
#371

Fixes #858 

The proposal in
https://wiki.openstreetmap.org/wiki/Proposal:Unified_ETCS_Signals_(railway)
has been approved. The result is being documented on
https://wiki.openstreetmap.org/wiki/OpenRailwayMap/ETCS_Markers.

Now we can implement the proposal 🎉

Tested on the first tagged signals with the new tagging
(https://overpass-turbo.eu/s/2mes), for example
https://www.openstreetmap.org/node/13649914353:
(http://localhost:8000/#view=14.02/50.27029/11.01936&style=signals):
<img width="1344" height="649" alt="image"
src="https://github.com/user-attachments/assets/462c8a5f-a0c6-47c7-b525-a3c043a0a48a"
/>
<img width="690" height="1250" alt="image"
src="https://github.com/user-attachments/assets/d6479ed3-d3e6-49b9-a2c7-328e264c5da0"
/>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.