欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

轻松实现离线地图-离线地图-地图瓦片下载

程序员文章站 2022-07-15 20:11:13
...

此demo为前端页面离线地图,不连外网,不用与后端交互,瓦片下载的全就显示的全;

代码示例下载:

    链接:https://pan.baidu.com/s/1YqF9BIq3n6cJ8sdegmRlZg 密码:ie2w   里面有使用讲解视频

    或者

    https://download.csdn.net/download/bird73/10323603

 

demo中请点击indexGaoDeMy.html 启动离线地图

    --  地图的瓦盘请使用java代码自动下载,下载需要分层级,每个层级有自己的坐标

    --  下载后的瓦片放入examples/img中

    --  地图显示使用leaflet框架显示 https://leafletjs.com/ , 我只是下载了瓦片,同时将地图路径改为本地的瓦片位置

轻松实现离线地图-离线地图-地图瓦片下载

 

 

x-y-z三个概念

轻松实现离线地图-离线地图-地图瓦片下载

 

 

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

工具代码: 

HttpURLConnectionUtil.java 用于链接某网址,下载地图瓦片
package com.dragon.java.downloadpic;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpURLConnectionUtil {
        // 通过get请求得到读取器响应数据的数据流
    public static InputStream getInputStreamByGet(String url) {
        try {
            HttpURLConnection conn = (HttpURLConnection) new URL(url)
                    .openConnection();
            conn.setReadTimeout(5000);
            conn.setConnectTimeout(5000);
            conn.setRequestMethod("GET");

            if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                InputStream inputStream = conn.getInputStream();
                return inputStream;
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

        // 将服务器响应的数据流存到本地文件
    public static void saveData(InputStream is, File file) {
        try (BufferedInputStream bis = new BufferedInputStream(is);
                BufferedOutputStream bos = new BufferedOutputStream(
                        new FileOutputStream(file));) {
            byte[] buffer = new byte[1024];
            int len = -1;
            while ((len = bis.read(buffer)) != -1) {
                bos.write(buffer, 0, len);
                bos.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

Test4.java   此类用于下载x-y-x 三个轴中的所有图片

      main方法中用于拼接路径,区间范围通过zz-xx-yy这三个数组控制, 而这里面的值是打开地图网页,通过F12查询出来的坐标;

      这里就是为了拼接一个路径,并且图片存储的名称也要符合leaflet识别的规则

      拼接路径如:http://webrd03.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x=406&y=197&z=9 

 

package com.dragon.java.downloadpic;

import java.io.File;
import java.io.InputStream;

/*
 * 1. 从下面的地址下载图片,并保存在文件中。
 *要求:封装相应的工具类*
 */
public class Test4 {

	static final String bast_path = "D:/url_img_gaode_yewan/";

	public static void main(String[] args) {

		int[] zz = { 4, 4 };
		int[] xx = { 0, 15 };
		int[] yy = { 0, 9 };

		Integer width = 256;
		Integer height = 256;

		for (int z = zz[0]; z <= zz[1]; z++) {// 层
			for (int x = xx[0]; x <= xx[1]; x++) {// 经度
				for (int y = yy[0]; y <= yy[1]; y++) { // 纬度上下
					createImg(z, x, y, width, height);
				}
			}
		}

		// createImg(5, 21, 11, width, height);

	}// http://webrd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x=406&y=197&z=9

	public static void createImg(Integer z, Integer x, Integer y, Integer width, Integer height) {
		// String img_url =
		// "http://webrd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}";
		String img_url = "http://webrd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1scale=1&style=8&x={x}&y={y}&z={z}";
		// String img_url =
		// "http://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&amp;size=1&amp;scale=1&amp;style=8&amp;x={x}&amp;y={y}&amp;z={z}";

		File dir = new File(bast_path + z + File.separator + x + File.separator);
		if (!dir.exists()) {
			dir.mkdirs();
		}

		File file = new File(bast_path + z + File.separator + x + File.separator + y + ".png");

		String myurl = img_url.replaceAll("\\{x\\}", String.valueOf(x)).replaceAll("\\{y\\}", String.valueOf(y))
				.replaceAll("\\{z\\}", String.valueOf(z));

		System.out.println(myurl);
		InputStream inputStream = HttpURLConnectionUtil.getInputStreamByGet(myurl);
		HttpURLConnectionUtil.saveData(inputStream, file);

	}
}