多线程下载地图切片程序(更新)

1. 第一次运行:

  读取下载任务参数:ConnectionString、图片 Url、下载的切片保存到数据库而不存为独立的文件,不更新已有的切片数据。
  设置地图范围和下载线程,如图:下载从 13 ~ 17 级放大尺度的指定范围,每级放大尺度将有 100 个下载线程(10 * 10)。

2. 开始下载任务:

  判断本地(数据库或切片文件)是否存指定的切片,若有就跳过,否则下载切片。
  若地图切片为空白区域,则不保存到数据库。
  若当前切片下载失败,则记录其 Url。
  在此期间,将 gif 格式 转换为 png 格式。

3. 停止下载任务:

  100 个下载线程逐一停止,并将每个线程的下载进度保存起来。
  重新下载之前下载失败的图片。

4. 再次运行下载任务:

  选择继续上次的下载任务还是新建下载任务。

5. 测试:

  如下图,在 13 级放大尺度下已有部分图片,空白处还没有完成下载。

 

存在的问题:

  这个程序将会按照 x、y、zoom 的连续递增下载图片,而在选定的区域内总共包括 322586000 个图片(包括空白图片),平均每秒下载 10 张图片,也需要连续下载约 374 天!

  实际上,地图在上一级的放大尺度中,若某区域为空白,则下面几级都为空白,只要记住这些空白范围,在下面几级跳过的空白切片数量将是非常可观的,估计在较短的时间内就能完成所有的下载任务,比如一个月。

------------------------------------------------------------------------------------------------------------

程序改进:

根据前面的思路,程序采用递归算法,判断当前切片是否为空白,不为空白就继续深入当前区域的下一级放大尺度执行下载任务,否则跳过。

新增最大线程设置,检查当前下载线程数,如果大于 maxThreads 则在同一线程递归下载,小于 maxThreads 就启用新线程递归下载:

经过 15 小时的下载,如图:

以 "Sub_" 开头的就是动态产生的下载线程。

另外,由于采用递归,不能准确的保存当前的下载进度。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值