public void FirstBatchTableTest() { // arrange var batchTable = new BatchTable(); var batchTableItem1 = new BatchTableItem(); batchTableItem1.Name = "first item"; batchTableItem1.Values = new string[3] { "0", "1", "2" }; var batchTableItem2 = new BatchTableItem(); batchTableItem2.Name = "second item"; batchTableItem2.Values = new string[3] { "100", "101", "102" }; batchTable.BatchTableItems.Add(batchTableItem1); batchTable.BatchTableItems.Add(batchTableItem2); // act var json = JsonConvert.SerializeObject(batchTable, new BatchTableJsonConverter(typeof(BatchTable))); // assert Assert.IsTrue(json == "{\"first item\":[\"0\",\"1\",\"2\"],\"second item\":[\"100\",\"101\",\"102\"]}"); }
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); } }