Virtual Earth Tile Image URI 参数解析(收集,学习VE插件必看)
2009-12-25 11:24
603 查看
Virtual Earth Tile Image URI 参数解析
2008年11月17日 星期一 17:40
转载自:http://hi.baidu.com/liongg/blog/item/5a311f3063ea919ea9018ebb.html
2008年11月17日 星期一 17:40
9月写过一篇关于Google地图和微软VE瓦片的URL解析,当时语焉不详,而且Google变化还挺快,部分URL地址已经失效,先不理他。参考微软的MSDN等文章,详细介绍下Virtual Earth Tile Image URI 参数。 微软虚拟地球目前缩放级别(level of detail)从1到23共计23级。最小一级2*2共四幅图,宽高512*512。确定level,可得到地图的宽度和高度:map width = map height = 256<<level,也即2的level次方乘以256。也可得到总行数和总列数:max column = max row = 1<<level,也即2的level次方,一般从0起标记。由相应的像素坐标计算像素所在Tile的行列号:tileX = floor(pixelX / 256);tileY = floor(pixelY / 256)。 Level 1的四幅图按照左上、右上、左下、右下的顺序分别标识为0123,随着level的增加依次递归,如图所示,非常清晰。为了优化存取和显示图片的性能,用四叉树进行存储索引而没有暴力的使用简单行列号来标记每个Tile,把行列号组合成一维的字符串,称之为quadtree keys,简写为“quadkeys”。每一个quadkey对应具体某一level的一张tile,可用作普通数据库的B-Tree索引。 组合方法:在给定level下,把行号tileY和列号tileX转换为2进制,然后行列交叉存储,再转换为4进制,即得到了相应的quadkey。譬如Level 3的第6行第4列的Tile计算:tileY = 5 = 101 ,tileX = 3 = 011;quadkey = 100111 = 213(4进制) = “213”。相应的C#算法如下(算法过程介绍)。 public static string TileXYToQuadKey(int tileX, int tileY, int levelOfDetail) { StringBuilder quadKey = new StringBuilder(); for (int i = levelOfDetail; i > 0; i--) { char digit = '0'; int mask = 1 << (i - 1); if ((tileX & mask) != 0) { digit++; } if ((tileY & mask) != 0) { digit++; digit++; } quadKey.Append(digit); } return quadKey.ToString(); } Microsoft Virtual Earth提供三种地图:卫星地图(a=aerial),普通地图(r=road)和混合地图(h=hybrid),提供两种图片格式:png和jpeg(jpg)。每个Tile的统一URL格式为: http://{0}{1}.ortho.tiles.virtualearth.net/tiles/{0}{2}.{3}?g={4} 参数{0}取值范围为(a,r,h),取决于你想要的地图形式; 参数{1}取值范围为{0,1,2,3},搞了四个服务器均衡负载,随机数即可。 参数{2}即quadkey,参考上述算法; 参数{3}取值范围(png, jpeg, jpg); 参数{4}是版本号,诸如(50,100,159),好像差别不大。 此外,当是普通地图({0}==r)的时候在URL最后还加上&shading=hill增加阴影效果。 实例:http://a1.ortho.tiles.virtualearth.net/tiles/a02123003022020320.png?g=50 Google Maps道理是相同的,编码用的是QRST,ArcGIS Server 9.3生成缓存时给每个Tile的命名也跑不出这个圈圈。 |
相关文章推荐
- 【转】 Virtual Earth Tile Image URI 参数解析
- 前端攻城狮学习笔记三:实现一个URI解析方法,把url里#之后的参数解析成指定的数据结构。
- Dynamic CRM 2013学习笔记(一)插件输入实体参数解析
- WorldWind学习系列十一:Virtual Earth插件学习
- Dynamic CRM 2013学习笔记(一)插件输入实体参数解析
- Logstash收集nginx日志之使用grok过滤插件解析日志
- 学习 Message(13): 解析 TWMMouse.Keys 参数
- Maven的学习资料收集--(二)安装m2eclipse插件
- 收集2016年值得学习的源码、第三方和插件
- ExtJS Combo学习,相关参数属性解析
- 如何用Wireshark lua编写的协议解析器,查看HTTP包的URI/URL的Query String里的参数
- 常用的前端工具,js插件,前端书籍,学习网址收集
- 学习eclipse插件开发资源全收集(plugin)
- Scala中上下文界定内幕中的隐式参数与隐式参数的实战详解及其在Spark中的应用源码解析之Scala学习笔记-52
- linux学习之命令参数解析——getopt()函数
- Python学习笔记(三): 收集参数
- [JAVA学习笔记-65]ThreadPoolExecutor参数解析
- iOS学习----------SDWebImage框架解析(1)
- [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))
- springmvc参数收集与类型转换源码解析