C#实现百度地图瓦片下载器(更新无水印版下载地址)

工程中需要做地图,但是网络瓦片下载程序一般都添加有水印,隧查阅相关资料,自己写了一个小程序

话不多说,先奉上下载链接(加了水印)及效果图
下载地址:http://download.csdn.net/detail/u014124220/9645172 (带水印 免积分下载)
http://download.csdn.net/detail/upc_xbt/9922082 (不带水印 需要10个下载积分)

C#实现百度地图瓦片下载器(更新无水印版下载地址)_第1张图片


核心代码(不记得来自哪位大神的博客了,如果看到源码出处,请在下方回复):

System.Net.WebClient wc = new System.Net.WebClient();

string url = String.Format(@"http://online{0}.map.bdimg.com/onlinelabel/?qt=tile&x={1}&y={2}&z={3}&styles=pl&udt=20160719&scaler=1&p=0",Math.Abs(thrProcess.X + thrProcess.Y) % 4, thrProcess.X, thrProcess.Y, thrProcess.Z);
string localPath = downInfo.saveDir + String.Format("\\MapTiles\\Zoom{0}\\X{1}\\", thrProcess.Z, thrProcess.X);//   z\x\y 
string fileName = String.Format("{0}.png", thrProcess.Y);

if (File.Exists(localPath + fileName))  //如果下载文件已存在,则跳过下载
{
     continue;
}

if (Directory.Exists(localPath) == false)
{
     Directory.CreateDirectory(localPath);
}

wc.DownloadFile(url + fileName, localPath + fileName);

百度坐标为球坐标,先转换为平面坐标,
z为缩放深度,x,y就是图块坐标

  function getPosInfo(pos){
    //平面坐标
    var projection =map.getMapType().getProjection();
    var worldCoordinate = projection.lngLatToPoint(pos);

    //像素坐标
    var pixelCoordinate =new BMap.Pixel(Math.floor(worldCoordinate.x * Math.pow(2, map.getZoom() -18)),
                                        Math.floor(worldCoordinate.y * Math.pow(2, map.getZoom() -18)));

    //图块坐标
    var tileCoordinate =new BMap.Pixel(Math.floor(pixelCoordinate.x /256),
                                        Math.floor(pixelCoordinate.y /256));
  }

你可能感兴趣的:(C#)