private static void WriteTiles(NpgsqlConnection conn, string geometryTable, string geometryColumn, string idcolumn, double[] translation, Node node, string outputPath, string colorColumn = "", string attributesColumn = "") { if (node.Features.Count > 0) { counter++; var subset = (from f in node.Features select(f.Id)).ToArray(); var geometries = BoundingBoxRepository.GetGeometrySubset(conn, geometryTable, geometryColumn, idcolumn, translation, subset, colorColumn, attributesColumn); var triangleCollection = GetTriangles(geometries); var bytes = GlbCreator.GetGlb(triangleCollection); var b3dm = new B3dm.Tile.B3dm(bytes); var featureTable = new FeatureTable(); featureTable.BATCH_LENGTH = geometries.Count; b3dm.FeatureTableJson = JsonConvert.SerializeObject(featureTable); if (attributesColumn != string.Empty) { var batchtable = new BatchTable(); var allattributes = new List <object>(); foreach (var geom in geometries) { // only take the first now.... allattributes.Add(geom.Attributes[0]); } var item = new BatchTableItem(); item.Name = attributesColumn; item.Values = allattributes.ToArray(); batchtable.BatchTableItems.Add(item); var json = JsonConvert.SerializeObject(batchtable, new BatchTableJsonConverter(typeof(BatchTable))); b3dm.BatchTableJson = json; } B3dmWriter.WriteB3dm($"{outputPath}/tiles/{node.Id}.b3dm", b3dm); } // and write children too foreach (var subnode in node.Children) { var perc = Math.Round(((double)counter / Counter.Instance.Count) * 100, 2); Console.Write($"\rProgress: tile {counter} - {perc.ToString("F")}%"); WriteTiles(conn, geometryTable, geometryColumn, idcolumn, translation, subnode, outputPath, colorColumn, attributesColumn); } }
private static void WriteTiles(NpgsqlConnection conn, string geometryTable, string geometryColumn, double[] translation, Node node, string outputPath, string colorColumn = "") { if (node.Features.Count > 0) { counter++; var subset = (from f in node.Features select(f.Id)).ToArray(); var geometries = BoundingBoxRepository.GetGeometrySubset(conn, geometryTable, geometryColumn, translation, subset, colorColumn); var triangleCollection = Triangulator.GetTriangles(geometries); var bytes = GlbCreator.GetGlb(triangleCollection); var b3dm = new B3dm.Tile.B3dm(bytes); var featureTable = new FeatureTable(); featureTable.BATCH_LENGTH = geometries.Count; b3dm.FeatureTableJson = JsonConvert.SerializeObject(featureTable); var batchTable = new BatchTable(); var r = new Random(); var heights = new List <float>(); for (var i = 0; i < geometries.Count; i++) { heights.Add(r.Next(100)); } batchTable.Height = heights.ToArray(); b3dm.BatchTableJson = JsonConvert.SerializeObject(batchTable); B3dmWriter.WriteB3dm($"{outputPath}/tiles/{node.Id}.b3dm", b3dm); } // and write children too foreach (var subnode in node.Children) { var perc = Math.Round(((double)counter / Counter.Instance.Count) * 100, 2); Console.Write($"\rProgress: tile {counter} - {perc.ToString("F")}%"); WriteTiles(conn, geometryTable, geometryColumn, translation, subnode, outputPath, colorColumn); } }