谷哥地图瓦片转百度地图瓦片

//4个数组为从1-18级逐级对应,如发现转换对应不上可以逐级自己修改对应的X,Y编号,此套编码对应四川甘孜州地区.

离线地图说明请参考:  http://blog.csdn.net/leiyong0326/article/details/42527991


package com.ly.baidu.tools;

import java.io.File;

public class GoogleToBaidu {
	static int[] baiduX = { 0, 0, 1, 3, 6, 12, 24, 49, 98, 197, 395, 790, 1581,
			3163, 6327, 12654, 25308, 50617 };
	static int[] baiduY = { 0, 0, 0, 1, 2, 4, 9, 18, 36, 73, 147, 294, 589,
			1178, 2356, 4712, 9425, 18851 };
	static int[] googleX = { 0, 1, 3, 7, 13, 26, 52, 106, 212, 425, 851, 1702,
			3405, 6811, 13623, 27246, 54492, 107917 };
	static int[] googleY = { 0, 0, 1, 2, 5, 12, 23, 47, 95, 190, 380, 761,
			1522, 3045, 6091, 12183, 24366, 47261 };

	public static void main(String[] args) {
		for (int zoom = 1; zoom < 18; zoom++) {
			//底片瓦片转换
			File dir = new File("satellite"+File.separator + (zoom - 1));
			execute(dir,zoom);
			//路段层瓦片转换
			File dir2 = new File("overlay"+File.separator + (zoom - 1));
			execute(dir2,zoom);
			System.out.println("current execute zoom:"+zoom);
		}
	}

	/**
	 * 转换瓦片
	 * @param dir
	 * @param zoom
	 */
	private static void execute(File dir, int zoom){
		if (dir.isDirectory()) {
			File[] xfs = dir.listFiles();
			for (int i = 0; i < xfs.length; i++) {
				File xf = xfs[i];
				if (xf.isDirectory()) {
					File[] yfs = xf.listFiles();//Y轴为瓦片文件,先替换文件再替换文件夹
					for (int j = 0; j < yfs.length; j++) {
						File yf = yfs[j];
						String yName = yf.getName();
						String path = yf.getParent();
						String fileType = yName.replaceAll("\\d", "");
						if (yf.isFile()
								&& yName.matches("^\\d+\\.(png|jpg){1}$")) {//只有png和jpg后缀的文件才替换
							int newY = googleToBaiduY(Integer.valueOf(yName
									.replaceAll("\\D", "")), zoom);
							File yNew = new File(path + File.separator
									+ newY + fileType);
							yf.renameTo(yNew);
//							System.out.println(yName + "to"
//									+ yNew.getName());
						}
					}
					int nX = googleToBaiduX(Integer.valueOf(xf.getName()), zoom);
					File newX = new File(xf.getParent() + File.separator
							+ nX);
					xf.renameTo(newX);//X轴为文件夹
					// System.out.println(xf.getName()+"to"+newX.getName());
				}
			}
		}
	}
	private static int googleToBaiduX(int x, int z) {
		int b = baiduX[z - 1];// 395
		int g = googleX[z - 1];// 11:843,12:1685
		// int gx = g + (x-b);// --- 1587+
		int gx = x - g + b;// --- 1587+
		// 谷歌瓦片行编号=[谷歌参照瓦片行编号+(百度行编号 – 百度参照瓦片行编号)]
		return gx;
	}

	private static int googleToBaiduY(int y, int z) {
		int b = baiduY[z - 1];// 147
		int g = googleY[z - 1];// 10:
		// int gy = g - (y-b);//
		int gy = g + b - y;//
		// 谷歌瓦片列编号=[谷歌参照瓦片列编号- (百度列编号 – 百度参照瓦片列编号)] //向上,列为递减
		return gy;
	}
}

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
要在安卓设备上实现百度瓦片XYZ谷歌的功能,需要进行以下步骤: 首先,我们需要获取百度瓦片的XYZ坐标系数据。百度瓦片使用的是自己独有的坐标系,因此我们需要将其转换谷歌使用的坐标系。可以使用相应的算法或库,比如Proj4j来完成这个转换过程。 其次,我们需要提前将谷歌地图瓦片数据预先下载好并存储在本地。可以使用谷歌地图瓦片下载工具来完成这一步骤,获取谷歌地图瓦片数据。 然后,在安卓应用程序中,我们可以使用一个自定义的地图显示控件来实现这一功能。该控件在地图显示区域内获取并显示对应坐标的瓦片图像。 最后,我们需要在安卓应用程序中编写代码来完成百度瓦片XYZ到谷歌瓦片XYZ的坐标转换。通过对百度瓦片坐标系的XYZ坐标进行转换,我们可以获得谷歌瓦片的XYZ坐标。然后根据这些坐标,从本地的谷歌瓦片数据中获取对应的瓦片图像,并将其显示在地图显示控件中。 需要注意的是,百度瓦片谷歌地图之间的坐标系不完全一致,因此在转换过程中可能会有一定的误差。为了提高转换的准确性,需要使用更高精度的坐标转换算法,并进行适当的参数调整。 在实现完成后,用户在安卓设备上使用该应用程序时,可以通过切换地图类型来在地图上同时展示百度谷歌瓦片数据,实现百度瓦片XYZ谷歌的功能。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值