/*
        private static int badTileSize = -1;
        public static int BadTileSize
        {
            get{return badTileSize;}
        }

        private static byte [] badTileBytes;
        public static bool IsBadTile(MemoryStream newTile)
        {
            byte [] newTileBuffer = new byte[badTileBytes.Length];
            newTile.Position = badTileSize / 2;
            newTile.Read(newTileBuffer, 0, newTileBuffer.Length);
            bool isBad = true;
            for(int i=0; i<badTileBytes.Length; i++)
            {
                byte badByte = badTileBytes[i];
                byte newByte = newTileBuffer[i];
                if(badByte != newByte)
                {
                    isBad = false;
                    break;
                }
            }
            newTile.Position = 0;
            return isBad;
        }
        */

        /// <summary>
        /// Layer initialization code
        /// </summary>
        public override void Initialize(DrawArgs drawArgs)
        {
            try
            {
                if (this.isInitialized == true)
                {
                    return;
                }

                //init the sprite for PushPins
                pushpinsprite = new Sprite(drawArgs.device);
                //#if DEBUG
                string spritePath = Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + "\\Plugins\\VirtualEarth\\VirtualEarthPushPin.png";
                //#else
                //				string spritePath = VirtualEarthPlugin.PluginDir + @"\VirtualEarthPushPin.png";
                //
                //#endif
                if (File.Exists(spritePath) == false)
                {
                    Utility.Log.Write(new Exception("spritePath not found " + spritePath));
                }
                spriteSize = new Rectangle(0, 0, iconWidth, iconHeight);
                ppspriteTexture = TextureLoader.FromFile(drawArgs.device, spritePath);

                /*
                try
                {
                    //purposefully download the bad tile
                    //so it is not displayed or cached later on
                    Downloader d = new Downloader();
                    string badTileUrl = "http://r2.ortho.tiles.virtualearth.net/tiles/r0.png?g=1";
                    MemoryStream ms = d.DownloadImageStream(badTileUrl);
                    if(ms != null && ms.Length > 0)
                    {
                        //save off bad tile size for comparison
                        badTileSize = (int) ms.Length;
                        //save off some bytes to compare for false positives
                        ms.Position = badTileSize / 2;
                        badTileBytes = new byte[8];
                        ms.Read(badTileBytes, 0, badTileBytes.Length);
                        ms.Close();
                        ms = null;
                    }
                }
                catch(Exception ex)
                {
                    Utility.Log.Write(ex);
                }
                */

                earthRadius = parentApplication.WorldWindow.CurrentWorld.EquatorialRadius;
                earthCircum = earthRadius * 2.0 * Math.PI; //40075016.685578488
                earthHalfCirc = earthCircum / 2; //20037508.

                //NOTE tiles did not line up properly with ellps=WGS84
                //string [] projectionParameters = new string[]{"proj=merc", "ellps=WGS84", "no.defs"};
                //+proj=longlat +ellps=sphere +a=6370997.0 +es=0.0
                string[] projectionParameters = new string[] { "proj=merc", "ellps=sphere", "a=" + earthRadius.ToString(), "es=0.0", "no.defs" };
                proj = new Projection(projectionParameters);

                //static
                VeTile.Init(this.proj, parentApplication.WorldWindow.CurrentWorld.TerrainAccessor, parentApplication.WorldWindow.CurrentWorld.EquatorialRadius, veForm);

                prevVe = World.Settings.VerticalExaggeration;

                this.isInitialized = true;
            }
            catch (Exception ex)
            {
                Utility.Log.Write(ex);
                throw;
            }
        }
 public static void Init(Projection proj, TerrainAccessor terrainAccessor, double layerRadius, VirtualEarthForm veForm)
 {
     _proj = proj;
     _terrainAccessor = terrainAccessor;
     _layerRadius = layerRadius;
     _veForm = veForm;
     _font = new System.Drawing.Font("Verdana", 15, FontStyle.Bold);
     _brush = new SolidBrush(Color.Green);
 }