예제 #1
0
        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);
            }
        }
예제 #2
0
        /// <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();
        }