public void Faces_AssignFaces_OneLoop2_ShouldAssign2() { var graphs = new TiledBarrierGraph(); // 0 // / \ // 1---2 var v1 = graphs.AddVertex( 4.788075685501099, 51.26676188180721, 564341430); var v2 = graphs.AddVertex( 4.786123037338257, 51.26496276736555, 564341431); var v3 = graphs.AddVertex( 4.790832996368408, 51.265137311403734, 564341432); var e1 = graphs.AddEdge(v1, v2); var e2 = graphs.AddEdge(v3, v2); var e3 = graphs.AddEdge(v3, v1); graphs.SetTileLoaded(Tiles.TileStatic.WorldTileLocalId(graphs.GetVertex(v1), 14)); graphs.SetTileLoaded(Tiles.TileStatic.WorldTileLocalId(graphs.GetVertex(v2), 14)); graphs.SetTileLoaded(Tiles.TileStatic.WorldTileLocalId(graphs.GetVertex(v3), 14)); graphs.AssignFaces(Tiles.TileStatic.WorldTileLocalId(graphs.GetVertex(v1), 14)); Assert.Equal(3, graphs.FaceCount); var enumerator = graphs.GetEnumerator(); enumerator.MoveTo(v1); enumerator.MoveNextUntil(e1); Assert.NotEqual(int.MaxValue, enumerator.FaceLeft); var left = enumerator.FaceLeft; Assert.NotEqual(int.MaxValue, enumerator.FaceRight); var right = enumerator.FaceRight; enumerator.MoveTo(v2); enumerator.MoveNextUntil(e2); Assert.False(enumerator.Forward); Assert.Equal(left, enumerator.FaceRight); Assert.Equal(right, enumerator.FaceLeft); enumerator.MoveTo(v3); enumerator.MoveNextUntil(e3); Assert.Equal(left, enumerator.FaceLeft); Assert.Equal(right, enumerator.FaceRight); }
public void Faces_AssignFaces_OneEdge_ShouldAssign1() { var graphs = new TiledBarrierGraph(); var v1 = graphs.AddVertex(4.7522735595703125, 50.97918242660188, 564341430); var v2 = graphs.AddVertex(4.7525310516357420, 50.97851368626033, 564341431); var e = graphs.AddEdge(v1, v2); var tile = Tiles.TileStatic.WorldTileLocalId(4.7522735595703125, 50.97918242660188, 14); graphs.SetTileLoaded(tile); graphs.AssignFaces(tile); Assert.Equal(1, graphs.FaceCount); }
public void Faces_AssignFaces_NoEdges_ShouldDoNothing() { var graphs = new TiledBarrierGraph(); graphs.AssignFaces(41525); }
public static async Task BuildForTile(uint tile, string folder, Func <uint, IEnumerable <OsmGeo> > getTile, Func <TagsCollectionBase, bool> isBarrier) { // wait until tile is removed from queue. while (true) { if (_tiles.ContainsKey(tile)) { await Task.Delay(200); } else { _tiles[tile] = tile; break; } } try { var file = Path.Combine(folder, $"{tile}.tile.graph.zip"); if (File.Exists(file)) { return; } // load data for tile. var graph = new TiledBarrierGraph(); graph.LoadForTile(tile, getTile, isBarrier); // run face assignment for the tile. var result = graph.AssignFaces(tile); while (!result.success) { // extra tiles need loading.- graph.AddTiles(result.missingTiles, getTile, isBarrier); // try again. result = graph.AssignFaces(tile); } // assign landuse. IEnumerable <(Polygon polygon, string type)> GetLanduse( ((double longitude, double latitude)topLeft, (double longitude, double latitude)bottomRight) box) { return(LandusePolygons.GetLandusePolygons(box, graph.Zoom, getTile, t => { if (DefaultMergeFactorCalculator.Landuses.TryCalculateValue(t, out var type)) { return type; } return null; })); } graph.AssignLanduse(tile, GetLanduse); await using var stream = File.Open(file, FileMode.Create); await using var compressedStream = new GZipStream(stream, CompressionLevel.Fastest); graph.WriteTileTo(compressedStream, tile); } finally { _tiles.Remove(tile, out _); } }