/// <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)); }
public void RoutingSerializationDataSourceTest() { const string embeddedString = "OsmSharp.Test.Unittests.test_network.osm"; // create the tags index. var tagsIndex = new TagsTableCollectionIndex(); // creates a new interpreter. var interpreter = new OsmRoutingInterpreter(); // do the data processing. var original = new DynamicGraphRouterDataSource <LiveEdge>(tagsIndex); var targetData = new LiveGraphOsmStreamTarget( original, interpreter, tagsIndex, new HugeDictionary <long, uint>(), null, false); var dataProcessorSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(embeddedString)); targetData.RegisterSource(dataProcessorSource); targetData.Pull(); // store some lat/lons. var verticesLocations = new List <GeoCoordinate>(); for (uint vertex = 1; vertex <= 5; vertex++) { float latitude, longitude; if (original.GetVertex(vertex, out latitude, out longitude)) { verticesLocations.Add( new GeoCoordinate(latitude, longitude)); } } // create serializer. var routingSerializer = new RoutingDataSourceLiveEdgeSerializer(false); // serialize/deserialize. TagsCollectionBase metaData = new TagsCollection(); metaData.Add("some_key", "some_value"); IBasicRouterDataSource <LiveEdge> deserializedVersion; byte[] byteArray; using (var stream = new MemoryStream()) { try { routingSerializer.Serialize(stream, original, metaData); byteArray = stream.ToArray(); } catch (Exception) { if (Debugger.IsAttached) { Debugger.Break(); } throw; } } using (var stream = new MemoryStream(byteArray)) { try { deserializedVersion = routingSerializer.Deserialize(stream, out metaData, false); } catch (Exception) { if (Debugger.IsAttached) { Debugger.Break(); } throw; } } //Assert.AreEqual(original.VertexCount, deserializedVersion.VertexCount); Assert.AreEqual(original.TagsIndex.Get(0), deserializedVersion.TagsIndex.Get(0)); for (uint vertex = 1; vertex <= 5; vertex++) { float latitude, longitude; if (deserializedVersion.GetVertex(vertex, out latitude, out longitude)) { Assert.AreEqual(verticesLocations[(int)vertex - 1].Latitude, latitude, 0.000001); Assert.AreEqual(verticesLocations[(int)vertex - 1].Longitude, longitude, 0.000001); } } }
public void RoutingSerializationRoutingComparisonTest() { const string embeddedString = "OsmSharp.Test.Unittests.test_network_real1.osm"; // creates a new interpreter. var interpreter = new OsmRoutingInterpreter(); // do the data processing. var original = LiveGraphOsmStreamTarget.Preprocess(new XmlOsmStreamSource( Assembly.GetExecutingAssembly() .GetManifestResourceStream(embeddedString)), interpreter); // create serializer. var routingSerializer = new RoutingDataSourceLiveEdgeSerializer(false); // serialize/deserialize. TagsCollectionBase metaData = new TagsCollection(); metaData.Add("some_key", "some_value"); byte[] byteArray; using (var stream = new MemoryStream()) { try { routingSerializer.Serialize(stream, original, metaData); byteArray = stream.ToArray(); } catch (Exception) { if (Debugger.IsAttached) { Debugger.Break(); } throw; } } IBasicRouterDataSource <LiveEdge> deserializedVersion = routingSerializer.Deserialize(new MemoryStream(byteArray), out metaData); Assert.AreEqual(original.TagsIndex.Get(0), deserializedVersion.TagsIndex.Get(0)); // // try to do some routing on the deserialized version. // var basicRouter = // new DykstraRoutingLive(deserializedVersion.TagsIndex); // Router router = Router.CreateLiveFrom( // deserializedVersion, basicRouter, interpreter); //// loop over all nodes and resolve their locations. //var resolvedReference = new RouterPoint[original.VertexCount]; //var resolved = new RouterPoint[original.VertexCount]; //for (uint idx = 1; idx < original.VertexCount + 1; idx++) //{ // resolve each vertex. // float latitude, longitude; // if (original.GetVertex(idx, out latitude, out longitude)) // { // resolvedReference[idx - 1] = referenceRouter.Resolve(Vehicle.Car, new GeoCoordinate(latitude, longitude)); // resolved[idx - 1] = router.Resolve(Vehicle.Car, new GeoCoordinate(latitude, longitude)); // } // Assert.IsNotNull(resolvedReference[idx - 1]); // Assert.IsNotNull(resolved[idx - 1]); // Assert.AreEqual(resolvedReference[idx - 1].Location.Latitude, // resolved[idx - 1].Location.Latitude, 0.0001); // Assert.AreEqual(resolvedReference[idx - 1].Location.Longitude, // resolved[idx - 1].Location.Longitude, 0.0001); //} // // check all the routes having the same weight(s). // for (int fromIdx = 0; fromIdx < resolved.Length; fromIdx++) // { // for (int toIdx = 0; toIdx < resolved.Length; toIdx++) // { // OsmSharpRoute referenceRoute = referenceRouter.Calculate(VehicleEnum.Car, // resolvedReference[fromIdx], resolvedReference[toIdx]); // OsmSharpRoute route = router.Calculate(VehicleEnum.Car, // resolved[fromIdx], resolved[toIdx]); // Assert.IsNotNull(referenceRoute); // Assert.IsNotNull(route); // //Assert.AreEqual(referenceRoute.TotalDistance, route.TotalDistance, 0.1); // // TODO: meta data is missing in some CH routing; see issue // //Assert.AreEqual(reference_route.TotalTime, route.TotalTime, 0.0001); // } // } }
public void RoutingSerializationCompressedRoutingTest() { const string embeddedString = "OsmSharp.Test.Unittests.test_network.osm"; // create the tags index. var tagsIndex = new TagsTableCollectionIndex(); // creates a new interpreter. var interpreter = new OsmRoutingInterpreter(); // do the data processing. var original = new DynamicGraphRouterDataSource <LiveEdge>(tagsIndex); var targetData = new LiveGraphOsmStreamTarget( original, interpreter, tagsIndex, new HugeDictionary <long, uint>(), null, false); var dataProcessorSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(embeddedString)); targetData.RegisterSource(dataProcessorSource); targetData.Pull(); // create serializer. var routingSerializer = new RoutingDataSourceLiveEdgeSerializer(true); // serialize/deserialize. TagsCollectionBase metaData = new TagsCollection(); metaData.Add("some_key", "some_value"); byte[] byteArray; using (var stream = new MemoryStream()) { try { routingSerializer.Serialize(stream, original, metaData); byteArray = stream.ToArray(); } catch (Exception) { if (Debugger.IsAttached) { Debugger.Break(); } throw; } } var deserializedVersion = routingSerializer.Deserialize(new MemoryStream(byteArray), out metaData); Assert.AreEqual(original.TagsIndex.Get(0), deserializedVersion.TagsIndex.Get(0)); // try to do some routing on the deserialized version. var basicRouter = new DykstraRoutingLive(); var router = Router.CreateLiveFrom(deserializedVersion, basicRouter, interpreter); var source = router.Resolve(Vehicle.Car, new GeoCoordinate(51.0578532, 3.7192229)); var target = router.Resolve(Vehicle.Car, new GeoCoordinate(51.0576193, 3.7191801)); // calculate the route. var route = router.Calculate(Vehicle.Car, source, target); Assert.IsNotNull(route); Assert.AreEqual(5, route.Segments.Length); float latitude, longitude; //deserializedVersion.GetVertex(20, out latitude, out longitude); Assert.AreEqual(51.0578537, route.Segments[0].Latitude, 0.00001); Assert.AreEqual(3.71922255, route.Segments[0].Longitude, 0.00001); Assert.AreEqual(RouteSegmentType.Start, route.Segments[0].Type); //deserializedVersion.GetVertex(21, out latitude, out longitude); Assert.AreEqual(51.0578537, route.Segments[1].Latitude, 0.00001); Assert.AreEqual(3.71956515, route.Segments[1].Longitude, 0.00001); Assert.AreEqual(RouteSegmentType.Along, route.Segments[1].Type); //deserializedVersion.GetVertex(16, out latitude, out longitude); Assert.AreEqual(51.05773, route.Segments[2].Latitude, 0.00001); Assert.AreEqual(3.719745, route.Segments[2].Longitude, 0.00001); Assert.AreEqual(RouteSegmentType.Along, route.Segments[2].Type); //deserializedVersion.GetVertex(22, out latitude, out longitude); Assert.AreEqual(51.05762, route.Segments[3].Latitude, 0.00001); Assert.AreEqual(3.71965766, route.Segments[3].Longitude, 0.00001); Assert.AreEqual(RouteSegmentType.Along, route.Segments[3].Type); deserializedVersion.GetVertex(23, out latitude, out longitude); Assert.AreEqual(51.05762, route.Segments[4].Latitude, 0.00001); Assert.AreEqual(3.71917963, route.Segments[4].Longitude, 0.00001); Assert.AreEqual(RouteSegmentType.Stop, route.Segments[4].Type); }
/// <summary> /// Test resolving all nodes. /// </summary> protected void DoTestResolveBetweenNodes() { var interpreter = new OsmRoutingInterpreter(); IBasicRouterDataSource <EdgeData> data = this.BuildData(interpreter); IRoutingAlgorithm <EdgeData> basicRouter = this.BuildBasicRouter(data); const float delta = 0.001f; var result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0578761, 3.7193972), delta, null, null, null); Assert.IsTrue((result.Vertex1 == 20 && result.Vertex2 == 21) || (result.Vertex1 == 21 && result.Vertex2 == 20)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0576510, 3.7194124), delta, null, null, null); //,-104, -14, -12 Assert.IsTrue((result.Vertex1 == 22 && result.Vertex2 == 23) || (result.Vertex1 == 23 && result.Vertex2 == 22)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0576829, 3.7196791), delta, null, null, null); //,-105, -12, -10 Assert.IsTrue((result.Vertex1 == 22 && result.Vertex2 == 16) || (result.Vertex1 == 16 && result.Vertex2 == 22)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0577819, 3.7196308), delta, null, null, null); //,-106, -10, -8 Assert.IsTrue((result.Vertex1 == 21 && result.Vertex2 == 16) || (result.Vertex1 == 16 && result.Vertex2 == 21)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0577516, 3.7198975), delta, null, null, null); //,-107, -10, -18 Assert.IsTrue((result.Vertex1 == 17 && result.Vertex2 == 16) || (result.Vertex1 == 16 && result.Vertex2 == 17)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0578218, 3.7200626), delta, null, null, null); //,-108, -18, -20 Assert.IsTrue((result.Vertex1 == 17 && result.Vertex2 == 7) || (result.Vertex1 == 7 && result.Vertex2 == 17)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0578170, 3.7202480), delta, null, null, null); //,-109, -20, -76 Assert.IsTrue((result.Vertex1 == 6 && result.Vertex2 == 7) || (result.Vertex1 == 7 && result.Vertex2 == 6)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0577580, 3.7204004), delta, null, null, null); //,-110, -76, -74 Assert.IsTrue((result.Vertex1 == 5 && result.Vertex2 == 6) || (result.Vertex1 == 6 && result.Vertex2 == 5)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0579032, 3.7204258), delta, null, null, null); //,-111, -74, -72 Assert.IsTrue((result.Vertex1 == 1 && result.Vertex2 == 5) || (result.Vertex1 == 5 && result.Vertex2 == 1)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0580453, 3.7204614), delta, null, null, null); //,-112, -72, -70 Assert.IsTrue((result.Vertex1 == 4 && result.Vertex2 == 1) || (result.Vertex1 == 1 && result.Vertex2 == 4)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0581938, 3.7203953), delta, null, null, null); //,-113, -70, -68 Assert.IsTrue((result.Vertex1 == 3 && result.Vertex2 == 4) || (result.Vertex1 == 4 && result.Vertex2 == 3)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0581826, 3.7201413), delta, null, null, null); //,-114, -46, -68 Assert.IsTrue((result.Vertex1 == 3 && result.Vertex2 == 2) || (result.Vertex1 == 2 && result.Vertex2 == 3)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0580310, 3.7201998), delta, null, null, null); //,-115, -46, -72 Assert.IsTrue((result.Vertex1 == 2 && result.Vertex2 == 1) || (result.Vertex1 == 1 && result.Vertex2 == 2)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0579208, 3.7200525), delta, null, null, null); //,-116, -20, -22 Assert.IsTrue((result.Vertex1 == 11 && result.Vertex2 == 7) || (result.Vertex1 == 7 && result.Vertex2 == 11)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0580134, 3.7199966), delta, null, null, null); //,-117, -46, -22 Assert.IsTrue((result.Vertex1 == 2 && result.Vertex2 == 11) || (result.Vertex1 == 11 && result.Vertex2 == 2)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0581251, 3.7198950), delta, null, null, null); //,-118, -46, -48 Assert.IsTrue((result.Vertex1 == 18 && result.Vertex2 == 2) || (result.Vertex1 == 2 && result.Vertex2 == 18)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0579479, 3.7197985), delta, null, null, null); //,-119, -22, -56 Assert.IsTrue((result.Vertex1 == 10 && result.Vertex2 == 11) || (result.Vertex1 == 11 && result.Vertex2 == 10)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0580166, 3.7195496), delta, null, null, null); //,-120, -56, -65 Assert.IsTrue((result.Vertex1 == 10 && result.Vertex2 == 9) || (result.Vertex1 == 9 && result.Vertex2 == 10)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0581299, 3.7195673), delta, null, null, null); //,-121, -65, -50 Assert.IsTrue((result.Vertex1 == 8 && result.Vertex2 == 9) || (result.Vertex1 == 9 && result.Vertex2 == 8)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0581651, 3.7196664), delta, null, null, null); //,-122, -50, -48 Assert.IsTrue((result.Vertex1 == 8 && result.Vertex2 == 18) || (result.Vertex1 == 18 && result.Vertex2 == 8)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0582050, 3.7194505), delta, null, null, null); //,-123, -50, -52 Assert.IsTrue((result.Vertex1 == 19 && result.Vertex2 == 8) || (result.Vertex1 == 8 && result.Vertex2 == 19)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0582082, 3.7191330), delta, null, null, null); //,-124, -52, -54 Assert.IsTrue((result.Vertex1 == 15 && result.Vertex2 == 19) || (result.Vertex1 == 19 && result.Vertex2 == 15)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0581651, 3.7189628), delta, null, null, null); //,-125, -54, -62 Assert.IsTrue((result.Vertex1 == 15 && result.Vertex2 == 14) || (result.Vertex1 == 14 && result.Vertex2 == 15)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0580725, 3.7189781), delta, null, null, null); //,-126, -62, -60 Assert.IsTrue((result.Vertex1 == 14 && result.Vertex2 == 13) || (result.Vertex1 == 13 && result.Vertex2 == 14)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0580006, 3.7191305), delta, null, null, null); //,-127, -60, -58 Assert.IsTrue((result.Vertex1 == 13 && result.Vertex2 == 12) || (result.Vertex1 == 12 && result.Vertex2 == 13)); result = basicRouter.SearchClosest(data, interpreter, Vehicle.Car, new GeoCoordinate(51.0579783, 3.7194149), delta, null, null, null); //,-128, -58, -56 Assert.IsTrue((result.Vertex1 == 10 && result.Vertex2 == 12) || (result.Vertex1 == 12 && result.Vertex2 == 10)); }
public void RoutingSerializationV2CHRoutingComparisonTest() { const string embeddedString = "OsmSharp.UnitTests.test_network_real1.osm"; // creates a new interpreter. var interpreter = new OsmRoutingInterpreter(); // do the data processing. var original = CHEdgeGraphOsmStreamWriter.Preprocess(new XmlOsmStreamSource( Assembly.GetExecutingAssembly() .GetManifestResourceStream(embeddedString)), interpreter, Vehicle.Car); // create serializer. var routingSerializer = new OsmSharp.Routing.CH.Serialization.Sorted.CHEdgeDataDataSourceSerializer(true); // serialize/deserialize. byte[] byteArray; using (var stream = new MemoryStream()) { try { routingSerializer.Serialize(stream, original); byteArray = stream.ToArray(); } catch (Exception) { if (Debugger.IsAttached) { Debugger.Break(); } throw; } } IBasicRouterDataSource <CHEdgeData> deserializedVersion = routingSerializer.Deserialize(new MemoryStream(byteArray)); Assert.AreEqual(original.TagsIndex.Get(0), deserializedVersion.TagsIndex.Get(0)); // create reference router. original = CHEdgeGraphOsmStreamWriter.Preprocess(new XmlOsmStreamSource( Assembly.GetExecutingAssembly() .GetManifestResourceStream(embeddedString)), interpreter, Vehicle.Car); var basicRouterOriginal = new CHRouter(original); Router referenceRouter = Router.CreateCHFrom( original, basicRouterOriginal, interpreter); // try to do some routing on the deserialized version. var basicRouter = new CHRouter(deserializedVersion); Router router = Router.CreateCHFrom( deserializedVersion, basicRouter, interpreter); // loop over all nodes and resolve their locations. var resolvedReference = new RouterPoint[original.VertexCount]; var resolved = new RouterPoint[original.VertexCount]; for (uint idx = 1; idx < original.VertexCount + 1; idx++) { // resolve each vertex. float latitude, longitude; if (original.GetVertex(idx, out latitude, out longitude)) { resolvedReference[idx - 1] = referenceRouter.Resolve(Vehicle.Car, new GeoCoordinate(latitude, longitude)); resolved[idx - 1] = router.Resolve(Vehicle.Car, new GeoCoordinate(latitude, longitude)); } Assert.IsNotNull(resolvedReference[idx - 1]); Assert.IsNotNull(resolved[idx - 1]); //Assert.AreEqual(resolvedReference[idx - 1].Location.Latitude, // resolved[idx - 1].Location.Latitude, 0.0001); //Assert.AreEqual(resolvedReference[idx - 1].Location.Longitude, // resolved[idx - 1].Location.Longitude, 0.0001); } //// check all the routes having the same weight(s). //for (int fromIdx = 0; fromIdx < resolved.Length; fromIdx++) //{ // for (int toIdx = 0; toIdx < resolved.Length; toIdx++) // { // OsmSharpRoute referenceRoute = referenceRouter.Calculate(Vehicle.Car, // resolvedReference[fromIdx], resolvedReference[toIdx]); // OsmSharpRoute route = router.Calculate(Vehicle.Car, // resolved[fromIdx], resolved[toIdx]); // if (route != null) // { // Assert.IsNotNull(referenceRoute); // } // else // { // Assert.IsNull(referenceRoute); // } // //Assert.AreEqual(referenceRoute.TotalDistance, route.TotalDistance, 0.1); // // TODO: meta data is missing in some CH routing; see issue // //Assert.AreEqual(reference_route.TotalTime, route.TotalTime, 0.0001); // } //} }
public void TestCHDataSourceTopologicalSortTest() { const string embeddedString = "OsmSharp.Test.Unittests.test_network_real1.osm"; // creates a new interpreter. var interpreter = new OsmRoutingInterpreter(); // do the data processing. var original = CHEdgeGraphOsmStreamTarget.Preprocess(new XmlOsmStreamSource( Assembly.GetExecutingAssembly() .GetManifestResourceStream(embeddedString)), interpreter, Vehicle.Car); var sortedGraph = CHEdgeDataDataSourceSerializer.SortGraph(original); original = CHEdgeGraphOsmStreamTarget.Preprocess(new XmlOsmStreamSource( Assembly.GetExecutingAssembly() .GetManifestResourceStream(embeddedString)), interpreter, Vehicle.Car); var basicRouterOriginal = new CHRouter(); Router referenceRouter = Router.CreateCHFrom( original, basicRouterOriginal, interpreter); // try to do some routing on the deserialized version. var basicRouter = new CHRouter(); Router router = Router.CreateCHFrom( new DynamicGraphRouterDataSource <CHEdgeData>(sortedGraph, original.TagsIndex), basicRouter, interpreter); // loop over all nodes and resolve their locations. var resolvedReference = new RouterPoint[original.VertexCount]; var resolved = new RouterPoint[original.VertexCount]; for (uint idx = 1; idx < original.VertexCount + 1; idx++) { // resolve each vertex. float latitude, longitude; if (original.GetVertex(idx, out latitude, out longitude)) { resolvedReference[idx - 1] = referenceRouter.Resolve(Vehicle.Car, new GeoCoordinate(latitude, longitude)); resolved[idx - 1] = router.Resolve(Vehicle.Car, new GeoCoordinate(latitude, longitude)); } Assert.IsNotNull(resolvedReference[idx - 1]); Assert.IsNotNull(resolved[idx - 1]); //Assert.AreEqual(resolvedReference[idx - 1].Location.Latitude, // resolved[idx - 1].Location.Latitude, 0.0001); //Assert.AreEqual(resolvedReference[idx - 1].Location.Longitude, // resolved[idx - 1].Location.Longitude, 0.0001); } //// check all the routes having the same weight(s). //for (int fromIdx = 0; fromIdx < resolved.Length; fromIdx++) //{ // for (int toIdx = 0; toIdx < resolved.Length; toIdx++) // { // OsmSharpRoute referenceRoute = referenceRouter.Calculate(Vehicle.Car, // resolvedReference[fromIdx], resolvedReference[toIdx]); // OsmSharpRoute route = router.Calculate(Vehicle.Car, // resolved[fromIdx], resolved[toIdx]); // Assert.IsNotNull(referenceRoute); // Assert.IsNotNull(route); // //Assert.AreEqual(referenceRoute.TotalDistance, route.TotalDistance, 0.1); // // TODO: meta data is missing in some CH routing; see issue // //Assert.AreEqual(reference_route.TotalTime, route.TotalTime, 0.0001); // } //} }
public void TestOsmRoutingInterpreterCanBeTraversedBy() { var interpreter = new OsmRoutingInterpreter(); TagsCollection tags = new SimpleTagsCollection(); tags["highway"] = "footway"; Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Pedestrian)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bicycle)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Moped)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.MotorCycle)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Car)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.SmallTruck)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.BigTruck)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bus)); tags["highway"] = "cycleway"; Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Pedestrian)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bicycle)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Moped)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.MotorCycle)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Car)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.SmallTruck)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.BigTruck)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bus)); tags["highway"] = "bridleway"; Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Pedestrian)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bicycle)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Moped)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.MotorCycle)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Car)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.SmallTruck)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.BigTruck)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bus)); tags["highway"] = "path"; Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Pedestrian)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bicycle)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Moped)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.MotorCycle)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Car)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.SmallTruck)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.BigTruck)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bus)); tags["highway"] = "pedestrian"; Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Pedestrian)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bicycle)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Moped)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.MotorCycle)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Car)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.SmallTruck)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.BigTruck)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bus)); tags["highway"] = "road"; Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Pedestrian)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bicycle)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Moped)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.MotorCycle)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Car)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.SmallTruck)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.BigTruck)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bus)); tags["highway"] = "living_street"; Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Pedestrian)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bicycle)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Moped)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.MotorCycle)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Car)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.SmallTruck)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.BigTruck)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bus)); tags["highway"] = "residential"; Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Pedestrian)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bicycle)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Moped)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.MotorCycle)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Car)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.SmallTruck)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.BigTruck)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bus)); tags["highway"] = "unclassified"; Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Pedestrian)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bicycle)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Moped)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.MotorCycle)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Car)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.SmallTruck)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.BigTruck)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bus)); tags["highway"] = "tertiary"; Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Pedestrian)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bicycle)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Moped)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.MotorCycle)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Car)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.SmallTruck)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.BigTruck)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bus)); tags["highway"] = "secondary"; Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Pedestrian)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bicycle)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Moped)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.MotorCycle)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Car)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.SmallTruck)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.BigTruck)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bus)); tags["highway"] = "primary"; Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Pedestrian)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bicycle)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Moped)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.MotorCycle)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Car)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.SmallTruck)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.BigTruck)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bus)); tags["highway"] = "trunk"; Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Pedestrian)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bicycle)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Moped)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.MotorCycle)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Car)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.SmallTruck)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.BigTruck)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bus)); tags["highway"] = "motorway"; Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Pedestrian)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bicycle)); Assert.IsFalse(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Moped)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.MotorCycle)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Car)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.SmallTruck)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.BigTruck)); Assert.IsTrue(interpreter.EdgeInterpreter.CanBeTraversedBy(tags, Vehicle.Bus)); }
/// <summary> /// Calculates the TSP. /// </summary> /// <param name="dataStream"></param> /// <param name="csvStream"></param> /// <param name="pbf"></param> /// <param name="vehicleEnum"></param> /// <returns></returns> private Route CalculateTSP(Stream dataStream, Stream csvStream, bool pbf, Vehicle vehicleEnum) { // create the router. var interpreter = new OsmRoutingInterpreter(); var router = Router.CreateLiveFrom( new XmlOsmStreamSource(dataStream), interpreter); // read the source files. const int latitudeIdx = 2; const int longitudeIdx = 3; string[][] pointStrings = 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(Vehicle.Car, point); if (resolved != null && router.CheckConnectivity(Vehicle.Car, resolved, 100)) { points.Add(resolved); } } } // test if routes exists. var weights = router.CalculateManyToManyWeight(Vehicle.Car, points.ToArray(), points.ToArray()); for (int fromIdx = 0; fromIdx < points.Count; fromIdx++) { for (int toIdx = 0; toIdx < points.Count; toIdx++) { var weight = router.CalculateWeight(Vehicle.Car, points[fromIdx], points[toIdx]); Assert.AreEqual(weight, weights[fromIdx][toIdx]); } } // create and execute solver. var tspSolver = new RouterTSPWrapper <RouterTSP>( new RouterTSPAEXGenetic(), router, interpreter); return(tspSolver.CalculateTSP(vehicleEnum, points.ToArray())); }
public void RoutingSerializationV2CHRoutingComparisonTest() { const string embeddedString = "OsmSharp.Test.Unittests.test_network_real1.osm"; // creates a new interpreter. var interpreter = new OsmRoutingInterpreter(); // do the data processing. var original = CHEdgeGraphOsmStreamTarget.Preprocess(new XmlOsmStreamSource( Assembly.GetExecutingAssembly() .GetManifestResourceStream(embeddedString)), interpreter, Vehicle.Car); // create serializer. var routingSerializer = new OsmSharp.Routing.CH.Serialization.Sorted.CHEdgeDataDataSourceSerializer(); // serialize/deserialize. TagsCollectionBase metaData = new TagsCollection(); metaData.Add("some_key", "some_value"); byte[] byteArray; using (var stream = new MemoryStream()) { try { routingSerializer.Serialize(stream, original, metaData); byteArray = stream.ToArray(); } catch (Exception) { if (Debugger.IsAttached) { Debugger.Break(); } throw; } } IBasicRouterDataSource <CHEdgeData> deserializedVersion = routingSerializer.Deserialize(new MemoryStream(byteArray), out metaData); Assert.AreEqual(original.TagsIndex.Get(0), deserializedVersion.TagsIndex.Get(0)); // create reference router. original = CHEdgeGraphOsmStreamTarget.Preprocess(new XmlOsmStreamSource( Assembly.GetExecutingAssembly() .GetManifestResourceStream(embeddedString)), interpreter, Vehicle.Car); var basicRouterOriginal = new CHRouter(); Router referenceRouter = Router.CreateCHFrom( original, basicRouterOriginal, interpreter); // try to do some routing on the deserialized version. var basicRouter = new CHRouter(); Router router = Router.CreateCHFrom( deserializedVersion, basicRouter, interpreter); //this.TestCompareAll(original, referenceRouter, router); }
/// <summary> /// Tests access restrictions on all different highway times. /// </summary> protected void DoAccessTestsHighways() { var interpreter = new OsmRoutingInterpreter(); const double longitudeLeft = 4.7696568; const double longitudeRight = 4.8283861; var footwayFrom = new GeoCoordinate(51.2, longitudeLeft); var footwayTo = new GeoCoordinate(51.2, longitudeRight); var cyclewayFrom = new GeoCoordinate(51.1, longitudeLeft); var cyclewayTo = new GeoCoordinate(51.1, longitudeRight); var bridlewayFrom = new GeoCoordinate(51.0, longitudeLeft); var bridlewayTo = new GeoCoordinate(51.0, longitudeRight); var pathFrom = new GeoCoordinate(50.9, longitudeLeft); var pathTo = new GeoCoordinate(50.9, longitudeRight); var pedestrianFrom = new GeoCoordinate(50.8, longitudeLeft); var pedestrianTo = new GeoCoordinate(50.8, longitudeRight); var roadFrom = new GeoCoordinate(50.7, longitudeLeft); var roadTo = new GeoCoordinate(50.7, longitudeRight); var livingStreetFrom = new GeoCoordinate(50.6, longitudeLeft); var livingStreetTo = new GeoCoordinate(50.6, longitudeRight); var residentialFrom = new GeoCoordinate(50.5, longitudeLeft); var residentialTo = new GeoCoordinate(50.5, longitudeRight); var unclassifiedFrom = new GeoCoordinate(50.4, longitudeLeft); var unclassifiedTo = new GeoCoordinate(50.4, longitudeRight); var tertiaryFrom = new GeoCoordinate(50.3, longitudeLeft); var tertiaryTo = new GeoCoordinate(50.3, longitudeRight); var secondaryFrom = new GeoCoordinate(50.2, longitudeLeft); var secondaryTo = new GeoCoordinate(50.2, longitudeRight); var primaryFrom = new GeoCoordinate(50.1, longitudeLeft); var primaryTo = new GeoCoordinate(50.1, longitudeRight); var trunkFrom = new GeoCoordinate(50.0, longitudeLeft); var trunkTo = new GeoCoordinate(50.0, longitudeRight); var motorwayFrom = new GeoCoordinate(49.9, longitudeLeft); var motorwayTo = new GeoCoordinate(49.9, longitudeRight); // pedestrian Assert.IsTrue(this.DoTestForVehicle(Vehicle.Pedestrian, footwayFrom, footwayTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.Pedestrian, cyclewayFrom, cyclewayTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.Pedestrian, bridlewayFrom, bridlewayTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Pedestrian, pathFrom, pathTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Pedestrian, pedestrianFrom, pedestrianTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Pedestrian, roadFrom, roadTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Pedestrian, livingStreetFrom, livingStreetTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Pedestrian, residentialFrom, residentialTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Pedestrian, unclassifiedFrom, unclassifiedTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Pedestrian, tertiaryFrom, tertiaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Pedestrian, secondaryFrom, secondaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Pedestrian, primaryFrom, primaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Pedestrian, trunkFrom, trunkTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.Pedestrian, motorwayFrom, motorwayTo, interpreter)); // bicycle Assert.IsFalse(this.DoTestForVehicle(Vehicle.Bicycle, footwayFrom, footwayTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Bicycle, cyclewayFrom, cyclewayTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.Bicycle, bridlewayFrom, bridlewayTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Bicycle, pathFrom, pathTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.Bicycle, pedestrianFrom, pedestrianTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Bicycle, roadFrom, roadTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Bicycle, livingStreetFrom, livingStreetTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Bicycle, residentialFrom, residentialTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Bicycle, unclassifiedFrom, unclassifiedTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Bicycle, tertiaryFrom, tertiaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Bicycle, secondaryFrom, secondaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Bicycle, primaryFrom, primaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Bicycle, trunkFrom, trunkTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.Bicycle, motorwayFrom, motorwayTo, interpreter)); // moped Assert.IsFalse(this.DoTestForVehicle(Vehicle.Moped, footwayFrom, footwayTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.Moped, cyclewayFrom, cyclewayTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.Moped, bridlewayFrom, bridlewayTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.Moped, pathFrom, pathTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.Moped, pedestrianFrom, pedestrianTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Moped, roadFrom, roadTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Moped, livingStreetFrom, livingStreetTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Moped, residentialFrom, residentialTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Moped, unclassifiedFrom, unclassifiedTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Moped, tertiaryFrom, tertiaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Moped, secondaryFrom, secondaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Moped, primaryFrom, primaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Moped, trunkFrom, trunkTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.Moped, motorwayFrom, motorwayTo, interpreter)); // moped Assert.IsFalse(this.DoTestForVehicle(Vehicle.MotorCycle, footwayFrom, footwayTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.MotorCycle, cyclewayFrom, cyclewayTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.MotorCycle, bridlewayFrom, bridlewayTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.MotorCycle, pathFrom, pathTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.MotorCycle, pedestrianFrom, pedestrianTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.MotorCycle, roadFrom, roadTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.MotorCycle, livingStreetFrom, livingStreetTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.MotorCycle, residentialFrom, residentialTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.MotorCycle, unclassifiedFrom, unclassifiedTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.MotorCycle, tertiaryFrom, tertiaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.MotorCycle, secondaryFrom, secondaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.MotorCycle, primaryFrom, primaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.MotorCycle, trunkFrom, trunkTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.MotorCycle, motorwayFrom, motorwayTo, interpreter)); // car Assert.IsFalse(this.DoTestForVehicle(Vehicle.Car, footwayFrom, footwayTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.Car, cyclewayFrom, cyclewayTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.Car, bridlewayFrom, bridlewayTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.Car, pathFrom, pathTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.Car, pedestrianFrom, pedestrianTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Car, roadFrom, roadTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Car, livingStreetFrom, livingStreetTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Car, residentialFrom, residentialTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Car, unclassifiedFrom, unclassifiedTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Car, tertiaryFrom, tertiaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Car, secondaryFrom, secondaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Car, primaryFrom, primaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Car, trunkFrom, trunkTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Car, motorwayFrom, motorwayTo, interpreter)); // small truck Assert.IsFalse(this.DoTestForVehicle(Vehicle.SmallTruck, footwayFrom, footwayTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.SmallTruck, cyclewayFrom, cyclewayTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.SmallTruck, bridlewayFrom, bridlewayTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.SmallTruck, pathFrom, pathTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.SmallTruck, pedestrianFrom, pedestrianTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.SmallTruck, roadFrom, roadTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.SmallTruck, livingStreetFrom, livingStreetTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.SmallTruck, residentialFrom, residentialTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.SmallTruck, unclassifiedFrom, unclassifiedTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.SmallTruck, tertiaryFrom, tertiaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.SmallTruck, secondaryFrom, secondaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.SmallTruck, primaryFrom, primaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.SmallTruck, trunkFrom, trunkTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.SmallTruck, motorwayFrom, motorwayTo, interpreter)); // big truck Assert.IsFalse(this.DoTestForVehicle(Vehicle.BigTruck, footwayFrom, footwayTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.BigTruck, cyclewayFrom, cyclewayTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.BigTruck, bridlewayFrom, bridlewayTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.BigTruck, pathFrom, pathTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.BigTruck, pedestrianFrom, pedestrianTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.BigTruck, roadFrom, roadTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.BigTruck, livingStreetFrom, livingStreetTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.BigTruck, residentialFrom, residentialTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.BigTruck, unclassifiedFrom, unclassifiedTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.BigTruck, tertiaryFrom, tertiaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.BigTruck, secondaryFrom, secondaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.BigTruck, primaryFrom, primaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.BigTruck, trunkFrom, trunkTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.BigTruck, motorwayFrom, motorwayTo, interpreter)); // bus Assert.IsFalse(this.DoTestForVehicle(Vehicle.Bus, footwayFrom, footwayTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.Bus, cyclewayFrom, cyclewayTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.Bus, bridlewayFrom, bridlewayTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.Bus, pathFrom, pathTo, interpreter)); Assert.IsFalse(this.DoTestForVehicle(Vehicle.Bus, pedestrianFrom, pedestrianTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Bus, roadFrom, roadTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Bus, livingStreetFrom, livingStreetTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Bus, residentialFrom, residentialTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Bus, unclassifiedFrom, unclassifiedTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Bus, tertiaryFrom, tertiaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Bus, secondaryFrom, secondaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Bus, primaryFrom, primaryTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Bus, trunkFrom, trunkTo, interpreter)); Assert.IsTrue(this.DoTestForVehicle(Vehicle.Bus, motorwayFrom, motorwayTo, interpreter)); }
/// <summary> /// Tests preprocessing data from a PBF file. /// </summary> /// <param name="name"></param> /// <param name="pbfFile"></param> public static void TestSerialization(string name, string pbfFile) { var testFile = new FileInfo(string.Format(@".\TestFiles\{0}", pbfFile)); var performanceInfo = new PerformanceInfoConsumer("LiveSerializerFlatFile.Serialize", 100000); performanceInfo.Start(); performanceInfo.Report("Pulling from {0}...", testFile.Name); var stream = testFile.OpenRead(); var source = new PBFOsmStreamSource(stream); var progress = new OsmStreamFilterProgress(); progress.RegisterSource(source); var testOutputFile = new FileInfo(@"test.routing"); testOutputFile.Delete(); Stream writeStream = testOutputFile.OpenWrite(); var tagsIndex = new TagsTableCollectionIndex(); var interpreter = new OsmRoutingInterpreter(); var graph = new DynamicGraphRouterDataSource <LiveEdge>(tagsIndex); var routingSerializer = new LiveEdgeFlatfileSerializer(); // read from the OSM-stream. using (var fileFactory = new MemoryMappedFileFactory(@"d:\temp\")) { using (var memoryMappedGraph = new MemoryMappedGraph <LiveEdge>(10000, fileFactory)) { using (var coordinates = new HugeCoordinateIndex(fileFactory, 10000)) { var memoryData = new DynamicGraphRouterDataSource <LiveEdge>(memoryMappedGraph, tagsIndex); var targetData = new LiveGraphOsmStreamTarget(memoryData, new OsmRoutingInterpreter(), tagsIndex, coordinates); targetData.RegisterSource(progress); targetData.Pull(); performanceInfo.Stop(); performanceInfo = new PerformanceInfoConsumer("LiveSerializerFlatFile.Serialize", 100000); performanceInfo.Start(); performanceInfo.Report("Writing file for {0}...", testFile.Name); var metaData = new TagsCollection(); metaData.Add("some_key", "some_value"); routingSerializer.Serialize(writeStream, memoryData, metaData); } } } stream.Dispose(); writeStream.Dispose(); OsmSharp.Logging.Log.TraceEvent("LiveSerializerFlatFile", OsmSharp.Logging.TraceEventType.Information, string.Format("Serialized file: {0}KB", testOutputFile.Length / 1024)); performanceInfo.Stop(); performanceInfo = new PerformanceInfoConsumer("LiveSerializerFlatFile.Serialize", 100000); performanceInfo.Start(); performanceInfo.Report("Reading file for {0}...", testFile.Name); var testInputFile = new FileInfo(@"europe-latest.osm.pbf.routing"); Stream readStream = testInputFile.OpenRead(); var deserializedGraph = routingSerializer.Deserialize(readStream, false); readStream.Dispose(); OsmSharp.Logging.Log.TraceEvent("LiveSerializerFlatFile", OsmSharp.Logging.TraceEventType.Information, string.Format("Read: {0}KB", testInputFile.Length / 1024)); OsmSharp.Logging.Log.TraceEvent("LiveSerializerFlatFile", Logging.TraceEventType.Information, deserializedGraph.ToInvariantString()); performanceInfo.Stop(); }
public void RoutingRegressionTest3() { var interpreter = new OsmRoutingInterpreter(); var tagsIndex = new TagsIndex(); // do the data processing. var memoryData = new RouterDataSource <Edge>(new Graph <Edge>(), tagsIndex); var targetData = new GraphOsmStreamTarget(memoryData, interpreter, tagsIndex); var dataProcessorSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream("OsmSharp.Routing.Test.data.test_network.osm")); var sorter = new OsmStreamFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); var basicRouter = new Dykstra(); var router = Router.CreateFrom(memoryData, basicRouter, interpreter); // build coordinates list of resolved points. var testPoints = new List <GeoCoordinate>(); testPoints.Add(new GeoCoordinate(51.0581719, 3.7201622)); testPoints.Add(new GeoCoordinate(51.0580439, 3.7202134)); testPoints.Add(new GeoCoordinate(51.0580573, 3.7204378)); testPoints.Add(new GeoCoordinate(51.0581862, 3.7203758)); // build a matrix of routes between all points. var referenceRoutes = new Route[testPoints.Count][]; var permuationArray = new int[testPoints.Count]; for (int fromIdx = 0; fromIdx < testPoints.Count; fromIdx++) { permuationArray[fromIdx] = fromIdx; referenceRoutes[fromIdx] = new Route[testPoints.Count]; for (int toIdx = 0; toIdx < testPoints.Count; toIdx++) { // create router from scratch. router = Router.CreateFrom( memoryData, basicRouter, interpreter); // resolve points. var from = router.Resolve(Vehicle.Car, testPoints[fromIdx]); var to = router.Resolve(Vehicle.Car, testPoints[toIdx]); // calculate route. referenceRoutes[fromIdx][toIdx] = router.Calculate(Vehicle.Car, from, to); } } // resolve points in some order and compare the resulting routes. // they should be identical in length except for some numerical rounding errors. var enumerator = new PermutationEnumerable <int>( permuationArray); foreach (int[] permutation in enumerator) { // create router from scratch. router = Router.CreateFrom(memoryData, basicRouter, interpreter); // resolve in the order of the permutation. var resolvedPoints = new RouterPoint[permutation.Length]; for (int idx = 0; idx < permutation.Length; idx++) { resolvedPoints[permutation[idx]] = router.Resolve(Vehicle.Car, testPoints[permutation[idx]]); } for (int fromIdx = 0; fromIdx < testPoints.Count; fromIdx++) { for (int toIdx = 0; toIdx < testPoints.Count; toIdx++) { // calculate route. var route = router.Calculate(Vehicle.Car, resolvedPoints[fromIdx], resolvedPoints[toIdx]); Assert.AreEqual(referenceRoutes[fromIdx][toIdx].TotalDistance, route.TotalDistance, 0.1); } } } }
/// <summary> /// Tests argument checks on router. /// </summary> protected void DoTestArgumentChecks(string filename) { var interpreter = new OsmRoutingInterpreter(); var data = this.BuildData(interpreter, string.Format("OsmSharp.Routing.Test.data.{0}", filename)); var basicRouter = this.BuildBasicRouter(data); var router = this.BuildRouter(data, interpreter, basicRouter); var anyCoordinate = new GeoCoordinate(0, 0); var anyRouterPoint = new RouterPoint(-1, Vehicle.Car, anyCoordinate); var anyRouterPointArray = new RouterPoint[] { anyRouterPoint }; var anyVehicle = Vehicle.Car; Assert.Throws <ArgumentNullException>(() => router.Calculate(null, anyRouterPoint, anyRouterPoint)); Assert.Throws <ArgumentNullException>(() => router.Calculate(anyVehicle, null, anyRouterPoint)); Assert.Throws <ArgumentNullException>(() => router.Calculate(anyVehicle, anyRouterPoint, null)); Assert.Throws <ArgumentNullException>(() => router.CalculateWeight(null, anyRouterPoint, anyRouterPoint)); Assert.Throws <ArgumentNullException>(() => router.CalculateWeight(anyVehicle, null, anyRouterPoint)); Assert.Throws <ArgumentNullException>(() => router.CalculateWeight(anyVehicle, anyRouterPoint, null)); Assert.Throws <ArgumentNullException>(() => router.Calculate(null, anyRouterPoint, anyRouterPoint, float.MaxValue, false)); Assert.Throws <ArgumentNullException>(() => router.Calculate(anyVehicle, null, anyRouterPoint, float.MaxValue, false)); Assert.Throws <ArgumentNullException>(() => router.Calculate(anyVehicle, anyRouterPoint, null, float.MaxValue, false)); Assert.Throws <ArgumentNullException>(() => router.CalculateToClosest(null, anyRouterPoint, anyRouterPointArray)); Assert.Throws <ArgumentNullException>(() => router.CalculateToClosest(anyVehicle, null, anyRouterPointArray)); Assert.Throws <ArgumentNullException>(() => router.CalculateToClosest(anyVehicle, anyRouterPoint, null)); Assert.Throws <ArgumentNullException>(() => router.CalculateToClosest(null, anyRouterPoint, anyRouterPointArray, float.MaxValue, false)); Assert.Throws <ArgumentNullException>(() => router.CalculateToClosest(anyVehicle, null, anyRouterPointArray, float.MaxValue, false)); Assert.Throws <ArgumentNullException>(() => router.CalculateToClosest(anyVehicle, anyRouterPoint, null, float.MaxValue, false)); Assert.Throws <ArgumentNullException>(() => router.CalculateOneToMany(null, anyRouterPoint, anyRouterPointArray, float.MaxValue, false)); Assert.Throws <ArgumentNullException>(() => router.CalculateOneToMany(anyVehicle, null, anyRouterPointArray, float.MaxValue, false)); Assert.Throws <ArgumentNullException>(() => router.CalculateOneToMany(anyVehicle, anyRouterPoint, null, float.MaxValue, false)); Assert.Throws <ArgumentNullException>(() => router.CalculateOneToManyWeight(null, anyRouterPoint, anyRouterPointArray)); Assert.Throws <ArgumentNullException>(() => router.CalculateOneToManyWeight(anyVehicle, null, anyRouterPointArray)); Assert.Throws <ArgumentNullException>(() => router.CalculateOneToManyWeight(anyVehicle, anyRouterPoint, null)); Assert.Throws <ArgumentNullException>(() => router.CalculateOneToManyWeight(anyVehicle, anyRouterPoint, anyRouterPointArray, null)); Assert.Throws <ArgumentNullException>(() => router.CalculateManyToMany(null, anyRouterPointArray, anyRouterPointArray, float.MaxValue, false)); Assert.Throws <ArgumentNullException>(() => router.CalculateManyToMany(anyVehicle, null, anyRouterPointArray, float.MaxValue, false)); Assert.Throws <ArgumentNullException>(() => router.CalculateManyToMany(anyVehicle, anyRouterPointArray, null, float.MaxValue, false)); Assert.Throws <ArgumentNullException>(() => router.CalculateManyToManyWeight(null, anyRouterPointArray, anyRouterPointArray)); Assert.Throws <ArgumentNullException>(() => router.CalculateManyToManyWeight(anyVehicle, null, anyRouterPointArray)); Assert.Throws <ArgumentNullException>(() => router.CalculateManyToManyWeight(anyVehicle, anyRouterPointArray, null)); Assert.Throws <ArgumentNullException>(() => router.CalculateManyToManyWeight(anyVehicle, anyRouterPointArray, anyRouterPointArray, null)); Assert.Throws <ArgumentNullException>(() => router.CalculateRange(null, anyRouterPoint, 100)); Assert.Throws <ArgumentNullException>(() => router.CalculateRange(anyVehicle, null, 100)); Assert.Throws <ArgumentNullException>(() => router.CheckConnectivity(null, anyRouterPoint, 100)); Assert.Throws <ArgumentNullException>(() => router.CheckConnectivity(anyVehicle, (RouterPoint)null, 100)); Assert.Throws <ArgumentNullException>(() => router.CheckConnectivity(null, anyRouterPointArray, 100)); Assert.Throws <ArgumentNullException>(() => router.CheckConnectivity(anyVehicle, (RouterPoint[])null, 100)); Assert.Throws <ArgumentNullException>(() => router.Resolve(null, anyCoordinate)); Assert.Throws <ArgumentNullException>(() => router.Resolve(anyVehicle, (GeoCoordinate)null)); }
/// <summary> /// Issue with generation instructions but where streetnames seem to be stripped. /// Some streetnames are missing from the instructions. /// </summary> protected void DoInstructionRegressionTest1() { OsmRoutingInterpreter interpreter = new OsmRoutingInterpreter(); Router router = this.CreateRouter(interpreter, "OsmSharp.Test.Unittests.test_routing_regression1.osm"); // resolve the three points in question. GeoCoordinate point35 = new GeoCoordinate(51.01257, 4.000753); RouterPoint point35resolved = router.Resolve(Vehicle.Car, point35, true); GeoCoordinate point45 = new GeoCoordinate(51.01315, 3.999588); RouterPoint point45resolved = router.Resolve(Vehicle.Car, point45, true); GeoCoordinate point40 = new GeoCoordinate(51.01250, 4.000013); RouterPoint point40resolved = router.Resolve(Vehicle.Car, point40, true); // calculate two smaller routes. Route route3545 = router.Calculate(Vehicle.Car, point35resolved, point45resolved); Route route4540 = router.Calculate(Vehicle.Car, point45resolved, point40resolved); Route route3540concatenated = Route.Concatenate(route3545, route4540, true); Route route3540 = router.Calculate(Vehicle.Car, point35resolved, point40resolved); // check if both routes are equal. Assert.AreEqual(route3540.Segments.Length, route3540concatenated.Segments.Length); for (int idx = 0; idx < route3540.Segments.Length; idx++) { Assert.AreEqual(route3540.Segments[idx].Distance, route3540concatenated.Segments[idx].Distance); Assert.AreEqual(route3540.Segments[idx].Latitude, route3540concatenated.Segments[idx].Latitude); Assert.AreEqual(route3540.Segments[idx].Longitude, route3540concatenated.Segments[idx].Longitude); Assert.AreEqual(route3540.Segments[idx].Time, route3540concatenated.Segments[idx].Time); Assert.AreEqual(route3540.Segments[idx].Type, route3540concatenated.Segments[idx].Type); Assert.AreEqual(route3540.Segments[idx].Name, route3540concatenated.Segments[idx].Name); // something that is allowed to be different in this case! // route3540.Entries[idx].Points != null // // check sidestreets. // if (route3540.Entries[idx].SideStreets != null && // route3540.Entries[idx].SideStreets.Length > 0) // { // check if the sidestreets represent the same information. // for (int metricIdx = 0; metricIdx < route3540concatenated.Entries[idx].SideStreets.Length; metricIdx++) // { // Assert.AreEqual(route3540.Entries[idx].SideStreets[metricIdx].WayName, // route3540concatenated.Entries[idx].SideStreets[metricIdx].WayName); // Assert.AreEqual(route3540.Entries[idx].SideStreets[metricIdx].Latitude, // route3540concatenated.Entries[idx].SideStreets[metricIdx].Latitude); // Assert.AreEqual(route3540.Entries[idx].SideStreets[metricIdx].Longitude, // route3540concatenated.Entries[idx].SideStreets[metricIdx].Longitude); // } // } // else // { // Assert.IsTrue(route3540concatenated.Entries[idx].SideStreets == null || // route3540concatenated.Entries[idx].SideStreets.Length == 0); // } // if (route3540.Entries[idx].Tags != null && // route3540.Entries[idx].Tags.Length > 0) // { // check if the Tags represent the same information. // for (int metricIdx = 0; metricIdx < route3540concatenated.Entries[idx].Tags.Length; metricIdx++) // { // Assert.AreEqual(route3540.Entries[idx].Tags[metricIdx].Key, // route3540concatenated.Entries[idx].Tags[metricIdx].Key); // Assert.AreEqual(route3540.Entries[idx].Tags[metricIdx].Value, // route3540concatenated.Entries[idx].Tags[metricIdx].Value); // } // } // else // { // Assert.IsTrue(route3540concatenated.Entries[idx].Tags == null || // route3540concatenated.Entries[idx].Tags.Length == 0); // } // Assert.AreEqual(route3540.Entries[idx].Distance, route3540concatenated.Entries[idx].Distance); } if (route3540.Tags != null && route3540.Tags.Length > 0) { for (int tagIdx = 0; tagIdx < route3540.Tags.Length; tagIdx++) { if (route3540.Tags[tagIdx].Key != "debug_route") { Assert.AreEqual(route3540.Tags[tagIdx].Key, route3540concatenated.Tags[tagIdx].Key); Assert.AreEqual(route3540.Tags[tagIdx].Value, route3540concatenated.Tags[tagIdx].Value); } } } else { Assert.IsTrue(route3540concatenated.Tags == null || route3540concatenated.Tags.Length == 0); } if (route3540.Metrics != null) { for (int metricIdx = 0; metricIdx < route3540concatenated.Segments.Length; metricIdx++) { Assert.AreEqual(route3540.Metrics[metricIdx].Key, route3540concatenated.Metrics[metricIdx].Key); Assert.AreEqual(route3540.Metrics[metricIdx].Value, route3540concatenated.Metrics[metricIdx].Value); } } else { Assert.IsNull(route3540concatenated.Metrics); } // remove the point in between, the only difference between the regular and the concatenated route. route3540concatenated.Segments[7].Points = null; // create the language generator. var languageGenerator = new LanguageTestGenerator(); // generate the instructions. List <Instruction> instructions = InstructionGenerator.Generate(route3540, interpreter, languageGenerator); List <Instruction> instructionsConcatenated = InstructionGenerator.Generate(route3540concatenated, interpreter, languageGenerator); Assert.AreEqual(instructions.Count, instructionsConcatenated.Count); for (int idx = 0; idx < instructions.Count; idx++) { Assert.AreEqual(instructions[idx].Location.Center, instructionsConcatenated[idx].Location.Center); Assert.AreEqual(instructions[idx].Text, instructionsConcatenated[idx].Text); } }
/// <summary> /// Tests the edge matcher in combination with dykstra routing. /// </summary> /// <param name="name"></param> /// <param name="highway"></param> /// <param name="vehicle"></param> /// <param name="matcher"></param> /// <param name="pointName"></param> /// <param name="notFound"></param> private void TestResolveOnEdgeSingle(string name, string highway, Vehicle vehicle, IEdgeMatcher matcher, string pointName, bool notFound) { var fromName = new GeoCoordinate(51.0003, 4.0007); var toName = new GeoCoordinate(51.0003, 4.0008); var fromNoname = new GeoCoordinate(51.0, 4.0007); var toNoname = new GeoCoordinate(51.0, 4.0008); TagsCollection pointTags = new SimpleTagsCollection(); pointTags["name"] = pointName; TagsCollection tags = new SimpleTagsCollection(); tags["highway"] = highway; //tags["name"] = name; var tagsIndex = new SimpleTagsIndex(); // do the data processing. var data = new DynamicGraphRouterDataSource <LiveEdge>(tagsIndex); uint vertexNoname1 = data.AddVertex((float)fromNoname.Latitude, (float)fromNoname.Longitude); uint vertexNoname2 = data.AddVertex((float)toNoname.Latitude, (float)toNoname.Longitude); data.AddArc(vertexNoname1, vertexNoname2, new LiveEdge() { Forward = true, Tags = tagsIndex.Add(tags) }, null); tags = new SimpleTagsCollection(); tags["highway"] = highway; tags["name"] = name; uint vertexName1 = data.AddVertex((float)fromName.Latitude, (float)fromName.Longitude); uint vertexName2 = data.AddVertex((float)toName.Latitude, (float)toName.Longitude); data.AddArc(vertexName1, vertexName2, new LiveEdge() { Forward = true, Tags = tagsIndex.Add(tags) }, null); IRoutingInterpreter interpreter = new OsmRoutingInterpreter(); // creates the data. IBasicRouter <LiveEdge> router = new DykstraRoutingLive( data.TagsIndex); var nonameLocation = new GeoCoordinate( (fromNoname.Latitude + toNoname.Latitude) / 2.0, (fromNoname.Longitude + toNoname.Longitude) / 2.0); var nameLocation = new GeoCoordinate( (fromName.Latitude + toName.Latitude) / 2.0, (fromName.Longitude + toName.Longitude) / 2.0); const float delta = 0.01f; SearchClosestResult result = router.SearchClosest(data, interpreter, vehicle, nonameLocation, delta, matcher, pointTags); if (result.Distance < double.MaxValue) { // there is a result. Assert.IsFalse(notFound, "A result was found but was supposed not to be found!"); if (name == pointName) { // the name location was supposed to be found! Assert.IsTrue(result.Vertex1 == vertexName1 || result.Vertex1 == vertexName2); Assert.IsTrue(result.Vertex2 == vertexName1 || result.Vertex2 == vertexName2); } else { // the noname location was supposed to be found! Assert.IsTrue(result.Vertex1 == vertexNoname1 || result.Vertex1 == vertexNoname2); Assert.IsTrue(result.Vertex2 == vertexNoname1 || result.Vertex2 == vertexNoname2); } return; } Assert.IsTrue(notFound, "A result was not found but was supposed to be found!"); }
/// <summary> /// Tests preprocessing data from a PBF file. /// </summary> /// <param name="name"></param> /// <param name="pbfFile"></param> public static void TestSerialization(string name, string pbfFile) { var testFile = new FileInfo(string.Format(@".\TestFiles\{0}", pbfFile)); var performanceInfo = new PerformanceInfoConsumer("SerializerFlatFile.Serialize", 2000); performanceInfo.Start(); performanceInfo.Report("Pulling from {0}...", testFile.Name); var stream = testFile.OpenRead(); var source = new PBFOsmStreamSource(stream); var progress = new OsmStreamFilterProgress(); progress.RegisterSource(source); var testOutputFile = new FileInfo(@"test.routing"); testOutputFile.Delete(); var writeStream = testOutputFile.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite); var tagsIndex = new TagsIndex(); var interpreter = new OsmRoutingInterpreter(); var graph = new RouterDataSource <Edge>(new Graph <Edge>(), tagsIndex); var routingSerializer = new RoutingDataSourceSerializer(); var memoryMappedGraph = new Graph <Edge>(1024); var coordinates = new HugeCoordinateIndex(1024); var memoryData = new RouterDataSource <Edge>(memoryMappedGraph, tagsIndex); var targetData = new GraphOsmStreamTarget(memoryData, new OsmRoutingInterpreter(), tagsIndex, coordinates); targetData.RegisterSource(progress); targetData.Pull(); performanceInfo.Stop(); memoryData.Compress(); performanceInfo = new PerformanceInfoConsumer("SerializerFlatFile.Serialize", 100000); performanceInfo.Start(); performanceInfo.Report("Writing file for {0}...", testFile.Name); var metaData = new TagsCollection(); metaData.Add("some_key", "some_value"); routingSerializer.Serialize(writeStream, memoryData, metaData); stream.Dispose(); writeStream.Dispose(); OsmSharp.Logging.Log.TraceEvent("SerializerFlatFile", OsmSharp.Logging.TraceEventType.Information, string.Format("Serialized file: {0}KB", testOutputFile.Length / 1024)); performanceInfo.Stop(); ////performanceInfo = new PerformanceInfoConsumer("SerializerFlatFile.Serialize", 100000); ////performanceInfo.Start(); ////performanceInfo.Report("Reading file for {0}...", testFile.Name); //var testInputFile = new FileInfo(@"test.routing"); //var readStream = testInputFile.OpenRead(); //RoutingTest.TestSerialized(readStream); ////var deserializedGraph = routingSerializer.Deserialize(readStream, false); ////readStream.Dispose(); ////OsmSharp.Logging.Log.TraceEvent("SerializerFlatFile", OsmSharp.Logging.TraceEventType.Information, //// string.Format("Read: {0}KB", testInputFile.Length / 1024)); ////OsmSharp.Logging.Log.TraceEvent("SerializerFlatFile", Logging.TraceEventType.Information, deserializedGraph.ToInvariantString()); ////performanceInfo.Stop(); }
public void RoutingRegressionTest2() { OsmRoutingInterpreter interpreter = new OsmRoutingInterpreter(); SimpleTagsCollectionIndex tags_index = new SimpleTagsCollectionIndex(); // do the data processing. DynamicGraphRouterDataSource <LiveEdge> memory_data = new DynamicGraphRouterDataSource <LiveEdge>(tags_index); LiveGraphOsmStreamTarget target_data = new LiveGraphOsmStreamTarget( memory_data, interpreter, tags_index); XmlOsmStreamSource data_processor_source = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream("OsmSharp.Test.Unittests.test_network.osm")); OsmStreamFilterSort sorter = new OsmStreamFilterSort(); sorter.RegisterSource(data_processor_source); target_data.RegisterSource(sorter); target_data.Pull(); IBasicRouter <LiveEdge> basic_router = new DykstraRoutingLive(); Router router = Router.CreateLiveFrom(memory_data, basic_router, interpreter); // build coordinates list of resolved points. List <GeoCoordinate> testPoints = new List <GeoCoordinate>(); testPoints.Add(new GeoCoordinate(51.0582204, 3.7193524)); testPoints.Add(new GeoCoordinate(51.0582199, 3.7194002)); //testPoints.Add(new GeoCoordinate(51.0582178, 3.7195025)); testPoints.Add(new GeoCoordinate(51.0581727, 3.7195833)); testPoints.Add(new GeoCoordinate(51.0581483, 3.7195553)); //testPoints.Add(new GeoCoordinate(51.0581219, 3.7195231)); //testPoints.Add(new GeoCoordinate(51.0580965, 3.7194918)); testPoints.Add(new GeoCoordinate(51.0581883, 3.7196617)); testPoints.Add(new GeoCoordinate(51.0581628, 3.7196889)); // build a matrix of routes between all points. Route[][] referenceRoutes = new Route[testPoints.Count][]; int[] permuationArray = new int[testPoints.Count]; for (int fromIdx = 0; fromIdx < testPoints.Count; fromIdx++) { permuationArray[fromIdx] = fromIdx; referenceRoutes[fromIdx] = new Route[testPoints.Count]; for (int toIdx = 0; toIdx < testPoints.Count; toIdx++) { // create router from scratch. router = Router.CreateLiveFrom( memory_data, basic_router, interpreter); // resolve points. RouterPoint from = router.Resolve(Vehicle.Car, testPoints[fromIdx]); RouterPoint to = router.Resolve(Vehicle.Car, testPoints[toIdx]); // calculate route. referenceRoutes[fromIdx][toIdx] = router.Calculate(Vehicle.Car, from, to); } } // resolve points in some order and compare the resulting routes. // they should be identical in length except for some numerical rounding errors. PermutationEnumerable <int> enumerator = new PermutationEnumerable <int>( permuationArray); foreach (int[] permutation in enumerator) { //int[] permutation = new int[] { 5, 0, 1, 2, 4, 3, 6, 7, 8 }; //// incrementally resolve points. //// create router from scratch. //router = new Router<SimpleWeighedEdge>(memory_data, interpreter, basic_router); //// resolve in the order of the permutation. //RouterPoint[] resolvedPoints = new RouterPoint[permutation.Length]; //resolvedPoints[permutation[0]] = router.Resolve(VehicleEnum.Car, testPoints[permutation[0]]); //for (int idx = 1; idx < permutation.Length; idx++) //{ // resolvedPoints[permutation[idx]] = router.Resolve(VehicleEnum.Car, testPoints[permutation[idx]]); // for (int fromIdx = 0; fromIdx <= idx; fromIdx++) // { // for (int toIdx = 0; toIdx <= idx; toIdx++) // { // // calculate route. // OsmSharpRoute route = router.Calculate(VehicleEnum.Car, // resolvedPoints[permutation[fromIdx]], resolvedPoints[permutation[toIdx]]); // Assert.AreEqual(referenceRoutes[permutation[fromIdx]][permutation[toIdx]].TotalDistance, // route.TotalDistance, 0.1); // } // } //} // create router from scratch. router = Router.CreateLiveFrom(memory_data, basic_router, interpreter); // resolve in the order of the permutation. RouterPoint[] resolvedPoints = new RouterPoint[permutation.Length]; for (int idx = 0; idx < permutation.Length; idx++) { resolvedPoints[permutation[idx]] = router.Resolve(Vehicle.Car, testPoints[permutation[idx]]); } for (int fromIdx = 0; fromIdx < testPoints.Count; fromIdx++) { for (int toIdx = 0; toIdx < testPoints.Count; toIdx++) { // calculate route. Route route = router.Calculate(Vehicle.Car, resolvedPoints[fromIdx], resolvedPoints[toIdx]); Assert.AreEqual(referenceRoutes[fromIdx][toIdx].TotalDistance, route.TotalDistance, 0.1); } } } }
public void RoutingRegressionTest2() { var interpreter = new OsmRoutingInterpreter(); var tagsIndex = new TagsTableCollectionIndex(); // do the data processing. var memoryData = new DynamicGraphRouterDataSource <LiveEdge>(tagsIndex); var targetData = new LiveGraphOsmStreamTarget(memoryData, interpreter, tagsIndex); var dataProcessorSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream("OsmSharp.Test.Unittests.test_network.osm")); var sorter = new OsmStreamFilterSort(); sorter.RegisterSource(dataProcessorSource); targetData.RegisterSource(sorter); targetData.Pull(); var basicRouter = new DykstraRoutingLive(); var router = Router.CreateLiveFrom(memoryData, basicRouter, interpreter); // build coordinates list of resolved points. var testPoints = new List <GeoCoordinate>(); testPoints.Add(new GeoCoordinate(51.0582204, 3.7193524)); testPoints.Add(new GeoCoordinate(51.0582199, 3.7194002)); testPoints.Add(new GeoCoordinate(51.0581727, 3.7195833)); testPoints.Add(new GeoCoordinate(51.0581483, 3.7195553)); testPoints.Add(new GeoCoordinate(51.0581883, 3.7196617)); testPoints.Add(new GeoCoordinate(51.0581628, 3.7196889)); // build a matrix of routes between all points. var referenceRoutes = new Route[testPoints.Count][]; var permuationArray = new int[testPoints.Count]; for (int fromIdx = 0; fromIdx < testPoints.Count; fromIdx++) { permuationArray[fromIdx] = fromIdx; referenceRoutes[fromIdx] = new Route[testPoints.Count]; for (int toIdx = 0; toIdx < testPoints.Count; toIdx++) { // create router from scratch. router = Router.CreateLiveFrom( memoryData, basicRouter, interpreter); // resolve points. var from = router.Resolve(Vehicle.Car, testPoints[fromIdx]); var to = router.Resolve(Vehicle.Car, testPoints[toIdx]); // calculate route. referenceRoutes[fromIdx][toIdx] = router.Calculate(Vehicle.Car, from, to); } } // resolve points in some order and compare the resulting routes. // they should be identical in length except for some numerical rounding errors. var enumerator = new PermutationEnumerable <int>(permuationArray); foreach (int[] permutation in enumerator) { // create router from scratch. router = Router.CreateLiveFrom(memoryData, basicRouter, interpreter); // resolve in the order of the permutation. var resolvedPoints = new RouterPoint[permutation.Length]; for (int idx = 0; idx < permutation.Length; idx++) { resolvedPoints[permutation[idx]] = router.Resolve(Vehicle.Car, testPoints[permutation[idx]]); } for (int fromIdx = 0; fromIdx < testPoints.Count; fromIdx++) { for (int toIdx = 0; toIdx < testPoints.Count; toIdx++) { // calculate route. var route = router.Calculate(Vehicle.Car, resolvedPoints[fromIdx], resolvedPoints[toIdx]); // TODO: changed the resolve accuracy to .5m. Make sure this is more accurate in the future. Assert.AreEqual(referenceRoutes[fromIdx][toIdx].TotalDistance, route.TotalDistance, 1); } } } }
static void MainTemp(string[] args) { NpgsqlConnection schemaConnection = new NpgsqlConnection(connPostGreSql); schemaConnection.Open(); var databaseName = "GIS"; DataTable dataTables = schemaConnection.GetSchema("Tables", new string[] { databaseName, "public", null, null }); foreach (DataRow rowTable in dataTables.Rows) { string tableName = rowTable["table_name"].ToString(); if (tableName != "geometry_collection") { continue; } DataTable dataColumns = schemaConnection.GetSchema("Columns", new string[] { databaseName, "public", tableName }); StringBuilder sb = new StringBuilder(); sb.AppendLine("public class " + tableName); sb.AppendLine("{"); sb.AppendLine("\tpublic " + tableName + "(){}"); foreach (DataRow rowColumn in dataColumns.Rows) { string columnName = rowColumn["column_name"].ToString(); string type = rowColumn["data_type"].ToString(); sb.AppendLine("\tpublic " + type + " " + columnName + " {get;set;}"); } sb.AppendLine("}"); sb.Replace("int8", "long"); sb.Replace("int4", "int"); sb.Replace("text", "string"); sb.Replace("oid", "long"); sb.Replace("numeric", "float"); sb.Replace("timestamp", "DateTime"); var def = sb.ToString(); } schemaConnection.Close(); return; var geometryRetrieval = geometryCollection.GetSingleObjectWithId("8", true, connPostGreSql); // testing GeometryCollection Aram.OSMParser.geometryCollection col = new Aram.OSMParser.geometryCollection(); // col.gisId = col.gisType = "dummy"; col.format = "txt"; col.largeObject = null; col.lastUpdate = DateTime.Now; col.latitude = 563213212; col.longitude = 171231231; col.name = "Test2"; col.pivot = new Aram.OSMParser.Vector3GaPS() { x = 1f, y = 2f, z = 3f }; col.version = new Aram.OSMParser.GaPSlabsVersion() { versionTitle = "development", major = 0, minor = 1 }; col.AddGeometryCollectionToDatabase(connPostGreSql, false); var bytes = File.ReadAllBytes(@"C:\Users\admgaming\Documents\Visual Studio 2012\Projects\GaPSLabs\AramOSMParser\OsmParserTestApplication\bin\Debug\Npgsql.xml"); col.largeObject = bytes; col.UpdateThisGeometryOnDatabase(connPostGreSql, true); var resultBytes = geometryCollection.GetLargeObject(col.largeObjectReference, connPostGreSql); File.WriteAllBytes("c:\\dummy", resultBytes); return; // ERROR: 42704: invalid large-object descriptor: 0 ?? // largeobject only works within a transaction. Use bytea as an alternative to large objects. // http://www.postgresql.org/message-id/002701c49d7e$0f059240$d604460a@zaphod NpgsqlConnection testConnection = new NpgsqlConnection(connPostGreSql); testConnection.Open(); NpgsqlTypes.LargeObjectManager lm = new NpgsqlTypes.LargeObjectManager(testConnection); var generatedLO = lm.Create(NpgsqlTypes.LargeObjectManager.READWRITE); // It must be within a transaction var TransWrite = testConnection.BeginTransaction(); LargeObject lo = lm.Open(generatedLO, LargeObjectManager.READWRITE); lo.Write(new byte[] { 0, 10, 50, 24 }); lo.Close(); TransWrite.Commit(); var TransRead = testConnection.BeginTransaction(); var loOid = lo.GetOID(); var readlo = lm.Open(loOid, LargeObjectManager.READWRITE); var resultLo = readlo.Read(readlo.Size()); lm.Delete(generatedLO); TransRead.Commit(); testConnection.Close(); return; OSMPostgresqlSource sourceVisTest = new OSMPostgresqlSource(connPostGreSql); var bounds = sourceVisTest.Bounds; return; GaPSlabsSimulationLibrary.SUMOSimulationFCD df = new GaPSlabsSimulationLibrary.SUMOSimulationFCD(); //df.LoadFromXML(@"C:\Users\admgaming\Desktop\Dropbox\GaPSLabs\SUMO Packet Tester\Pedestrians.xml"); //df.LoadFromXML(@"C:\Users\admgaming\Desktop\Dropbox\GaPSLabs\SUMO Packet Tester\bufferoutput - 500.xml"); ServiceGapslabsClient client2 = ServicePropertiesClass.GetGapslabsService(ServicePropertiesClass.ServiceUri); int id = client2.LoadSUMOFCDSimulationList(@"C:\Users\admgaming\Desktop\Dropbox\GaPSLabs\SUMO Packet Tester\bufferoutput - 500.xml", "__POSTFIX"); //client.LoadSUMOFCDSimulation(@"C:\Users\admgaming\Desktop\Dropbox\GaPSLabs\SUMO Packet Tester\bufferoutput - 500.xml"); while (!client2.IsSimulationLoadedList(id)) { } var vvvv = client2.GetTimestepAtList(6, id); var vvvv2 = client2.GetTimestepAtList(7, id); return; int size = 16777216; int[] aa = new int[size]; int[] bbb = new int[size]; int[] cccc = new int[size]; for (int i = 0; i < size; i++) { aa[i] = i; bbb[i] = i; } var apointer = aa.ToIntPtr <int[]>(); var bpointer = bbb.ToIntPtr <int[]>(); var cpointer = cccc.ToIntPtr <int[]>(); long MinGPU = 1000000; long MinCPU = 1000000; long MinCPUParallel = 100000; Stopwatch watch = new Stopwatch(); bool SkipCpu = false; GPU_WarmUp(); int TestCounter = 0; int blockSize = 16; while (TestCounter++ < 7) { watch.Restart(); GPU_Add(apointer, bpointer, cpointer, size, blockSize); watch.Stop(); Console.WriteLine("Total GPU" + "(" + blockSize + ")" + ": " + watch.ElapsedMilliseconds); if (watch.ElapsedMilliseconds < MinGPU) { MinGPU = watch.ElapsedMilliseconds; } blockSize *= 2; } Console.WriteLine("Minimum GPU was " + MinGPU); if (!SkipCpu) { TestCounter = 0; while (TestCounter++ < 10) { watch.Restart(); CPU_AddParallel(apointer, bpointer, cpointer, size); watch.Stop(); Console.WriteLine("Total CPU Parallel: " + watch.ElapsedMilliseconds); if (watch.ElapsedMilliseconds < MinCPUParallel) { MinCPUParallel = watch.ElapsedMilliseconds; } } Console.WriteLine("Minimum CPU was " + MinCPU); TestCounter = 0; while (TestCounter++ < 10) { watch.Restart(); CPU_Add(apointer, bpointer, cpointer, size); watch.Stop(); Console.WriteLine("Total CPU: " + watch.ElapsedMilliseconds); if (watch.ElapsedMilliseconds < MinCPU) { MinCPU = watch.ElapsedMilliseconds; } } Console.WriteLine("Minimum CPU was " + MinCPU); } //apointer.Free(); //bpointer.Free(); //cpointer.Free(); Console.ReadLine(); return; //GaPSlabsSimulationLibrary.SUMOSimulationFCD simulation = new GaPSlabsSimulationLibrary.SUMOSimulationFCD(); //simulation.LoadFromXML(@"C:\Users\admgaming\Desktop\Dropbox\GaPSLabs\SUMOData\fcdoutput.xml"); //simulation.LoadFromCSV(@"C:\Users\admgaming\Desktop\Notable Software\iMobility\stkhlm-taxi.csv"); ServiceGapslabsClient client = ServicePropertiesClass.GetGapslabsService(ServicePropertiesClass.ServiceUri); //client.LoadSUMOFCDSimulation(@"C:\Users\admgaming\Desktop\Dropbox\GaPSLabs\SUMO Packet Tester\bufferoutput - 500.xml"); //while (!client.IsSimulationLoaded()) // Console.WriteLine("Loading..."); //Console.WriteLine("Load finished"); //Console.ReadLine(); //return; OSMPostgresqlSource sour = new OSMPostgresqlSource(connPostGreSql); // var TrafficNodes = sour.GetNodeIdsInBoundWithInfo(sour.Bounds, "traffic_signals"); var result = client.GetWayTags("134972364", connPostGreSql); BoundsWCF b = new BoundsWCF(); b.minlat = 59.32973; b.maxlat = 59.34481; b.minlon = 18.07556; b.maxlon = 18.1062; client.GetWayExtIdsInBound(connPostGreSql, b); client.InitializeRouter(connPostGreSql); OsmNodeWCF n1 = new OsmNodeWCF(); n1.id = "none"; n1.order = -1; n1.lat = 59.330957; n1.lon = 18.059285; //n1.lat = 59.374563; //n1.lon = 18.0135727; OsmNodeWCF n2 = new OsmNodeWCF(); n2.id = "none"; n2.order = -1; n2.lat = 59.33784; n2.lon = 18.088558; //n2.lat = 59.37225; //n2.lon = 18.00733; var RouterResult = client.RouteUsingDykstra(VehicleEnum.Car, n1, n2); OsmGeo.ShapeInterperter = new SimpleShapeInterpreter(); PostgreSQLSimpleSchemaSource source = new PostgreSQLSimpleSchemaSource(connPostGreSql); // keeps a memory-efficient version of the osm-tags. OsmTagsIndex tags_index = new OsmTagsIndex(); // creates a routing interpreter. (used to translate osm-tags into a routable network) OsmRoutingInterpreter interpreter = new OsmRoutingInterpreter(); // create routing inter OsmSourceRouterDataSource routing_data = new OsmSourceRouterDataSource( interpreter, tags_index, source); // create the router object. //IRouter<RouterPoint> router = new Router<PreProcessedEdge>(routing_data, interpreter, // new DykstraRoutingPreProcessed(routing_data.TagsIndex)); IRouter <RouterPoint> router = new Router <PreProcessedEdge>(routing_data, interpreter , new DykstraRoutingPreProcessed(routing_data.TagsIndex)); // resolve both points; find the closest routable road. //RouterPoint point1 = router.Resolve(VehicleEnum.Car, new GeoCoordinate(60.1674654,18.454302)); // RouterPoint point2 = router.Resolve(VehicleEnum.Car, new GeoCoordinate(60.1673373,18.4541732)); // Working //RouterPoint point1 = router.Resolve(VehicleEnum.Car, new GeoCoordinate(59.3863281, 18.0176665)); //RouterPoint point2 = router.Resolve(VehicleEnum.Car, new GeoCoordinate(59.3675634, 18.0140447)); // Working RouterPoint point1 = router.Resolve(VehicleEnum.Car, new GeoCoordinate(59.374563, 18.0135727)); RouterPoint point2 = router.Resolve(VehicleEnum.Car, new GeoCoordinate(59.37225, 18.00733)); //ArrayList al=new ArrayList(); //foreach (var en in Enum.GetValues(typeof(VehicleEnum))) //{ // al.Add(Enum.GetName(typeof(VehicleEnum), (VehicleEnum)en) + "=" + router.SupportsVehicle((VehicleEnum)en)); //} // calculate route. OsmSharpRoute route = router.Calculate(VehicleEnum.Car, point1, point2); route.SaveAsGpx(new FileInfo("route.gpx")); Console.ReadLine(); }
public void RoutingSerializationV2CompressedRoutingTest() { const string embeddedString = "OsmSharp.UnitTests.test_network.osm"; // create the tags index. var tagsIndex = new SimpleTagsIndex(); // creates a new interpreter. var interpreter = new OsmRoutingInterpreter(); // do the data processing. var original = new DynamicGraphRouterDataSource <LiveEdge>(tagsIndex); var targetData = new LiveGraphOsmStreamWriter( original, interpreter, original.TagsIndex); var dataProcessorSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(embeddedString)); targetData.RegisterSource(dataProcessorSource); targetData.Pull(); // create serializer. var routingSerializer = new V2RoutingDataSourceLiveEdgeSerializer(true); // serialize/deserialize. byte[] byteArray; using (var stream = new MemoryStream()) { try { routingSerializer.Serialize(stream, original); byteArray = stream.ToArray(); } catch (Exception) { if (Debugger.IsAttached) { Debugger.Break(); } throw; } } IBasicRouterDataSource <LiveEdge> deserializedVersion = routingSerializer.Deserialize(new MemoryStream(byteArray)); Assert.AreEqual(original.TagsIndex.Get(0), deserializedVersion.TagsIndex.Get(0)); // try to do some routing on the deserialized version. var basicRouter = new DykstraRoutingLive(deserializedVersion.TagsIndex); Router router = Router.CreateLiveFrom(deserializedVersion, basicRouter, interpreter); RouterPoint source = router.Resolve(Vehicle.Car, new GeoCoordinate(51.0578532, 3.7192229)); RouterPoint target = router.Resolve(Vehicle.Car, new GeoCoordinate(51.0576193, 3.7191801)); // calculate the route. OsmSharpRoute route = router.Calculate(Vehicle.Car, source, target); Assert.IsNotNull(route); Assert.AreEqual(5, route.Entries.Length); float latitude, longitude; deserializedVersion.GetVertex(20, out latitude, out longitude); Assert.AreEqual(latitude, route.Entries[0].Latitude, 0.00001); Assert.AreEqual(longitude, route.Entries[0].Longitude, 0.00001); Assert.AreEqual(RoutePointEntryType.Start, route.Entries[0].Type); deserializedVersion.GetVertex(21, out latitude, out longitude); Assert.AreEqual(latitude, route.Entries[1].Latitude, 0.00001); Assert.AreEqual(longitude, route.Entries[1].Longitude, 0.00001); Assert.AreEqual(RoutePointEntryType.Along, route.Entries[1].Type); deserializedVersion.GetVertex(16, out latitude, out longitude); Assert.AreEqual(latitude, route.Entries[2].Latitude, 0.00001); Assert.AreEqual(longitude, route.Entries[2].Longitude, 0.00001); Assert.AreEqual(RoutePointEntryType.Along, route.Entries[2].Type); deserializedVersion.GetVertex(22, out latitude, out longitude); Assert.AreEqual(latitude, route.Entries[3].Latitude, 0.00001); Assert.AreEqual(longitude, route.Entries[3].Longitude, 0.00001); Assert.AreEqual(RoutePointEntryType.Along, route.Entries[3].Type); deserializedVersion.GetVertex(23, out latitude, out longitude); Assert.AreEqual(latitude, route.Entries[4].Latitude, 0.00001); Assert.AreEqual(longitude, route.Entries[4].Longitude, 0.00001); Assert.AreEqual(RoutePointEntryType.Stop, route.Entries[4].Type); }