瓦片构图原理

谷歌地图图层与图片加载机制详解

http://www.cnblogs.com/enjoyeclipse/archive/2013/01/18/2865700.html

 

图层(Zoom)和图片(Tile)

在墨卡托投影法的基础上,整个谷歌地图被分为18层(Zoom):0~17。每次操作(缩放)谷歌地图的时候,都会将可见区域的图层的图片加载进来,所以,每个图层都是由一张张图片组成的,

下面Chrome浏览器的开发工具就可以看到:

 

每张图片称为Tile, 代码中经常可以看到这个变量,每一图层的图片数量Tiles = 2 pow (2*Zoom)。

那么第一个图层的图片数量为: 2 pow (2*0) = 1

       第2个图层的图片数量为 2 pow(2*1) = 4

       .....

       第17个图层的图片数量为 2 pow (2 * 17) = 17179869184

 

经纬度(Lat,Lng)和网格(Grid)

那么,谷歌是如何根据当前的视图来获取图片的呢?谷歌的做法(其他地图也一样)是将地图根据墨托卡投射法分成若干的网格,每个网格都是一张图片。

那么只要将当前的经纬度转换成网格就可以。具体的公式就不列了,懒得看,这里有段代码,

TileCoordinate locationCoord(double lat, double lon, int zoom) ,lat,lon就是当前经纬度,zoom就是图层,最后就只要知道row和colum就可以了。

复制代码
public class TileCoordinate {
public TileCoordinate(double row, double column, int zoom) {
this.row = row;
this.column = column;
this.zoom = zoom;
}
public double row;
public double column;
public int zoom;
}
static TileCoordinate locationCoord(double lat, double lon, int zoom) {
  if (System.Math.Abs(lat) > 85.0511287798066)
    return null;
  double sin_phi = System.Math.Sin(lat * System.Math.PI / 180);
  double norm_x = lon / 180;
  double norm_y = (0.5 * System.Math.Log((1 + sin_phi) / (1 - sin_phi))) / System.Math.PI;
  double tileRow = System.Math.Pow(2, zoom) * ((1 - norm_y) / 2);
  double tileColumn = System.Math.Pow(2, zoom) * ((norm_x + 1) / 2);
  return new TileCoordinate(tileRow, tileColumn, zoom);
}
复制代码

 

 

好的,拿到这个row和column有什么用呢,我们看一个例子:

http://mt2.google.cn/vt/lyrs=m@205000000&hl=zh-CN&gl=CN&src=app&x=22&y=12&z=5&s=Galile,返回的图片如下:

其中x=22, y=12就是前面提到的row和col,而z=5就是当前的缩放级别(图层),其他的参数都是表示版本和状态的,相对固定。

上面的原理讲完了,国内的地图或许稍有不同,但大致思路都是一致的。

版权所有,未经允许,请勿用作商业用途! 注意: 1、前1-7列信息为固定数据 2、此程序未做安全认证杀毒软件会提示是木马请放心使用 CreateKml1.1更新:2018年3月16日 1、生产KML附加了年月日 2、在第一行后可添加多项内容 CreateKml1.2更新:2018年5月16日 1、检索经纬度格式是否正确 CreateKml1.3更新:2018年10月31日 1、检索经纬度格式是否正确,提示错误位置 CreateKml1.4更新:2019年3月3日 1、解决了:处理大量出现的卡顿设置未知的异常(经测试3万小区扇区制作 在60秒内完成) 2、微站全向天线生产圆形(方位角填写360,半径为目标的0.5倍) 3、如选择文件提示出现BUG,请将文件另存为97-2003.xls(兼容性问题:由于你的OFFICE版本问题导致) CreateKml1.5更新:2019年3月31日 1、解决无法设置点标问题 2、解决无法设置扇区颜色问题(由于windows与谷歌颜色解析方式不一致导致部分颜色会bug,算法更进中) CreateKml1.6更新:20202月5日 1、为便于展示分类区域站点情况,增加功能将点分多个文件存放(文件夹信息放入第7列,扇区功能暂时不能共存,注:级需手工排序) 谷歌生成工具1.7更新:2020年3月2日 1、添加文件判断,更新多次写入数据导致的错误 谷歌生成工具1.8更新:2020年3月2日 1、基于1.6功能,增加扇区分类 谷歌生成工具1.81更新:2020年4月25日 1、解决站名带有特殊字符处理,问题字符 “&” 谷歌生成工具1.82更新:2020年9月6日 1、优化一些日常bug,解决.NET 组件尴尬(更新至.NETFramework 4支持)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值