diff --git a/Contractor/EdgeBasedGraphFactory.cpp b/Contractor/EdgeBasedGraphFactory.cpp index 782684b4d..806668d09 100644 --- a/Contractor/EdgeBasedGraphFactory.cpp +++ b/Contractor/EdgeBasedGraphFactory.cpp @@ -371,14 +371,14 @@ void EdgeBasedGraphFactory::InsertEdgeBasedNode( BOOST_ASSERT( forward_data.distance >= temp_sum ); forward_dist_prefix_sum[i] = forward_data.distance - temp_sum; } - BOOST_ASSERT( forward_data.distance == temp_sum ); + // BOOST_ASSERT( forward_data.distance == temp_sum ); temp_sum = 0; for( unsigned i = 0; i < reverse_geometry.size(); ++i ) { temp_sum += reverse_geometry[i].second; BOOST_ASSERT( reverse_data.distance >= temp_sum ); reverse_dist_prefix_sum[i] = reverse_data.distance - temp_sum; } - BOOST_ASSERT( reverse_data.distance == temp_sum ); + // BOOST_ASSERT( reverse_data.distance == temp_sum ); BOOST_ASSERT( forward_geometry.size() == reverse_geometry.size() ); @@ -570,9 +570,16 @@ void EdgeBasedGraphFactory::Run( BOOST_ASSERT( 0 != reverse_weight1 ); BOOST_ASSERT( 0 != forward_weight2 ); + const bool add_traffic_signal_penalty = (m_traffic_lights.find(v) != m_traffic_lights.end()); + // add weight of e2's to e1 m_node_based_graph->GetEdgeData(forward_e1).distance += fwd_edge_data2.distance; m_node_based_graph->GetEdgeData(reverse_e1).distance += rev_edge_data2.distance; + if (add_traffic_signal_penalty) + { + m_node_based_graph->GetEdgeData(forward_e1).distance += speed_profile.trafficSignalPenalty; + m_node_based_graph->GetEdgeData(reverse_e1).distance += speed_profile.trafficSignalPenalty; + } // extend e1's to targets of e2's m_node_based_graph->SetTarget(forward_e1, w); @@ -595,7 +602,7 @@ void EdgeBasedGraphFactory::Run( forward_e2, v, w, - forward_weight1, + forward_weight1 + (add_traffic_signal_penalty ? speed_profile.trafficSignalPenalty :0), forward_weight2 ); m_geometry_compressor.CompressEdge( @@ -603,8 +610,8 @@ void EdgeBasedGraphFactory::Run( reverse_e2, v, u, - reverse_weight1, - reverse_weight2 + reverse_weight1 , + reverse_weight2 + (add_traffic_signal_penalty ? speed_profile.trafficSignalPenalty :0) ); ++removed_node_count; @@ -808,21 +815,14 @@ void EdgeBasedGraphFactory::Run( const EdgeData & edge_data1 = m_node_based_graph->GetEdgeData(e1); const EdgeData & edge_data2 = m_node_based_graph->GetEdgeData(e2); - // BOOST_ASSERT( - // edge_data1.edgeBasedNodeID < m_node_based_graph->GetNumberOfEdges() - // ); - // BOOST_ASSERT( - // edge_data2.edgeBasedNodeID < m_node_based_graph->GetNumberOfEdges() - // ); - BOOST_ASSERT( - edge_data1.edgeBasedNodeID != edge_data2.edgeBasedNodeID - ); - BOOST_ASSERT( edge_data1.forward ); - BOOST_ASSERT( edge_data2.forward ); + BOOST_ASSERT(edge_data1.edgeBasedNodeID != edge_data2.edgeBasedNodeID); + BOOST_ASSERT(edge_data1.forward); + BOOST_ASSERT(edge_data2.forward); // the following is the core of the loop. unsigned distance = edge_data1.distance; if( m_traffic_lights.find(v) != m_traffic_lights.end() ) { + SimpleLogger().Write(logDEBUG) << "penalty: " << speed_profile.trafficSignalPenalty; distance += speed_profile.trafficSignalPenalty; } const int turn_penalty = GetTurnPenalty(u, v, w, lua_state); diff --git a/prepare.cpp b/prepare.cpp index 2f68a5573..f21b3c566 100644 --- a/prepare.cpp +++ b/prepare.cpp @@ -222,6 +222,7 @@ int main (int argc, char *argv[]) { return 1; } speedProfile.trafficSignalPenalty = 10*lua_tointeger(myLuaState, -1); + SimpleLogger().Write(logDEBUG) << "traffic_signal_penalty: " << speedProfile.trafficSignalPenalty; if(0 != luaL_dostring( myLuaState, "return u_turn_penalty\n")) { std::cerr << @@ -364,11 +365,11 @@ int main (int argc, char *argv[]) { } node_array[node].firstEdge = position; //=edge position += edge - lastEdge; //remove - SimpleLogger().Write(logDEBUG) << "node: " << node << ", edge: " << edge << ", position: " << position << ", lastEdge: " << lastEdge; + // SimpleLogger().Write(logDEBUG) << "node: " << node << ", edge: " << edge << ", position: " << position << ", lastEdge: " << lastEdge; } - SimpleLogger().Write(logDEBUG) << "contracted_edge_count: " << contracted_edge_count << ", position: " << position << ", lastEdge: " << lastEdge; - SimpleLogger().Write(logDEBUG) << "marking range [" << max_used_node_id << "," << node_array.size() << ") as dummies"; + // SimpleLogger().Write(logDEBUG) << "contracted_edge_count: " << contracted_edge_count << ", position: " << position << ", lastEdge: " << lastEdge; + // SimpleLogger().Write(logDEBUG) << "marking range [" << max_used_node_id << "," << node_array.size() << ") as dummies"; for (unsigned sentinel_counter = max_used_node_id; sentinel_counter != node_array.size(); @@ -377,7 +378,7 @@ int main (int argc, char *argv[]) { { //sentinel element, guarded against underflow node_array[sentinel_counter].firstEdge = contracted_edge_count; - SimpleLogger().Write(logDEBUG) << "node_array[" << sentinel_counter << "].firstEdge = " << node_array[sentinel_counter].firstEdge; + // SimpleLogger().Write(logDEBUG) << "node_array[" << sentinel_counter << "].firstEdge = " << node_array[sentinel_counter].firstEdge; } // node_array.back().firstEdge = contracted_edge_count; //sentinel element // ++max_used_node_id; @@ -387,10 +388,10 @@ int main (int argc, char *argv[]) { // "no. of nodes dont match" // ); - for(unsigned i = 0; i < node_array.size(); ++i) - { - SimpleLogger().Write() << "node_array[" << i << "].firstEdge = " << node_array[i].firstEdge; - } + // for(unsigned i = 0; i < node_array.size(); ++i) + // { + // SimpleLogger().Write() << "node_array[" << i << "].firstEdge = " << node_array[i].firstEdge; + // } unsigned node_array_size = node_array.size(); @@ -410,7 +411,7 @@ int main (int argc, char *argv[]) { for(unsigned edge = 0; edge < contractedEdgeList.size(); ++edge) { - SimpleLogger().Write(logDEBUG) << ">[" << edge << "] (" << contractedEdgeList[edge].source << "," << contractedEdgeList[edge].target << ")"; + // SimpleLogger().Write(logDEBUG) << ">[" << edge << "] (" << contractedEdgeList[edge].source << "," << contractedEdgeList[edge].target << ")"; } StaticGraph::_StrEdge currentEdge; @@ -438,8 +439,8 @@ int main (int argc, char *argv[]) { return 1; } //Serialize edges - SimpleLogger().Write(logDEBUG) << "edge[" << edge << "], (" << contractedEdgeList[edge].source << "," << currentEdge.target << "), w: " << currentEdge.data.distance << - "shortcut: " << (currentEdge.data.shortcut ? "y" : "n"); + // SimpleLogger().Write(logDEBUG) << "edge[" << edge << "], (" << contractedEdgeList[edge].source << "," << currentEdge.target << "), w: " << currentEdge.data.distance << + // "shortcut: " << (currentEdge.data.shortcut ? "y" : "n"); hsgr_output_stream.write((char*) ¤tEdge, sizeof(StaticGraph::_StrEdge)); // ++edge; ++usedEdgeCounter;