Ejemplo n.º 1
0
 private async Task WriteStreamedNodesAsync(Dictionary <string, HashSet <string> > wayMap)
 {
     using (var disposableDict = new DisposableDictionary <string, StreamWriter>())
     {
         await StreamNodesAsync(wayMap, disposableDict);
     }
 }
Ejemplo n.º 2
0
        private async Task StreamNodesAsync(Dictionary <string, HashSet <string> > wayMap, DisposableDictionary <string, StreamWriter> streamWriters)
        {
            var lineCntr = 0;

            var relationRegion  = GeometryFactory.GetRegionGeometry(RouteCleanerSettings.GetInstance().TemporaryBoundariesLocation, false, false);
            var relationTracker = new TrackRelationNodes(relationRegion.Relations);

            using var fs = File.Open(RouteCleanerSettings.GetInstance().TemporaryNodeOutLocation, FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read);
            using (var sr = new StreamReader(fs))
            {
                while (sr.Peek() >= 0)
                {
                    var content = sr.ReadLine();
                    try
                    {
                        var node = JsonConvert.DeserializeObject <Node>(content);
                        if (wayMap.TryGetValue(node.Id, out var ways))
                        {
                            node.ContainingWays = ways.ToList();
                        }

                        var code = new OpenLocationCode(node.Latitude, node.Longitude, codeLength: 2);
                        if (!streamWriters.ContainsKey(code.Code))
                        {
                            streamWriters.Add(code.Code, GetStreamWriter(code.Code));
                        }

                        // update tracker with ways and relations from this node.
                        relationTracker.AddNode(node);

                        var line = JsonConvert.SerializeObject(node);
                        line = Regex.Replace(line, @"\t|\n|\r", "");
                        streamWriters[code.Code].WriteLine(line);
                    }
                    catch (JsonReaderException e)
                    {
                        Console.WriteLine($"Could not deserialize line {lineCntr} {content}: {e.Message}");
                    }
                    catch (JsonSerializationException e)
                    {
                        Console.WriteLine($"Could not deserialize line {lineCntr} {content}: {e.Message}");
                    }
                    lineCntr++;
                }
            }

            var relationLines = relationTracker.GetRelationCounts().Select(x => JsonConvert.SerializeObject(x));
            await File.WriteAllLinesAsync(RouteCleanerSettings.GetInstance().TemporaryRelationSummaryLocation, relationLines);
        }