本文主要是介绍简易版谷歌系瓦片下载(天地图为例),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题来源
项目需要瓦片作为离线底图,所以便写个简易的方法。大神们可以在这个基础上改进。
代码
package tile;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;public class test {/*** 远程文件下载* @param url 下载地址* @param file 保存文件地址*/public static boolean download(URL url, File file) throws IOException {boolean flag = true;DataOutputStream dos = null;DataInputStream dis = null;try {if(!file.getParentFile().exists()) file.getParentFile().mkdirs();HttpURLConnection conn = (HttpURLConnection) url.openConnection();dos = new DataOutputStream(new FileOutputStream(file));dis = new DataInputStream(conn.getInputStream());byte[] data = new byte[2048];int i = 0;while ((i = dis.read(data)) != -1) {dos.write(data, 0, i);}dos.flush();} catch (IOException e) {flag = false;throw e;} finally {if(dis != null) dis.close();if(dos != null) dos.close();}return flag;}/*** 计算分辨率* @param maxLevel 最大级别*/public static double[] getResolutions(int maxLevel){double max = 360.0/256.0;double[] resolutions = new double[maxLevel+1];for(int z=0;z<=maxLevel;z++) resolutions[z] = max/Math.pow(2, z);return resolutions;}public static void main(String[] arg) throws IOException{double[] re = getResolutions(18);double[] extent = {106.54,21.59,108.26,23.20};for(int z=0;z<18;z++){int totalX = (int)Math.ceil(360.0/(re[z]*256.0)); //列数向上取整int totalY = (int)Math.ceil(180.0/(re[z]*256.0)); //行数向上取整 */ //起始结束列int sX = (int)Math.floor(((extent[0] + 180) / 360) * totalX);int eX = (int)Math.floor(((extent[2] + 180) / 360) * totalX);//起始结束行int sY = (int)Math.floor(((90 - extent[3]) / 180) * totalY);int eY = (int)Math.floor(((90 - extent[1]) / 180) * totalY);for(int y=sY;y<=eY;y++){for(int x=sX;x<=eX;x++){String urlstr = "http://t3.tianditu.com/DataServer?T=cva_c&x="+x+"&y="+y+"&l="+z; //天地图服务器t0-t8间选一个System.out.println(urlstr);String path = "D:/打包/"+z+File.separator+y+File.separator+x+".png";File file = new File(path);URL url = new URL(urlstr);download(url,file);}}}}
}
注意
所谓谷歌系,指的是原点在左上角,满足长宽比1:2的地图。若是如OSM等正方形,请自行改变。
这篇关于简易版谷歌系瓦片下载(天地图为例)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!