From e01245cb98b3bc4f07fe226df9ea5ac74dabab0b Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Sat, 13 Mar 2021 13:02:19 +0100 Subject: [PATCH] Do not use z-coordinate for speed on TRAINLINE or ACCESS Using the z-coordinate as is is a bad idea. When intersecting, a new node will be generated. What z-coord should it be? This node can now be part of two distinct types with different meanings for it. So we need to implement weight as a path argument. This commit hardcodes the speed for trains and access pathways as a temporary workaround. --- src/dijkstragraph.c | 10 +++++----- src/geojson.c | 14 +------------- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/src/dijkstragraph.c b/src/dijkstragraph.c index eeeb835..572a4a8 100644 --- a/src/dijkstragraph.c +++ b/src/dijkstragraph.c @@ -175,11 +175,11 @@ dijkstra_cost dijkstra_get_weight_from_distance(struct dijkstra_node *node_a, float scale; switch (net_type) { - case TRAINLINE: // Trainlines and access types use the z-coordinate - case ACCESS: // for cost scaling. - scale = (float)node_a->position.z; - scale += (float)node_b->position.z; - scale /= 200; + case TRAINLINE: + scale = 5.0; + break; + case ACCESS: + scale = 0.5; break; default: scale = 1.0; diff --git a/src/geojson.c b/src/geojson.c index 6fc50c3..aa85f94 100644 --- a/src/geojson.c +++ b/src/geojson.c @@ -97,19 +97,7 @@ int add_geojson_to_dijkstra(struct dijkstra_solver *solver, json_reader_read_member(reader, "geometry"); json_reader_read_member(reader, "coordinates"); - switch (net_type) { - case STREET: - z_last = 0; // By default, let's assume height 0 - break; - case TRAINLINE: - z_last = 1000; // By default, let's assume 10x normal speed - break; - case ACCESS: - z_last = 99; // TODO: By default, let's introduce a penalty to get on the train (ACCESS walk 10x slower) - break; - default: - z_last = -1; - } + z_last = 0; // By default, let's assume height 0 net_meta = dijkstra_net_meta_new_to_list(solver, net_type, name, access); if (json_reader_is_array(reader)) { j_max = json_reader_count_elements(reader);