zoom为地图层级,最小zoom=0,此时瓦片总数量为1
X轴或Y轴的瓦片数量=2^zoom
瓦片总数量=2^zoom*2^zoom
每个瓦片像素为256*256
如:当zoom=2时,X轴Y轴的瓦片数量都为2^zoom=4,瓦片总数量=2^zoom*2^zoom=16,
XY轴的像素长度=4*256=1024
/*
* 当zoom=2时
* X轴或Y轴的瓦片数量=2^zoom=4
* 每个瓦片的像素为256*256
* X轴或Y轴的像素长度长度=256*2^zoom=256*4=1024
*
* 瓦片总数量=2^zoom*2^zoom=4*4=16
*
* 85.05112877980659 => -7.958078640513122E-13(约等于0)
* 85.05 => 0.03721464739555813
* 85 => 1.6772247409192573
* 60 => 297.36923224116083
* 45 => 368.3584378011699
* 30 => 422.4770169430887
* 北纬
* 0 => 512.0
* 南纬
* -30 => 601.5229830569114
* -45 => 655.6415621988301
* -60 => 726.6307677588392
* -85 => 1022.3227752590808
* -85.05 => 1023.9627853526044
* -85.05112877980659=>1024.000000000001
*/
double v = latToPixel(0, 2);//
double y1 = Math.ceil(v / 256);
System.out.println("高德1 "+"Y轴坐标="+v+" 瓦片编号y="+y1);
double v1 = latToPixel2(0, 2);
double y2=Math.ceil(v1 / 256);
System.out.println("高德2 "+"Y轴坐标="+v1+" 瓦片编号y="+y2);
//
/**
* 高德地图瓦片坐标与Google Map、Open Street Map相同
* 纬度到墨卡托像素Y
*/
public double latToPixel(double lat, int zoom) {
double siny = Math.sin(lat * Math.PI / 180);
double y = Math.log((1 + siny) / (1 - siny));
return (128 << zoom) * (1 - y / (2 * Math.PI));
}
/**
* 高德地图瓦片坐标与Google Map、Open Street Map相同
* 纬度到墨卡托像素Y
*/
public double latToPixel2(double lat, int zoom) {
double v = Math.tan(lat * Math.PI / 180) + 1 / Math.cos(lat * Math.PI / 180);
double v1 = (1 - Math.log(v) / (Math.PI)) * Math.pow(2, zoom-1)*256;
return v1;
}