java开发百度地图瓦片_利用线程池下载百度地图瓦片图(示例代码)

继上一文章,百度地图离线功能,这里主要讲述下载瓦片图具体方法。

1.利用全能电子地图下载带水印的瓦片图。其中文件夹路径为tile/层级/x/y.jpg,如下图所示,全能电子地图1.9下载的百度地图瓦片图是一个个黑点。

lazy.gif

2.根据图片url下载图片,根据URL获取HttpURLConnection, 根据HttpURLConnection获取输入流InputStream ,在用输出流OutputStream out = new FileOutputStream(file);将字节写入文件即可。代码如下:

/*** 下载图片*/

public classBaiDuMapDownload {static volatile Integer c = 0;//成功数

static volatile Integer fail = 0;//失败数量

public static voidmain(String[] args)throwsException {

String link= "http://online3.map.bdimg.com/onlinelabel/?qt=tile&x={x}&y={y}&z={z}&styles=pl&udt=20170712&scaler=1&p=1";int z = 19;//层级

int xmin = 103514;//x最小值

int xmax = 104292;//x最大值

int ymin = 29400;//y最小值

int ymax = 30700;//y最大值

for (int i = xmin; i <= xmax; i++) { //循环X

for (int j = ymin; j <= ymax; j++) { //循环Y

try{

URL url= new URL(link.replace("{x}", i + "").replace("{y}", j + "").replace("{z}", z + ""));

HttpURLConnection conn=(HttpURLConnection) url.openConnection();

conn.setConnectTimeout(100);

conn.connect();

InputStream in=conn.getInputStream();

File dir= new File("d:/mybaidumapdownload1/tiles/" + z + "/" +i);if (!dir.exists()) {

dir.mkdirs();

}

File file= new File("d:/mybaidumapdownload1/tiles/" + z + "/" + i + "/" + j + ".jpg");if (!file.exists()) {

file.createNewFile();

}

OutputStream out= newFileOutputStream(file);byte[] bytes = new byte[1024 * 20];int len = 0;while ((len = in.read(bytes)) != -1) {

out.write(bytes,0, len);

}

out.close();

in.close();//System.out.println("已成功下载:" + z + "_" + i + "_" + j + ".jpg");

c++;

}catch(Exception e) {

System.out.println(e.getMessage());

fail++;

}

}//循环Y结束

} //循环X结束

Thread.sleep(1000);

System.out.println("共下载: " + c + " 张");

System.out.println("失败: " + fail + " 张");

}

}

3.通过上面的代码就可以下载百度图片,但是很明显,上面代码是单线程,而且会IO阻塞,百度地图下载到第19级时有将近一百万的瓦片图。下面是线程池ThreadPoolExecutor

优化下代码。本来两天才能下完的图时间缩减一天会感觉很棒。

/*** 线程池下载图片*/

class BDTask implementsRunnable{

String link;int i; //x坐标

int j; //y坐标

int z; //缩放级别

static volatile Integer c = 0;//成功数

static volatile Integer fail = 0;//失败数量

public BDTask(String link, int i, int j, intz) {this.link =link;this.i =i;this.j =j;this.z =z;

}public static voidmain(String[] args)throwsException {

String link= "http://online3.map.bdimg.com/onlinelabel/?qt=tile&x={x}&y={y}&z={z}&styles=pl&udt=20170712&scaler=1&p=1";int z = 12; //层级

int xmin = 808; //x最小值

int xmax = 814; //x最大值

int ymin = 230; //y最小值

int ymax = 239; //y最大值

//创建线程池,corePoolSize两条线程,最大存在四条线程,大于corePoolSize小于MaxmumPoolSize的线程等待空闲时间为500毫秒,任务队列LinkBlockingQueue不写时的默认值为Integer默认值.

ThreadPoolExecutor threadPoolExecutor= new ThreadPoolExecutor(2,4,500, TimeUnit.MILLISECONDS, new LinkedBlockingQueue());for (int i = xmin; i <= xmax; i++) { //循环X

for (int j = ymin; j <= ymax; j++) { //循环Y

threadPoolExecutor.execute(newBDTask(link,i,j,z));//new Thread(new BDTask(link,i,j,z)).start();//此种方法会一直创建线程导致死机

} //循环Y结束

} //循环X结束

threadPoolExecutor.shutdown(); //关闭线程池

while (!threadPoolExecutor.isTerminated()){} //一直循环等到所有任务被执行完毕时继续往下执行

System.out.println("共下载: " + c + " 张");

System.out.println("失败: " + fail + " 张");

}public voidrun() {try{

URL url= new URL(link.replace("{x}", i + "").replace("{y}", j + "").replace("{z}", z + ""));

HttpURLConnection conn=(HttpURLConnection) url.openConnection();

conn.setConnectTimeout(100);

conn.connect();

InputStream in=conn.getInputStream();

File dir= new File("d:/mybaidumapdownload1/tiles/" + z + "/" +i);if (!dir.exists()) {

dir.mkdirs();

}

File file= new File("d:/mybaidumapdownload1/tiles/" + z + "/" + i + "/" + j + ".jpg");if (!file.exists()) {

file.createNewFile();

}

OutputStream out= newFileOutputStream(file);byte[] bytes = new byte[1024 * 20];int len = 0;while ((len = in.read(bytes)) != -1) {

out.write(bytes,0, len);

}

out.close();

in.close();synchronized(fail) {

c++;

}

}catch(Exception e) {

System.out.println(e.getMessage());synchronized(c) {

fail++;

}

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 百度地图瓦片下载工具_64_v1.5.0是一款由百度公司开发的用于下载瓦片的工具软件。它的主要功能是帮助用户下载百度地图中的瓦片数据,以便在离线状态下使用地服务。 该工具具有以下几个特点和功能: 1. 瓦片下载:通过该工具,用户可以选择需要下载的地区域,并指定下载的层级和分辨率,从而下载所需的瓦片数据。这样,用户在没有网络连接时也可以查看和使用这些地数据。 2. 多线程下载:工具使用多线程技术,能够同时下载多个瓦片,提高下载效率和速度。 3. 离线使用:下载瓦片数据保存在本地,用户可以在没有网络连接的情况下使用这些地数据。比如,在没有手机信号的山区、沙漠等地方,用户仍能通过该工具下载的地数据进行导航和定位。 4. 界面友好:工具的界面简洁明了,操作简单易懂。用户只需在地上选择需要下载的区域,并设置相关参数,便可开始下载瓦片。 5. 兼容性:该工具支持64位操作系统,能在Windows等多种操作系统上运行。 总的来说,百度地图瓦片下载工具_64_v1.5.0是一款方便用户离线使用百度地图的工具软件,通过它的下载功能,用户可以下载并保存地瓦片数据,在没有网络连接的情况下仍能使用地服务,带来更好的导航和定位体验。 ### 回答2: 百度地图瓦片下载工具_64_v1.5.0是一款由百度推出的地瓦片下载工具。该工具可用于从百度地图下载瓦片数据,以供用户离线使用或进行其他地应用开发瓦片是指将整幅地分割成若干个小正方形,并按照行列编号的方式进行组织和存储的地数据。瓦片下载工具_64_v1.5.0使用了64位架构,能够更高效地进行数据处理和存储。它具有简单易用、稳定可靠的特点,能够帮助用户快速下载所需的地瓦片。 用户可以根据自己的需要,选择下载百度地图上的特定区域的瓦片数据。下载后的数据可以用于个人地的离线使用,比如在没有网络连接的情况下,仍可以查看离线地的内容。此外,开发人员也可以使用该工具下载瓦片数据,以便在自己的应用程序中使用这些地数据进行地的展示和交互。 这款工具还具备一些额外的功能,包括下载进度的显示、断点续传、多线程下载等。这些功能能够提高瓦片下载的效率和稳定性。此外,该工具还提供了一些可定制的选项,用户可以根据自己的需求设置下载瓦片数据的格式、精度和范围等参数。 总之,百度地图瓦片下载工具_64_v1.5.0是一款方便实用的地瓦片下载工具,适用于个人用户和地应用开发人员。通过该工具,用户可以快速下载所需的地瓦片数据,并在离线环境下使用这些数据。它的简单易用性和高效性能使得地数据的获取更加便捷。 ### 回答3: 百度地图瓦片下载工具_64_v1.5.0是一款由百度地图开发瓦片下载工具,主要用于将百度地图上的瓦片下载到本地使用。该工具的版本是1.5.0,适用于64位操作系统。 使用百度地图瓦片下载工具_64_v1.5.0,用户可以选择地区域进行下载,并可以设置下载层类型、放大级别、下载路径等。下载瓦片可以用于展示地理信息、进行离线地导航等应用。 该工具的优点是下载快速、操作简单,界面友好。用户只需在地上框选要下载的区域,选择下载参数,并指定下载路径,即可开始下载。同时,该工具支持批量下载,用户可以一次下载多个区域的瓦片下载完成后,用户可以直接在本地离线使用这些瓦片,无需依赖网络。 此外,百度地图瓦片下载工具_64_v1.5.0还具备一些其他特点。比如,支持自定义地范围和下载层类型,用户可以根据自己的实际需求进行设置。同时,该工具还提供了进度展示和日志记录功能,方便用户查看下载状态和记录下载过程中的信息。 综上所述,百度地图瓦片下载工具_64_v1.5.0是一款功能强大、操作简便的瓦片下载工具,适用于64位操作系统。无论是用于展示地理信息还是进行离线地导航,该工具都能提供高效、便捷的下载服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值