public TDataOverviewMaker(string[] tmetaPaths) { // create dataPath array tdataPaths = new string[tmetaPaths.Length]; for (int i = 0; i < tmetaPaths.Length; i++) { tdataPaths[i] = tmetaPaths[i].ToLower().Replace(".tmeta", ".tdata"); } // load all meta info for (int i = 0; i < tmetaPaths.Length; i++) { using (MMetaFile metaFile = new MMetaFile(tmetaPaths[i])) { int recordCnt = metaFile.GetRecordCnt(); for (int j = 0; j < recordCnt; j++) { MSTileMetaInfo metainfo = metaFile.Read(j); tiles.Add(new TileMeta2(metainfo, i)); tilexys.Add(new TileXY(metainfo.tilexy)); } metaFile.Close(); } } zMin = zMax = tilexys[0].level; for (int i = 0; i < tiles.Count; i++) { zMin = Math.Min(zMin, tilexys[i].level); zMax = Math.Max(zMax, tilexys[i].level); } }
/// <summary> /// initialize map from a dir which contains *.tdata and *.tmeta files /// </summary> /// <param name="dataDir"></param> public TDataNavigator(string[] tmetaPaths, PictureBox pbox, TextBox tbTileInfo, ComboBox cbGuessedPixelValidRanges, TextBox tbUtmCorrectionZone) { this.pbox = pbox; this.tbTileInfo = tbTileInfo; this.cbGuessedPixelValidRanges = cbGuessedPixelValidRanges; this.tbUtmCorrectionZone = tbUtmCorrectionZone; // create dataPath array tdataPaths = new string[tmetaPaths.Length]; for (int i = 0; i < tmetaPaths.Length; i++) { tdataPaths[i] = tmetaPaths[i].ToLower().Replace(".tmeta", ".tdata"); } // load all meta info levelMin = Int32.MaxValue; levelMax = 0; for (int i = 0; i < tmetaPaths.Length; i++) { using (MMetaFile metaFile = new MMetaFile(tmetaPaths[i])) { int recordCnt = metaFile.GetRecordCnt(); for (int j = 0; j < recordCnt; j++) { MSTileMetaInfo meta = metaFile.Read(j); if ((int)meta.tilexy.level < levelMin) { levelMin = (int)meta.tilexy.level; centerTilexy = new TileXY(meta.tilexy); } levelMax = Math.Max(levelMax, (int)meta.tilexy.level); tiles.Add(new TileXY(meta.tilexy), new TileMeta(meta, i)); } } } // zoom in center tile to a reasonable level while (true) { int validSonCount = 0; TileXY validSonXY = centerTilexy; foreach (TileXY txy in centerTilexy.GetSon().GetSiblings()) { if (tiles.ContainsKey(txy)) { validSonCount++; validSonXY = txy; } } if (validSonCount == 1) { centerTilexy = validSonXY; } else { break; } } // guess an initial utm correction zone double lat, lon; BingProjection.PixelXYToLatLong(centerTilexy.x * 256 + 128, centerTilexy.y * 256 + 128, (int)centerTilexy.level, out lat, out lon); tbUtmCorrectionZone.Text = Helper.LongitudeToUtmZone(lon).ToString(); Paint(); }