static void FitTableSize(ZoomlevelData zoomleveldata, bool firstlevel) { int minbaseheight = int.MaxValue; int maxbaseheight = int.MinValue; int maxdiff = int.MinValue; uint maxoffset = uint.MinValue; for (int i = 0; i < zoomleveldata.Subtiles.Count; i++) { minbaseheight = Math.Min(minbaseheight, zoomleveldata.Subtiles[i].Tableitem.Baseheight); maxbaseheight = Math.Max(maxbaseheight, zoomleveldata.Subtiles[i].Tableitem.Baseheight); maxdiff = Math.Max(maxdiff, zoomleveldata.Subtiles[i].Tableitem.Diff); zoomleveldata.Subtiles[i].Tableitem.Offset = i == 0 ? 0 : zoomleveldata.Subtiles[i - 1].Tableitem.Offset + (uint)zoomleveldata.Subtiles[i - 1].DataLength; maxoffset = Math.Max(maxoffset, zoomleveldata.Subtiles[i].Tableitem.Offset); } zoomleveldata.Tableitem.MinBaseheight = (ushort)minbaseheight; zoomleveldata.Tableitem.MaxDiff = (ushort)maxdiff; if (maxoffset < 255) { zoomleveldata.Tableitem.Structure_OffsetSize = 1; } else if (maxoffset < 65536) { zoomleveldata.Tableitem.Structure_OffsetSize = 2; } else { zoomleveldata.Tableitem.Structure_OffsetSize = 3; } if (maxbaseheight < 255) { zoomleveldata.Tableitem.Structure_BaseheightSize = 1; } else { zoomleveldata.Tableitem.Structure_BaseheightSize = 2; } if (maxdiff < 255) { zoomleveldata.Tableitem.Structure_DiffSize = 1; } else { zoomleveldata.Tableitem.Structure_DiffSize = 2; } zoomleveldata.Tableitem.Structure_CodingtypeSize = firstlevel ? 1 : 0; }
static void ReadBinData(string binfile, ZoomlevelData zoomleveldata) { int bin_base = int.MinValue; int bin_diff = int.MinValue; int bin_type = int.MinValue; int bin_length = int.MinValue; if (File.Exists(binfile + ".info")) { using (StreamReader sr = new StreamReader(binfile + ".info")) { string txt = null; do { txt = sr.ReadLine(); if (txt != null) { txt = txt.Trim(); if (txt.Length > 0) { if (txt[0] != '#') { if (!ReadNotNegativIntFromLine(txt, BIN_BASE, ref bin_base)) { if (!ReadNotNegativIntFromLine(txt, BIN_DIFF, ref bin_diff)) { if (!ReadNotNegativIntFromLine(txt, BIN_TYPE, ref bin_type)) { if (!ReadNotNegativIntFromLine(txt, BIN_LENGTH, ref bin_length)) { } } } } } } } } while (txt != null); } } if (bin_base < 0) { bin_base = 0; } if (bin_diff < 0) { bin_diff = 0; } if (bin_type < 0) { bin_type = 0; } if (bin_length < 0) { bin_length = 0; } SubtileTableitem tableitem = new SubtileTableitem(); tableitem.Baseheight = (ushort)bin_base; tableitem.Diff = (ushort)bin_diff; tableitem.Type = (byte)bin_type; if (binfile.Length == 0 || !File.Exists(binfile)) { tableitem.Diff = 0; zoomleveldata.Subtiles.Add(new Subtile((byte[])null, tableitem)); } else { zoomleveldata.Subtiles.Add(new Subtile(binfile, tableitem)); } }