Пример #1
0
        /// <summary>
        /// check if this mask contains a tile
        /// </summary>
        /// <param name="tilexy"></param>
        /// <returns></returns>
        public bool ContainsTile(TileXY tilexy)
        {
            double lat, lon;

            BingProjection.PixelXYToLatLong((int)tilexy.x * 256, (int)tilexy.y * 256, (int)tilexy.level, out lat, out lon);
            if (!ContainsLatLon(lat, lon))
            {
                return(false);
            }

            BingProjection.PixelXYToLatLong((int)tilexy.x * 256 + 256, (int)tilexy.y * 256, (int)tilexy.level, out lat, out lon);
            if (!ContainsLatLon(lat, lon))
            {
                return(false);
            }

            BingProjection.PixelXYToLatLong((int)tilexy.x * 256, (int)tilexy.y * 256 + 256, (int)tilexy.level, out lat, out lon);
            if (!ContainsLatLon(lat, lon))
            {
                return(false);
            }

            BingProjection.PixelXYToLatLong((int)tilexy.x * 256 + 256, (int)tilexy.y * 256 + 256, (int)tilexy.level, out lat, out lon);
            if (!ContainsLatLon(lat, lon))
            {
                return(false);
            }

            return(true);
        }
Пример #2
0
        private PointD GetLonLat(Point pixelOffset, TileXY tilexy)
        {
            double lat, lon;

            BingProjection.PixelXYToLatLong(tilexy.x * 256 + pixelOffset.X, tilexy.y * 256 + pixelOffset.Y, (int)tilexy.level, out lat, out lon);
            return(new PointD(lon, lat));
        }
Пример #3
0
        public bool ContainsTilePixel(TileXY tilexy, Point pixelOffset)
        {
            double lat, lon;

            BingProjection.PixelXYToLatLong((int)tilexy.x * 256 + pixelOffset.X, (int)tilexy.y * 256 + pixelOffset.Y, (int)tilexy.level, out lat, out lon);
            return(ContainsLatLon(lat, lon) ? true : false);
        }
Пример #4
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();
        }