mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-20 13:23:59 +00:00
# Conflicts: # CMakeLists.txt # android/app/src/main/java/app/organicmaps/settings/SettingsPrefsFragment.java # android/sdk/src/main/cpp/app/organicmaps/sdk/Framework.hpp # android/sdk/src/main/cpp/app/organicmaps/sdk/OrganicMaps.cpp # android/sdk/src/main/cpp/app/organicmaps/sdk/util/Config.cpp # libs/indexer/data_source.hpp # libs/indexer/feature.hpp # libs/indexer/ftypes_matcher.hpp # libs/map/framework.cpp # libs/map/traffic_manager.cpp # libs/routing/absent_regions_finder.cpp # libs/routing/edge_estimator.hpp # libs/routing/index_router.cpp # libs/routing/index_router.hpp # libs/routing/routing_session.hpp # libs/routing_common/num_mwm_id.hpp # libs/traffic/traffic_info.cpp # qt/mainwindow.hpp # qt/preferences_dialog.cpp # tools/openlr/helpers.hpp # tools/openlr/openlr_decoder.cpp # tools/openlr/openlr_decoder.hpp # tools/openlr/openlr_stat/openlr_stat.cpp # tools/openlr/router.hpp # tools/openlr/score_candidate_paths_getter.cpp # tools/openlr/score_candidate_paths_getter.hpp # xcode/CoMaps.xcworkspace/contents.xcworkspacedata
73 lines
2.1 KiB
C++
73 lines
2.1 KiB
C++
#pragma once
|
|
|
|
#include "routing/data_source.hpp"
|
|
#include "routing/features_road_graph.hpp"
|
|
#include "routing/road_graph.hpp"
|
|
|
|
#include "routing_common/car_model.hpp"
|
|
|
|
#include "indexer/feature_data.hpp"
|
|
|
|
#include "geometry/point2d.hpp"
|
|
|
|
#include <cstddef>
|
|
#include <map>
|
|
#include <memory>
|
|
#include <string>
|
|
#include <utility>
|
|
#include <vector>
|
|
|
|
namespace openlr
|
|
{
|
|
// TODO(mgsergio): Inherit from FeaturesRoadGraph.
|
|
class Graph
|
|
{
|
|
public:
|
|
using Edge = routing::Edge;
|
|
using EdgeListT = routing::FeaturesRoadGraph::EdgeListT;
|
|
using EdgeVector = routing::FeaturesRoadGraph::EdgeVector;
|
|
using Junction = geometry::PointWithAltitude;
|
|
|
|
Graph(DataSource & dataSource, std::shared_ptr<routing::CarModelFactory> carModelFactory);
|
|
|
|
/**
|
|
* Appends edges to `edges` such as that `edge.GetStartJunction() == junction`.
|
|
*/
|
|
void GetOutgoingEdges(geometry::PointWithAltitude const & junction, EdgeListT & edges);
|
|
|
|
/**
|
|
* Appends edges to `edges` such as that `edge.GetEndJunction() == junction`.
|
|
*/
|
|
void GetIngoingEdges(geometry::PointWithAltitude const & junction, EdgeListT & edges);
|
|
|
|
/**
|
|
* Appends edges to `edges` such as that `edge.GetStartJunction() == junction` and
|
|
* `edge.IsFake() == false`.
|
|
*/
|
|
void GetRegularOutgoingEdges(Junction const & junction, EdgeListT & edges);
|
|
|
|
/**
|
|
* Appends edges to `edges` such as that `edge.GetEndJunction() == junction` and
|
|
* `edge.IsFake() == false`.
|
|
*/
|
|
void GetRegularIngoingEdges(Junction const & junction, EdgeListT & edges);
|
|
|
|
void FindClosestEdges(m2::PointD const & point, uint32_t const count,
|
|
std::vector<std::pair<Edge, Junction>> & vicinities) const;
|
|
|
|
void AddIngoingFakeEdge(Edge const & e);
|
|
void AddOutgoingFakeEdge(Edge const & e);
|
|
|
|
void ResetFakes() { m_graph.ResetFakes(); }
|
|
|
|
void GetFeatureTypes(FeatureID const & featureId, feature::TypesHolder & types) const;
|
|
|
|
using EdgeCacheT = std::map<Junction, EdgeListT>;
|
|
|
|
private:
|
|
routing::MwmDataSource m_dataSource;
|
|
routing::FeaturesRoadGraph m_graph;
|
|
EdgeCacheT m_outgoingCache, m_ingoingCache;
|
|
};
|
|
} // namespace openlr
|