刚刚做一个小的地图瓦片下载程序,本来想加个进度条来显示下载进度,但是不知道要下多少张图片,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); }
来自:http://www.360doc.com/content/13/0129/18/11253639_263089923.shtml