public static Stream TestSerialization(string name, string pbfFile, RouterDataSource <CHEdgeData> data) { var testOutputFile = new FileInfo(@"test.routing"); testOutputFile.Delete(); var writeStream = testOutputFile.OpenWrite(); var performanceInfo = new PerformanceInfoConsumer("CHSerializer"); performanceInfo.Start(); performanceInfo.Report("Writing to {0}...", testOutputFile.Name); TagsCollectionBase metaData = new TagsCollection(); metaData.Add("some_key", "some_value"); var routingSerializer = new CHEdgeSerializer(); routingSerializer.Serialize(writeStream, data, metaData); writeStream.Dispose(); OsmSharp.Logging.Log.TraceEvent("CHSerializer", OsmSharp.Logging.TraceEventType.Information, string.Format("Serialized file: {0}KB", testOutputFile.Length / 1024)); performanceInfo.Stop(); return(testOutputFile.OpenRead()); }
/// <summary> /// Tests preprocessing data from a PBF file. /// </summary> /// <param name="name"></param> /// <param name="pbfFile"></param> public static RouterDataSource <CHEdgeData> TestSerialization(string name, string pbfFile) { var testFilePath = Path.Combine( Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "TestFiles", pbfFile); //var testFilePath = @"/Users/xivk/work/OSM/bin/africa-latest.osm.pbf"; var testFile = new FileInfo(testFilePath); var stream = testFile.OpenRead(); var source = new OsmSharp.Osm.Streams.Filters.OsmStreamFilterProgress(); source.RegisterSource(new PBFOsmStreamSource(stream)); var testOutputFile = new FileInfo(@"test.routing"); testOutputFile.Delete(); Stream writeStream = testOutputFile.Open(FileMode.CreateNew, FileAccess.ReadWrite); var performanceInfo = new PerformanceInfoConsumer("CHSerializerFlatFile.Serialize"); performanceInfo.Start(); performanceInfo.Report("Pulling from {0}...", testFile.Name); var data = CHEdgeGraphOsmStreamTarget.Preprocess( source, new TagsIndex(new MemoryMappedStream(new MemoryStream())), new OsmRoutingInterpreter(), Vehicle.Car); (data.Graph as DirectedGraph <CHEdgeData>).Compress(true); //var graphCopy = new DirectedGraph<CHEdgeData>(); //graphCopy.CopyFrom(data); //data = new RouterDataSource<CHEdgeData>(graphCopy, data.TagsIndex); var metaData = new TagsCollection(); metaData.Add("some_key", "some_value"); var routingSerializer = new CHEdgeSerializer(); routingSerializer.Serialize(writeStream, data, metaData); stream.Dispose(); writeStream.Dispose(); OsmSharp.Logging.Log.TraceEvent("CHSerializerFlatFile", OsmSharp.Logging.TraceEventType.Information, string.Format("Serialized file: {0}KB", testOutputFile.Length / 1024)); performanceInfo.Stop(); performanceInfo = new PerformanceInfoConsumer("CHSerializerFlatFile.Deserialize"); performanceInfo.Start(); performanceInfo.Report("Deserializing again..."); // open file again and read. writeStream = testOutputFile.OpenRead(); var deserializedGraph = routingSerializer.Deserialize(writeStream, false); performanceInfo.Stop(); return(data); }
public static Stream TestSerialization(string name, string pbfFile, RouterDataSource<CHEdgeData> data) { var testOutputFile = new FileInfo(@"test.routing"); testOutputFile.Delete(); var writeStream = testOutputFile.OpenWrite(); var performanceInfo = new PerformanceInfoConsumer("CHSerializer"); performanceInfo.Start(); performanceInfo.Report("Writing to {0}...", testOutputFile.Name); TagsCollectionBase metaData = new TagsCollection(); metaData.Add("some_key", "some_value"); var routingSerializer = new CHEdgeSerializer(); routingSerializer.Serialize(writeStream, data, metaData); writeStream.Dispose(); OsmSharp.Logging.Log.TraceEvent("CHSerializer", OsmSharp.Logging.TraceEventType.Information, string.Format("Serialized file: {0}KB", testOutputFile.Length / 1024)); performanceInfo.Stop(); return testOutputFile.OpenRead(); }
public void RoutingSerializationCHEdgeData() { const string embeddedString = "OsmSharp.Test.Unittests.test_network_real1.osm"; // create the tags index (and make sure it's serializable). var tagsIndex = new TagsIndex(new MemoryMappedStream(new MemoryStream())); // load the network. var referenceNetwork = CHEdgeGraphOsmStreamTarget.Preprocess(new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(embeddedString)), tagsIndex, new OsmRoutingInterpreter(), Vehicle.Car); // serialize network. var routingSerializer = new CHEdgeSerializer(); TagsCollectionBase metaData = new TagsCollection(); metaData.Add("some_key", "some_value"); using (var stream = new MemoryStream()) { routingSerializer.Serialize(stream, referenceNetwork, metaData); var network = routingSerializer.Deserialize(stream, out metaData); // compare networks. Assert.IsNotNull(network); Assert.AreEqual(referenceNetwork.VertexCount, network.VertexCount); for (uint vertex = 1; vertex < referenceNetwork.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 referenceEdges = referenceNetwork.GetEdges(vertex).ToKeyValuePairsAndShapes(); var edges = network.GetEdges(vertex).ToKeyValuePairsAndShapes(); Assert.AreEqual(referenceEdges.Length, edges.Length); for (int idx = 0; idx < referenceEdges.Length; idx++) { var referenceEdge = referenceEdges[idx]; // find the same edge in the new arcs. var edge = edges.First((x) => { return x.Key == referenceEdges[idx].Key && x.Value.Key.Equals(referenceEdges[idx].Value.Key); }); Assert.AreEqual(referenceEdge.Key, edge.Key); Assert.AreEqual(referenceEdge.Value.Key.Meta, edge.Value.Key.Meta); Assert.AreEqual(referenceEdge.Value.Key.Value, edge.Value.Key.Value); Assert.AreEqual(referenceEdge.Value.Key.Weight, edge.Value.Key.Weight); Assert.AreEqual(referenceEdge.Value.Key.RepresentsNeighbourRelations, edge.Value.Key.RepresentsNeighbourRelations); Assert.AreEqual(referenceEdge.Value.Key.Tags, edge.Value.Key.Tags); var referenceCoordinates = referenceEdge.Value.Value; var coordinates = edge.Value.Value; if (referenceCoordinates == null) { // reference shape is null, shape is null. Assert.IsNull(coordinates); } else { // reference shape is not null compare them. Assert.IsNotNull(coordinates); referenceCoordinates.Reset(); coordinates.Reset(); while (referenceCoordinates.MoveNext()) { Assert.IsTrue(coordinates.MoveNext()); Assert.AreEqual(referenceCoordinates.Latitude, coordinates.Latitude); Assert.AreEqual(referenceCoordinates.Longitude, coordinates.Longitude); } Assert.IsFalse(coordinates.MoveNext()); } // check tags. if (!referenceEdge.Value.Key.IsContracted) { var referenceTags = referenceNetwork.TagsIndex.Get(referenceEdge.Value.Key.Tags); var tags = network.TagsIndex.Get(edge.Value.Key.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)); } } } } } } }
public void RoutingSerializationCHEdgeData() { const string embeddedString = "OsmSharp.Test.Unittests.test_network_real1.osm"; // create the tags index (and make sure it's serializable). var tagsIndex = new TagsIndex(new MemoryMappedStream(new MemoryStream())); // load the network. var referenceNetwork = CHEdgeGraphOsmStreamTarget.Preprocess(new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream(embeddedString)), tagsIndex, new OsmRoutingInterpreter(), Vehicle.Car); // serialize network. var routingSerializer = new CHEdgeSerializer(); TagsCollectionBase metaData = new TagsCollection(); metaData.Add("some_key", "some_value"); using (var stream = new MemoryStream()) { routingSerializer.Serialize(stream, referenceNetwork, metaData); var network = routingSerializer.Deserialize(stream, out metaData); // compare networks. Assert.IsNotNull(network); Assert.AreEqual(referenceNetwork.VertexCount, network.VertexCount); for (uint vertex = 1; vertex < referenceNetwork.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 referenceEdges = referenceNetwork.GetEdges(vertex).ToKeyValuePairsAndShapes(); var edges = network.GetEdges(vertex).ToKeyValuePairsAndShapes(); Assert.AreEqual(referenceEdges.Length, edges.Length); for (int idx = 0; idx < referenceEdges.Length; idx++) { var referenceEdge = referenceEdges[idx]; // find the same edge in the new arcs. var edge = edges.First((x) => { return(x.Key == referenceEdges[idx].Key && x.Value.Key.Equals(referenceEdges[idx].Value.Key)); }); Assert.AreEqual(referenceEdge.Key, edge.Key); Assert.AreEqual(referenceEdge.Value.Key.Meta, edge.Value.Key.Meta); Assert.AreEqual(referenceEdge.Value.Key.Value, edge.Value.Key.Value); Assert.AreEqual(referenceEdge.Value.Key.Weight, edge.Value.Key.Weight); Assert.AreEqual(referenceEdge.Value.Key.RepresentsNeighbourRelations, edge.Value.Key.RepresentsNeighbourRelations); Assert.AreEqual(referenceEdge.Value.Key.Tags, edge.Value.Key.Tags); var referenceCoordinates = referenceEdge.Value.Value; var coordinates = edge.Value.Value; if (referenceCoordinates == null) { // reference shape is null, shape is null. Assert.IsNull(coordinates); } else { // reference shape is not null compare them. Assert.IsNotNull(coordinates); referenceCoordinates.Reset(); coordinates.Reset(); while (referenceCoordinates.MoveNext()) { Assert.IsTrue(coordinates.MoveNext()); Assert.AreEqual(referenceCoordinates.Latitude, coordinates.Latitude); Assert.AreEqual(referenceCoordinates.Longitude, coordinates.Longitude); } Assert.IsFalse(coordinates.MoveNext()); } // check tags. if (!referenceEdge.Value.Key.IsContracted) { var referenceTags = referenceNetwork.TagsIndex.Get(referenceEdge.Value.Key.Tags); var tags = network.TagsIndex.Get(edge.Value.Key.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)); } } } } } } }
/// <summary> /// Tests preprocessing data from a PBF file. /// </summary> /// <param name="name"></param> /// <param name="pbfFile"></param> public static RouterDataSource<CHEdgeData> TestSerialization(string name, string pbfFile) { var testFilePath = Path.Combine ( Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "TestFiles", pbfFile); //var testFilePath = @"/Users/xivk/work/OSM/bin/africa-latest.osm.pbf"; var testFile = new FileInfo(testFilePath); var stream = testFile.OpenRead(); var source = new OsmSharp.Osm.Streams.Filters.OsmStreamFilterProgress(); source.RegisterSource(new PBFOsmStreamSource(stream)); var testOutputFile = new FileInfo(@"test.routing"); testOutputFile.Delete(); Stream writeStream = testOutputFile.Open(FileMode.CreateNew, FileAccess.ReadWrite); var performanceInfo = new PerformanceInfoConsumer("CHSerializerFlatFile.Serialize"); performanceInfo.Start(); performanceInfo.Report("Pulling from {0}...", testFile.Name); var data = CHEdgeGraphOsmStreamTarget.Preprocess( source, new TagsIndex(new MemoryMappedStream(new MemoryStream())), new OsmRoutingInterpreter(), Vehicle.Car); (data.Graph as DirectedGraph<CHEdgeData>).Compress(true); //var graphCopy = new DirectedGraph<CHEdgeData>(); //graphCopy.CopyFrom(data); //data = new RouterDataSource<CHEdgeData>(graphCopy, data.TagsIndex); var metaData = new TagsCollection(); metaData.Add("some_key", "some_value"); var routingSerializer = new CHEdgeSerializer(); routingSerializer.Serialize(writeStream, data, metaData); stream.Dispose(); writeStream.Dispose(); OsmSharp.Logging.Log.TraceEvent("CHSerializerFlatFile", OsmSharp.Logging.TraceEventType.Information, string.Format("Serialized file: {0}KB", testOutputFile.Length / 1024)); performanceInfo.Stop(); performanceInfo = new PerformanceInfoConsumer("CHSerializerFlatFile.Deserialize"); performanceInfo.Start(); performanceInfo.Report("Deserializing again..."); // open file again and read. writeStream = testOutputFile.OpenRead(); var deserializedGraph = routingSerializer.Deserialize(writeStream, false); performanceInfo.Stop(); return data; }
/// <summary> /// Called after all data has been read. /// </summary> public override void OnAfterPull() { base.OnAfterPull(); RouterDataSource<CHEdgeData> copy = null; if(_memoryMappedStream == null) { copy = new RouterDataSource<CHEdgeData>(new DirectedGraph<CHEdgeData>(), (this.Graph as RouterDataSource<CHEdgeData>).TagsIndex); } else { copy = new RouterDataSource<CHEdgeData>(new DirectedGraph<CHEdgeData>(_memoryMappedStream, this.Graph.VertexCount, CHEdgeData.MapFromDelegate, CHEdgeData.MapToDelegate, CHEdgeData.SizeUints), (this.Graph as RouterDataSource<CHEdgeData>).TagsIndex); } copy.CopyFrom(this.Graph); copy.Trim(); copy.Compress(); var serializer = new CHEdgeSerializer(); serializer.Serialize(_stream, copy as RouterDataSource<CHEdgeData>, new TagsCollection()); _stream.Flush(); }
/// <summary> /// Called after all data has been read. /// </summary> public override void OnAfterPull() { base.OnAfterPull(); var serializer = new CHEdgeSerializer(); serializer.Serialize(_stream, this.Graph as RouterDataSource<CHEdgeData>, new TagsCollection()); _stream.Flush(); }