public static FindingDirectionsProblem BuildMapProblem( IWeightedGraph<FindingDirectionsState, double> graph, // TODO: swap this out for something that isn't a dependency INearestNeighbor<FindingDirectionsState> nodeLocator, double latFrom, double lonFrom, double latTo, double lonTo ) { var from = nodeLocator.FindNearestNeighbor(new FindingDirectionsState(0, null, latFrom, lonFrom)); var to = nodeLocator.FindNearestNeighbor(new FindingDirectionsState(0, null, latTo, lonTo)); var problem = new FindingDirectionsProblem(graph, from, to); return problem; }
public static void InitializeMapData(string city_name) { Log.WriteLine("Loading map data: " + city_name); var filename = Path.Combine($@"../datasets/{city_name}/{city_name}.osm.pbf"); //var (graph, nodes) = OpenStreetMapDataHelper.ExtractMapGraph(filename); var(graph, segments, nodes) = OpenStreetMapDataHelper.ExtractIntersectionMapGraph(filename); MapController.mapGraph = graph; MapController.segmentsGraph = segments; MapController.locations = OpenStreetMapDataHelper.MakeNodeLocator(nodes); Log.WriteLine("Calculating heuristic"); //MapController.double_heuristic = (from, goal) => DistanceHelper.Haversine(from.Latitude, from.Longitude, goal.Latitude, goal.Longitude); var random = new Random(); // TODO: find a better way to choose landmarks MapController.landmarks = nodes.OrderBy(m => random.Next()).Take(4).ToArray(); MapController.double_heuristic = HeuristicsHelper.MakeLandmarksHeuristicDouble(mapGraph, MapController.landmarks); MapController.nodeCount = nodes.Count; Log.WriteLine("Calculating bounding box"); foreach (var node in nodes) { if (bbNorthWest == null) { bbNorthWest = new LatLng { lat = node.Latitude, lng = node.Longitude } } ; bbNorthWest.lat = Math.Min(bbNorthWest.lat, node.Latitude); bbNorthWest.lng = Math.Min(bbNorthWest.lng, node.Longitude); if (bbSouthEast == null) { bbSouthEast = new LatLng { lat = node.Latitude, lng = node.Longitude } } ; bbSouthEast.lat = Math.Max(bbSouthEast.lat, node.Latitude); bbSouthEast.lng = Math.Max(bbSouthEast.lng, node.Longitude); } Log.WriteLine("Map data loaded: " + city_name); Log.WriteLine(" Total map nodes: " + nodes.Count); }