C# 根据经纬度得到GOOGLE瓦片地址
private int getMercatorLatitude(double lati,int zoom) { 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); } public string getTile(double longitude, double latitude, int zoom) { longitude = 180 + longitude; double longTileSize = 360.0 / (Math.Pow(2, (17 - zoom))); double tilex = longitude / longTileSize; double tiley = getMercatorLatitude(latitude,17- zoom); tilex = Convert.ToInt32(Math.Floor(tilex )); tiley = Convert.ToInt32(Math.Floor(tiley)); return tilex.ToString() + "&y=" + tiley.ToString() + "&z=" + (17 - zoom).ToString (); } |