/// <summary> /// Returns a routing graph. /// </summary> /// <param name="pbf">The name of the OSM pbf-test file.</param> /// <returns></returns> public static BasicRouterDataSource <LiveEdge> GetRoutingGraph(string pbf) { using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(string.Format( "OpenLR.Tests.Data.{0}.osm.pbf", pbf))) { return(new BasicRouterDataSource <LiveEdge>(LiveGraphOsmStreamTarget.Preprocess(new PBFOsmStreamSource(stream), new OsmRoutingInterpreter()))); } }
public void RoutingSerializationV2RoutingComparisonTest() { 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 the original routing. // var basicRouterOriginal = new DykstraRoutingLive(original.TagsIndex); // Router referenceRouter = Router.CreateLiveFrom( // original, basicRouterOriginal, interpreter); // create serializer. var routingSerializer = new V2RoutingDataSourceLiveEdgeSerializer(false); // 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); //// 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 RoutingSerializationFlatfileLiveEdge() { const string embeddedString = "OsmSharp.Test.Unittests.test_network_real1.osm"; // load the network. var referenceNetwork = LiveGraphOsmStreamTarget.Preprocess(new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(embeddedString)), new OsmRoutingInterpreter()); // serialize network. var routingSerializer = new LiveEdgeFlatfileSerializer(); TagsCollectionBase metaData = new TagsCollection(); metaData.Add("some_key", "some_value"); DynamicGraphRouterDataSource <LiveEdge> network; byte[] byteArray; using (var stream = new MemoryStream()) { routingSerializer.Serialize(stream, referenceNetwork, metaData); byteArray = stream.ToArray(); } using (var stream = new MemoryStream(byteArray)) { network = routingSerializer.Deserialize(stream, out metaData, false) as DynamicGraphRouterDataSource <LiveEdge>; } // compare networks. Assert.IsNotNull(network); Assert.AreEqual(referenceNetwork.VertexCount, network.VertexCount); for (uint vertex = 0; vertex < network.VertexCount; vertex++) { float referenceLatitude, referenceLongitude, latitude, longitude; Assert.IsTrue(referenceNetwork.GetVertex(vertex, out referenceLatitude, out referenceLongitude)); Assert.IsTrue(network.GetVertex(vertex, out latitude, out longitude)); Assert.AreEqual(referenceLatitude, latitude); Assert.AreEqual(referenceLongitude, longitude); var referenceArcs = referenceNetwork.GetEdges(vertex); var arcs = network.GetEdges(vertex); Assert.AreEqual(referenceArcs.Length, arcs.Length); for (int idx = 0; idx < referenceArcs.Length; idx++) { var referenceArc = referenceArcs[idx]; // find the same edge in the new arcs. var arc = arcs.First((x) => { return(x.Key == referenceArcs[idx].Key); }); Assert.AreEqual(referenceArc.Key, arc.Key); Assert.AreEqual(referenceArc.Value.Distance, arc.Value.Distance); Assert.AreEqual(referenceArc.Value.Forward, arc.Value.Forward); Assert.AreEqual(referenceArc.Value.RepresentsNeighbourRelations, arc.Value.RepresentsNeighbourRelations); Assert.AreEqual(referenceArc.Value.Tags, arc.Value.Tags); GeoCoordinateSimple[] referenceArcValueCoordinates; GeoCoordinateSimple[] arcValueCoordinates; Assert.AreEqual(network.GetEdgeShape(vertex, arc.Key, out arcValueCoordinates), referenceNetwork.GetEdgeShape(vertex, referenceArc.Key, out referenceArcValueCoordinates)); if (referenceArcValueCoordinates == null) { // other arc coordinates also null? Assert.IsNull(arcValueCoordinates); } else { // compare coordinates. for (int coordIdx = 0; coordIdx < referenceArcValueCoordinates.Length; coordIdx++) { Assert.AreEqual(referenceArcValueCoordinates[coordIdx].Latitude, arcValueCoordinates[coordIdx].Latitude); Assert.AreEqual(referenceArcValueCoordinates[coordIdx].Longitude, arcValueCoordinates[coordIdx].Longitude); } } // check tags. var referenceTags = referenceNetwork.TagsIndex.Get(referenceArc.Value.Tags); var tags = network.TagsIndex.Get(arc.Value.Tags); if (referenceTags == null) { // other tags also have to be null. Assert.IsNull(tags); } else { // contents need to be the same. Assert.AreEqual(referenceTags.Count, tags.Count); foreach (var referenceTag in referenceTags) { Assert.IsTrue(tags.ContainsKeyValue(referenceTag.Key, referenceTag.Value)); } } } } }