コード例 #1
0
 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;
 }
コード例 #2
0
        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);
        }