地图瓦片相关学习总结

163 篇文章 19 订阅

瓦片地图



瓦片地图金字塔模型是一种多分辨率层次模型,从瓦片金字塔的底层到顶层,分辨率越来越低,但表示


的地理范围不变。
中文名 瓦片地图 模    型层次模型 软    件ArcGIS软件 发    展 瓦片技术
目录
1 原理
2 发展
原理
首先确定地图服务平台所要提供的缩放级别的数量N,把缩放级别最低、地图比例尺最大的地图图片作为


金字塔的底层,即第0层,并对其进行分块,从地图图片的左上角开始,从左至右、从上到下进行切割,


分割成相同大小(比如256x256像素)的正方形地图瓦片,形成第0层瓦片矩阵;在第0层地图图片的基础上


,按每2x2像素合成为一个像素的方法生成第1层地图图片,并对其进行分块,分割成与下一层相同大小


的正方形地图瓦片,形成第1层瓦片矩阵;采用同样的方法生成第2层瓦片矩阵;…;如此下去,直到第N一1


层,构成整个瓦片金字塔。
首先用(如ArcGIS软件等)对地图数据进行处理,配成需要的图层方案,并保存方案。
再用软件自带功能进行切片,切片过程中选择切片方案,根据所选方案不同,例如金字塔级别不同,地


图切片范围不同等,都会影响到切片的速度。切片之后的数据称为瓦片。
发展
现在越来越多的地图服务用到瓦片技术,例如现在我国实行发布的天地图服务就运用了地图瓦片技术。


其实切片之后的地图瓦片是栅格图像,并不具备定位信息,不过切片运用了相关切片算法之后,可以计


算出具体定位的位置。例如采用WGS84大地坐标系为空间参考,对地图进行切片,采用一定的切片算法,


例如用经纬度步长等比例分割形成地图瓦片,当需要对一个具体地方进行定位时,可以根据经纬度步长


来计算具体位置,以此来达到定位的功能。
========

栅格图像



栅格图像,也称光栅图像、栅格图形,是指在空间和亮度上都已经离散化了的图像。
中文名 栅格图像 也    称光栅图像、栅格图形 指 空间和亮度上都已经离散化的图像 拼    音 


shangetuxiang
目录
1 概要
2 栅格图形文件
3 格式分析(BMP)
4 格式分析(JPEG)
概要
我们可以把一幅栅格图像考虑为一个矩阵,矩阵中的任一元素对应于图像中的一个点,而相应的值对应


于该点的灰度级,数字矩阵中的元素叫做像素。数字图像与马赛克拼图相似,是由一系列像素组成的矩


形图案,如果所有的像素有且仅有两个灰度级(黑或白),则称其为二值图像,也即位图;
栅格图形文件编辑
指一种以像素或是点的方式进行描述并能独立用于绘图或显示的图形文件,其特点是所有有关绘图的数


据,包括图例、文字等,都已包含在该电子文件中。
格式分析(BMP)
BMP文件格式:
BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在Windows环境下运行的所有图象处理软件


都支持BMP图象文件格式。Windows系统内部各图像绘制操作都是以BMP为基础的。Windows 3.0以前的BMP


图文件格式与显示设备有关,因此把这种BMP图象文件格式称为设备相关位图DDB(device-dependent 


bitmap)文件格式。Windows 3.0以后的BMP图象文件与显示设备无关,因此把这种BMP图象文件格式称为


设备无关位图DIB(device-independent bitmap)格式(注:Windows 3.0以后,在系统中仍然存在DDB位


图,象BitBlt()这种函数就是基于DDB位图的,只不过如果你想将图像以BMP格式保存到磁盘文件中时,


微软极力推荐你以DIB格式保存),目的是为了让Windows能够在任何类型的显示设备上显示所存储的图


象。BMP位图文件默认的文件扩展名是BMP或者bmp(有时它也会以.DIB或.RLE作扩展名)。
格式分析(JPEG)
JPEG文件格式:
JPEG文件的格式是分为一个一个的段来存储的(但并不是全部都是段),段的多少和长度并不是一定的


。只要包含了足够的信息,该JPEG文件就能够被打开,呈现给人们。JPEG文件的每个段都一定包含两部


分一个是段的标识,它由两个字节构成:第一个字节是十六进制0xFF,第二个字节对于不同的段,这个


值是不同的。紧接着的两个字节存放的是这个段的长度(除了前面的两个字节0xFF和0xXX,X表示不确定


。他们是不算到段的长度中的)。注意:这个长度的表示方法是按照高位在前,低位在后的,与Intel的


表示方法不同。比方说一个段的长度是0x12AB,那么它会按照0x12,0xAB的顺序存储。但是如果按照


Intel的方式:高位在后,低位在前的方式会存储成0xAB,0x12,而这样的存储方法对于JPEG是不对的。


这样的话如果一个程序不认识JPEG文件某个段,它就可以读取后两个字节,得到这个段的长度,并跳过


忽略它。
========

 Google瓦片地图算法解析



概述:主要是阐述如何将瓦片地图图片拼接成完整地图的一些概念以及相关算法。
基本概念:


地图瓦片地址:http://mt2.google.cn/vt/lyrs=m@167000000&hl=zh-


CN&gl=cn&x=420&y=193&z=9&s=Galil
      瓦片图片


      现在就是要将一张张这类的地图瓦片,在客户端拼接成一幅完整的地图。


      瓦片大小为:256x256。


      url中关键参数解析:


参数 描述
mt2.google.cn Google瓦片服务服务器,可以尝试mt1.google.cn依然有效。Google提供多台瓦片服务


器,减轻服务器负载,提高网络访问效率。
x 瓦片的横向索引,起始位置为最左边,数值为0,向右+1递增。
y 瓦片的纵向索引,起始位置为最上面,数值为0,向下+1递增。
z 地图的级别,以Google为例,最上一级为0,向下依次递增。
地图投影:Web墨卡托——互联网地图通用的地图投影方式,将椭圆形地图投影成平面上的正文形,欲了


解详情请baidu之,如无特殊说明本文所指均为Web墨卡托投影下。
Bounds(地图范围):[ -20037508.3427892, -20037508.3427892, 20037508.3427892, 


20037508.3427892],单位为米,20037508.3427892表示地图周长的一半,以地图中心点做为(0,0)坐


标。
Levels:地图的级别,例如:0……22。
Resolutions:分辨率数组,与级别相对应,即一个级别对应一个分辨率,分辨率表示当前级别下单个像


素代表的地理长度。
Resolutions[n] = 20037508.3427892 * 2 / 256 / (2^n)
Center:地图显示中心点。
Level:地图显示级别。
viewSize:地图控件窗口的大小。
  根据已知地图中心点、显示级别可以将地图显示范围计算出来:


viewBounds = [Center.x - Resolutions[l]*viewSize.width/2, Center.y - Resolutions[l]


*viewSize.height/2, Center.x + Resolutions[l].viewSize.width/w, Center.y + Resolutions


[l].viewSize.height/h]
  地图切图方式:


    一幅地图由4^n个256的正方形组成,n为级别


    例如:第0级为4^0个,即世界地图由一个256图片表示。


    第1级世界地图应由4^1(4)个256图片组成,也就是将世界地图(上一级的单个图片)等分成4


块256图片。


    往下每一级依此类推……
 


拼图算法剖析:


 1、计算瓦片url


  要想出图就发须知道地图控件可视范围起始点瓦片索引、末尾瓦片索引,中间区域的瓦片索引循环


遍历即可得出。


  下面看看如果计算出起始点、末尾瓦片url索引:


    已知:l(缩放级别)、bounds(地图范围——[ -20037508.3427892, -20037508.3427892, 


20037508.3427892, 20037508.3427892])、viewBounds(地图控件可视范围)、分辨率(Resolutions[l]


)、瓦片像素宽高(256)。


    未知:startX(视图起始瓦片X方向索引)、startY(视图起始瓦片Y方向索引)、endX(视图


未尾瓦片x方向索引)、endY(视图未尾瓦片y方向索引)。


    求解:


startX = floor(((viewBounds.leftBottom.x - bounds.leftBottom.x) / Resolutions[l]) / 256);
startY = floor(((viewBounds.leftBottom.y - bounds.leftBottom.y) / Resolutions[l]) / 256);
endX = floor(((viewBounds.rightTop.x - bounds.rightTop.x) / Resolutions[l]) / 256);
endY = floor(((viewBounds.rightTop.y - bounds.rightTop.y) / Resolutions[l]) / 256);
    firstTileUrl(起始瓦片Url) = http://**********?x=startX&y=startY&z=l;


    endTileUrl(末尾瓦片Url) = http://**********?x=endX&y=startY&z=l;


    中间部分的url循环遍历即可得出。


  好啦!组成视图所有瓦片的url都已得出。下面就是要解决将这些瓦片放到哪的问题。


 2、计算瓦片放在地图控件上的位置


  先分析一下:其实只要将起始位置的瓦片像素位置算出来就可以了,由于瓦片像素大小为256,后面


的各瓦片位置也就明了了。


  所以这里只探讨一下起始瓦片的像素位置。


    已知:startX(视图起始瓦片X方向索引)、startY(视图起始瓦片Y方向索引)、分辨率


(Resolutions[l])、瓦片像素宽高(256)、bounds(地图范围——[ -20037508.3427892, -


20037508.3427892, 20037508.3427892, 20037508.3427892])、viewBounds(地图控件可视范围)。


    未知:startTileX(起始瓦片左上角X方向地理坐标)、startTileY(起始瓦片左上角Y方向地


理坐标)、distanceX(瓦片左边与地图控件左边相距的像素距离)、distanceY(瓦片上边与地图控件


上边相距的像素距离)。


    求解:


startTileX = bounds.leftBottom.x + (startX * 256 * Resolutions[l]);
startTileY = bounds.rightTop.y - (startY * 256 * Resolutions[l]);
distanceX = (viewBounds.leftBottom.x - startTileX) / Resolutions[l];
distanceY = (startTileY - viewBounds.rightTop.y) / Resolutions[l]
  公式不是最简,以方便理解,相信看官此时已经知道起始瓦片在地图控件中的摆放位置了——设地


图控件起始像素位置为(0,0),那么此瓦片的像素的位置就是(-distanceX、-distanceY)。其它瓦


片依据256像素宽高的关系依次而出。


到此已经算出了各瓦片的url以及它们应该摆放的位置,准备工作已完成,直接帖图即可完成出图工作。


算法可应用于Google、Baidu、Yahoo、Bing等web墨卡托投影的地图瓦片。


原文出处:http://www.cnblogs.com/ninemilli/archive/2011/12/26/2289285.html
========

腾讯与百度地图瓦片规则分析



目录(?)[+]
1.腾讯地图瓦片与Google地图瓦片区别和联系
1)腾讯地图瓦片与Google的地图瓦片切割方法相同,只不过腾讯地图瓦片完全遵循TMS标准,Google地


图瓦片则是TMS的一种变种。


2)地图投影坐标系均采用Web Mercator投影,地图瓦片分辨率也完全一致。


3)腾讯地图瓦片的坐标原点在左下角【-85.05112877980659,-180】,Google 地图瓦片的坐标原点在左


上角【85.05112877980659,-180】。


4)腾讯瓦片的最小缩放级别为4级,通过与腾讯低级别瓦片地址的对比分析,得出其ULR地址与xyz参数


的对应关系如下:


腾讯瓦片计算方法:URL = z  /  Math.Floor(x / 16.0)  / Math.Floor(y / 16.0) / x_y.png,其中


x,y,z为TMS瓦片坐标参数。


5)与Google瓦片坐标的关系,上式中腾讯地图瓦片坐标的x,z与Google 瓦片坐标系的X 、Z是相等的,Y 


的转换关系为:Y(Tencent) +  Y(Google) = Math.pow(2,zoom) - 1


6)为了保密,腾讯地图与Google地图在大陆地区均进行了偏移处理,采用的是国家火星坐标系GCJ-02。


注:瓦片解析方法参考以前的博文:Google 地图切片URL地址解析。


2.腾讯与Google地图瓦片转换实例:
Google瓦片: http://mt2.google.cn/vt/lyrs=m@258000000&hl=zh-


CN&gl=CN&src=app&x=214130&y=114212&z=18&s=Ga
腾讯瓦片:http://p3.map.gtimg.com/maptilesv2/18/13383/9245/214130_147931.png?


version=20130701
下面示例中 xyz为Google瓦片地图的参数。


[csharp] view plain copy 在CODE上查看代码片派生到我的代码片
int x = 214130;  
int y = 114212;  
int z = 18;  
y = int.Parse( Math.Pow(2, z).ToString()) - 1 - y;  
string url = z.ToString() + "/" + Math.Floor(x / 16.0).ToString() + "/"   
    + Math.Floor(y / 16.0).ToString()  + "/" + x.ToString() + "_"   
    + y.ToString() + ".png"; //计算结果:18/13383/9245/214130_147931.png  
3.百度地图坐标系统及地图瓦片分辨率
1)百度地图坐标系统解析:http://www.cnblogs.com/jz1108/archive/2011/07/02/2095376.html


2)百度地图瓦片分辨率与比例尺:http://hi.baidu.com/chuansl/item/5e646bc2cad418334494161d


18级,1个像素代表1米,17级,1个像素代表2米,16级代表4米,依此类推。


3)百度地图地图投影采用的依然是Web Mercator投影,地图瓦片的切片规则遵循TMS标准,瓦片坐标原


点在经纬度为0的附近,但却做了一定的偏移处理,经测算深圳地区的偏移量约为(-865,15850),即


地图瓦片(0, 0)是从Web Mercator投影坐标系的(-865,15850)点开始的。


4)为了保密,百度地图做了偏移处理,使用的是百度的BD-09坐标系,在国家要求的火星坐标系GCJ-02


上做了进一步的处理,因此GPS经纬度定位会出现偏移。


4.地图分辨率、比例尺及像素PPI之间的关系
比例尺,通常以比率(如 1:10000 )来表示,表示图上距离与实地距离之比。例如 1:10000 表示图上 


1cm 代表实际距离 10000cm,即100米。 由于比例尺起源较早,通常用(纸质)图上的距离衡量实际距


离;而分辨率则通常用设备屏幕上的距离来衡量实际距离。而同一个地图视图,尺度是唯一的,比例尺


和分辨率只不过是两种表示方法,因此它们是一一对应的。 比例尺与分辨率之间的换算公式如下:


Scale:地图比例尺;Resolution:地图分辨率;PPI:每英寸的像素点数。
其中 PPI,即 Pixel per Inch,即每英寸的像素点数(在不混淆情况下,也有用 DPI 来表示该参数)


。0.0254 为英寸和米的转换常数。
参考:分辨率与比例尺


5.总结
腾讯、百度、Google的地图投影均采用Web Mercator 投影坐标系;腾讯与Google的地图瓦片分辨率及切


片范围是完全相同的,仅仅是命名规则稍有不同,这就使得同一位置和缩放级别的地图瓦片是完全可以


重叠的;而百度地图每个缩放级别分辨率与前两者均不相同,而且地图瓦片的坐标原点做了一定的偏移


,导致百度地图与前两者的瓦片是无法重叠的,这是因为百度在GCJ-02的基础上又进行了加密处理,形


成了百度独有的BD-09坐标系。


6.应用
网络地图基本采用的是同一投影(Web Mercator),依据地图瓦片索引算法可以对不同来源的地图进行


Mushup应用,综合坐标转换可与地方坐标系很好的匹配。以下是在ArcGIS中匹配地方坐标系的应用效果





应用参考:开源项目ArcBruTile 和BruTile。


ArcBruTile display basemaps from OpenStreetMap, Bing, MapQuest, CloudMade, Mapbox, Stamen 


Design, PDOK (NL), National Park Service (US), Waag Society (NL) and others in ArcGIS 


Desktop 10.0/10.1/10.2.
BruTile is a C# open source library to access tile services like OpenStreetMap and Bing. 


BruTile has few dependencies, is platform independent and has a limited scope. It is 


intended for reuse by other more sophisticated libraries
ArcBruTile is based on the generic tiling library BruTile. For other viewers based on 


BruTile library  see theMapsui project (Silverlight, WPF, Pixelsense, Windows Phone, 


Windows 8).


========
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值