- Added new fields to TrackModel: status, is_bidirectional, and coordinates. - Updated network service to handle new track attributes and geometry extraction. - Introduced CLI scripts for importing and loading tracks from OpenStreetMap. - Implemented normalization of track elements to ensure valid geometries. - Enhanced tests for track model, network service, and import/load scripts. - Updated frontend to accommodate new track attributes and improve route computation. - Documented OSM ingestion process in architecture and runtime views.
70 lines
1.8 KiB
Python
70 lines
1.8 KiB
Python
from __future__ import annotations
|
|
|
|
from backend.scripts import tracks_import
|
|
|
|
|
|
def test_normalize_track_elements_excludes_invalid_geometries() -> None:
|
|
elements = [
|
|
{
|
|
"type": "way",
|
|
"id": 123,
|
|
"geometry": [
|
|
{"lat": 52.5, "lon": 13.4},
|
|
{"lat": 52.6, "lon": 13.5},
|
|
],
|
|
"tags": {
|
|
"name": "Main Line",
|
|
"railway": "rail",
|
|
"maxspeed": "120",
|
|
},
|
|
},
|
|
{
|
|
"type": "way",
|
|
"id": 456,
|
|
"geometry": [
|
|
{"lat": 51.0},
|
|
],
|
|
"tags": {"railway": "rail"},
|
|
},
|
|
{
|
|
"type": "node",
|
|
"id": 789,
|
|
},
|
|
]
|
|
|
|
tracks = tracks_import.normalize_track_elements(elements)
|
|
|
|
assert len(tracks) == 1
|
|
track = tracks[0]
|
|
assert track["osmId"] == "123"
|
|
assert track["name"] == "Main Line"
|
|
assert track["maxSpeedKph"] == 120.0
|
|
assert track["status"] == "operational"
|
|
assert track["isBidirectional"] is True
|
|
assert track["coordinates"] == [[52.5, 13.4], [52.6, 13.5]]
|
|
assert track["lengthMeters"] > 0
|
|
|
|
|
|
def test_normalize_track_elements_marks_oneway_and_status() -> None:
|
|
elements = [
|
|
{
|
|
"type": "way",
|
|
"id": 42,
|
|
"geometry": [
|
|
{"lat": 48.1, "lon": 11.5},
|
|
{"lat": 48.2, "lon": 11.6},
|
|
],
|
|
"tags": {
|
|
"railway": "disused",
|
|
"oneway": "yes",
|
|
},
|
|
}
|
|
]
|
|
|
|
tracks = tracks_import.normalize_track_elements(elements)
|
|
|
|
assert len(tracks) == 1
|
|
track = tracks[0]
|
|
assert track["status"] == "disused"
|
|
assert track["isBidirectional"] is False
|