/// <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); }
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)); }
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); }
/// <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(); }