Application.DoEvents()

刚刚做一个小的地图瓦片下载程序,本来想加个进度条来显示下载进度,但是不知道要下多少张图片,progressBar不太会用,于是直接加了个lable标签计数。

发现在运行的时候,lable标签并没有实时显示计数结果,鼠标拖动窗体程序会卡死,于是百度了一下,ok,Application.DoEvents()就这样出现在了眼前,加到循环后面,运行完美。

Application.DoEvents():刷新窗体信息


计算瓦片的位置百度搜索:Slippy map tilenames(瓦片和经纬度换算)

 使用了墨卡托投影的googlemap、天地图影像等,相应纬度对应的瓦片纵轴序号

private int getMercatorLatitude(double lati)
        {
            double maxlat = Math.PI;

            double lat = lati;
           
            if (lat > 90) lat = lat - 180;
            if (lat < -90) lat = lat + 180;

            // conversion degre=>radians
            // 转换度数到弧度
            double phi = Math.PI * lat / 180;

            double res;
              //网上其他帖子这个地方有问题,应该为加号
            //double temp = Math.Tan(Math.PI / 4 + phi / 2);
            //res = Math.Log(temp);
            //下面这一句是上面的合并
            res = 0.5 * Math.Log((1 + Math.Sin(phi)) / (1 - Math.Sin(phi)));
            double maxTileY = Math.Pow(2, zoom);
            int result = (int)(((1 - res / maxlat) / 2) * (maxTileY));

            return (result);
        }
View Code

来自:http://www.360doc.com/content/13/0129/18/11253639_263089923.shtml

posted @ 2015-11-12 16:10  章先生和陶小姐  阅读(339)  评论(0编辑  收藏  举报