/// <summary> /// Executes the CH contractions while verifying each step. /// </summary> /// <param name="stream"></param> public void DoTestCHEdgeDifferenceVerifiedContraction(Stream stream) { _interpreter = new OsmRoutingInterpreter(); OsmTagsIndex tags_index = new OsmTagsIndex(); // do the data processing. _data = new DynamicGraphRouterDataSource<CHEdgeData>(tags_index); CHEdgeDataGraphProcessingTarget target_data = new CHEdgeDataGraphProcessingTarget( _data, _interpreter, _data.TagsIndex, VehicleEnum.Car); XmlDataProcessorSource data_processor_source = new XmlDataProcessorSource(stream); DataProcessorFilterSort sorter = new DataProcessorFilterSort(); sorter.RegisterSource(data_processor_source); target_data.RegisterSource(sorter); target_data.Pull(); // do the pre-processing part. DykstraWitnessCalculator witness_calculator = new DykstraWitnessCalculator( _data); CHPreProcessor pre_processor = new CHPreProcessor(_data, new EdgeDifference(_data, witness_calculator), witness_calculator); pre_processor.OnBeforeContractionEvent += new CHPreProcessor.VertexDelegate(pre_processor_OnBeforeContractionEvent); pre_processor.OnAfterContractionEvent += new CHPreProcessor.VertexDelegate(pre_processor_OnAfterContractionEvent); pre_processor.Start(); }
/// <summary> /// Builds a raw data source. /// </summary> /// <returns></returns> public DynamicGraphRouterDataSource<PreProcessedEdge> BuildDykstraDataSource( IRoutingInterpreter interpreter, string embedded_name) { OsmTagsIndex tags_index = new OsmTagsIndex(); // do the data processing. DynamicGraphRouterDataSource<PreProcessedEdge> data = new DynamicGraphRouterDataSource<PreProcessedEdge>(tags_index); PreProcessedDataGraphProcessingTarget target_data = new PreProcessedDataGraphProcessingTarget( data, interpreter, data.TagsIndex, VehicleEnum.Car); XmlDataProcessorSource data_processor_source = new XmlDataProcessorSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(string.Format( "OsmSharp.UnitTests.{0}", embedded_name))); DataProcessorFilterSort sorter = new DataProcessorFilterSort(); sorter.RegisterSource(data_processor_source); target_data.RegisterSource(sorter); target_data.Pull(); return data; }
/// <summary> /// Initializes a new instance of the <see cref="Engine"/> class. /// </summary> protected Engine() { // keeps a memory-efficient version of the osm-tags. var tagsIndex = new OsmTagsIndex(); // creates a routing interpreter. (used to translate osm-tags into a routable network) interpreter = new OsmRoutingInterpreter(); // create a routing datasource, keeps all processed osm routing data. var osmData = new MemoryRouterDataSource<SimpleWeighedEdge>(tagsIndex); // load data into this routing datasource. var fileSource = HostingEnvironment.MapPath("~/App_Data/Manchester.osm.pbf"); Stream osmXmlData = new FileInfo(fileSource).OpenRead(); // for example moscow! using (osmXmlData) { var targetData = new SimpleWeighedDataGraphProcessingTarget( osmData, interpreter, osmData.TagsIndex, VehicleEnum.Car); // replace this with PBFdataProcessSource when having downloaded a PBF file. var dataProcessorSource = new OsmSharp.Osm.Data.PBF.Raw.Processor.PBFDataProcessorSource(osmXmlData); // pre-process the data. var sorter = new DataProcessorFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); } // create the router object: there all routing functions are available. router = new Router<SimpleWeighedEdge>( osmData, interpreter, new DykstraRoutingLive(osmData.TagsIndex)); }
/// <summary> /// Calculates a route to test on. /// </summary> /// <param name="from"></param> /// <param name="to"></param> /// <returns></returns> private OsmSharpRoute Calculate(GeoCoordinate from, GeoCoordinate to) { if (_router == null) { var interpreter = new OsmRoutingInterpreter(); var tagsIndex = new OsmTagsIndex(); // do the data processing. var memoryData = new DynamicGraphRouterDataSource<SimpleWeighedEdge>(tagsIndex); var targetData = new SimpleWeighedDataGraphProcessingTarget( memoryData, interpreter, memoryData.TagsIndex, VehicleEnum.Car); var dataProcessorSource = new XmlDataProcessorSource( Assembly.GetExecutingAssembly().GetManifestResourceStream( "OsmSharp.UnitTests.test_instructions.osm")); var sorter = new DataProcessorFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); _router = new Router<SimpleWeighedEdge>( memoryData, interpreter, new DykstraRoutingLive(memoryData.TagsIndex)); } RouterPoint fromPoint = _router.Resolve(VehicleEnum.Car, from); RouterPoint toPoint = _router.Resolve(VehicleEnum.Car, to); return _router.Calculate(VehicleEnum.Car, fromPoint, toPoint); }
/// <summary> /// Calculates the TSP. /// </summary> /// <param name="dataStream"></param> /// <param name="csvStream"></param> /// <param name="pbf"></param> /// <param name="vehicleEnum"></param> /// <returns></returns> private OsmSharpRoute CalculateTSP(Stream dataStream, Stream csvStream, bool pbf, VehicleEnum vehicleEnum) { // create the router. var interpreter = new OsmRoutingInterpreter(); var tagsIndex = new OsmTagsIndex(); // do the data processing. var osmData = new DynamicGraphRouterDataSource<PreProcessedEdge>(tagsIndex); var targetData = new PreProcessedDataGraphProcessingTarget( osmData, interpreter, osmData.TagsIndex, vehicleEnum); var dataProcessorSource = new XmlDataProcessorSource(dataStream); var sorter = new DataProcessorFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); IRouter<RouterPoint> router = new Router<PreProcessedEdge>(osmData, interpreter, new DykstraRoutingPreProcessed(osmData.TagsIndex)); // read the source files. const int latitudeIdx = 2; const int longitudeIdx = 3; string[][] pointStrings = OsmSharp.Tools.DelimitedFiles.DelimitedFileHandler.ReadDelimitedFileFromStream( csvStream, DelimiterType.DotCommaSeperated); var points = new List<RouterPoint>(); int cnt = 10; foreach (string[] line in pointStrings) { if (points.Count >= cnt) { break; } var latitudeString = (string)line[latitudeIdx]; var longitudeString = (string)line[longitudeIdx]; //string route_ud = (string)line[1]; double longitude = 0; double latitude = 0; if (double.TryParse(longitudeString, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out longitude) && double.TryParse(latitudeString, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out latitude)) { var point = new GeoCoordinate(latitude, longitude); RouterPoint resolved = router.Resolve(VehicleEnum.Car, point); if (resolved != null && router.CheckConnectivity(VehicleEnum.Car, resolved, 100)) { points.Add(resolved); } } } var tspSolver = new RouterTSPWrapper<RouterPoint, RouterTSP>( new RouterTSPAEXGenetic(), router, interpreter); return tspSolver.CalculateTSP(vehicleEnum, points.ToArray()); }
/// <summary> /// Builds the data source. /// </summary> /// <returns></returns> private DynamicGraphRouterDataSource<CHEdgeData> BuildData(IRoutingInterpreter interpreter) { DynamicGraphRouterDataSource<CHEdgeData> data = null; if (data == null) { OsmTagsIndex tags_index = new OsmTagsIndex(); // do the data processing. data = new DynamicGraphRouterDataSource<CHEdgeData>(tags_index); CHEdgeDataGraphProcessingTarget target_data = new CHEdgeDataGraphProcessingTarget( data, interpreter, data.TagsIndex, VehicleEnum.Car); XmlDataProcessorSource data_processor_source = new XmlDataProcessorSource( Assembly.GetExecutingAssembly().GetManifestResourceStream("OsmSharp.UnitTests.test_network.osm")); DataProcessorFilterSort sorter = new DataProcessorFilterSort(); sorter.RegisterSource(data_processor_source); target_data.RegisterSource(sorter); target_data.Pull(); } return data; }
/// <summary> /// Builds an in-memory data source from an xml data stream. /// </summary> /// <param name="stream"></param> /// <returns></returns> private DynamicGraphRouterDataSource<CHEdgeData> BuildData(Stream stream) { OsmRoutingInterpreter interpreter = new OsmRoutingInterpreter(); OsmTagsIndex tags_index = new OsmTagsIndex(); // do the data processing. DynamicGraphRouterDataSource<CHEdgeData> data = new DynamicGraphRouterDataSource<CHEdgeData>(tags_index); CHEdgeDataGraphProcessingTarget target_data = new CHEdgeDataGraphProcessingTarget( data, interpreter, data.TagsIndex, VehicleEnum.Car); XmlDataProcessorSource data_processor_source = new XmlDataProcessorSource(stream); DataProcessorFilterSort sorter = new DataProcessorFilterSort(); sorter.RegisterSource(data_processor_source); target_data.RegisterSource(sorter); target_data.Pull(); return data; }
/// <summary> /// Returns a new router. /// </summary> /// <param name="interpreter"></param> /// <param name="embedded_name"></param> /// <returns></returns> public override IRouter<RouterPoint> BuildRouter(IRoutingInterpreter interpreter, string embedded_name) { if (_data == null) { _data = new Dictionary<string, DynamicGraphRouterDataSource<CHEdgeData>>(); } DynamicGraphRouterDataSource<CHEdgeData> data = null; if (!_data.TryGetValue(embedded_name, out data)) { OsmTagsIndex tags_index = new OsmTagsIndex(); // do the data processing. data = new DynamicGraphRouterDataSource<CHEdgeData>(tags_index); CHEdgeDataGraphProcessingTarget target_data = new CHEdgeDataGraphProcessingTarget( data, interpreter, data.TagsIndex, VehicleEnum.Car); XmlDataProcessorSource data_processor_source = new XmlDataProcessorSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(string.Format( "OsmSharp.UnitTests.{0}", embedded_name))); DataProcessorFilterSort sorter = new DataProcessorFilterSort(); sorter.RegisterSource(data_processor_source); target_data.RegisterSource(sorter); target_data.Pull(); // do the pre-processing part. CHPreProcessor pre_processor = new CHPreProcessor(data, new SparseOrdering(data), new DykstraWitnessCalculator(data)); pre_processor.Start(); _data[embedded_name] = data; } return new Router<CHEdgeData>(data, interpreter, new CHRouter( data)); }