瓦片地图

参考1:https://www.cnblogs.com/GISQZC/p/5582712.html

参考2:https://blog.csdn.net/hailuoli/article/details/78741872

参考3:https://baike.baidu.com/item/%E5%9B%BE%E7%89%87/372416?fr=aladdin

参考4:https://baike.baidu.com/item/%E9%A2%9C%E8%89%B2%E9%80%9A%E9%81%93/5706858

参考5:https://blog.csdn.net/stf1065716904/article/details/78450997

1.地图知识

1.1 瓦片地图的诞生

地图数据通常体量较大,需要充足的带宽和数据渲染能力。瓦片地图诞生以前,地图多在局域网的桌面软件中使用。互联网的发展,催生了通过浏览器使用地图的需求,于是在1999年,出现了WMS(Web Map Service)这样的解决方案。在浏览器这一端,没有地图的概念,但浏览器天生就是为了显示文本和图片。WMS的设计是,在服务器端把地图渲染成图片,浏览器端显示地图图片。地图图片大小根据浏览器视窗大小来定。

image

WMS大大推进互联网地图的进程。问题是,WMS根据浏览器视窗大小每次生成一大张图片,对于后端渲染和网络传输都是挑战,效率低下。紧接着就有了WMS-C(Cached)的思想,通过缓存地图瓦片提高效率。在工程实践方面更胜一筹的Google成为这一思想的最佳实践者。2005年,Google地图上线,通过高效的瓦片地图技术,让全球用户轻而易举的享受到了地图的福利。 Google地图采用的Web Mecator投影和瓦片分级切割方案,也成为目前互联网地图事实上的标准。紧接着,Google地图又新增了路网服务、实时路况、街景地图和Google地球,互联网地图的蓬勃发展就此开始。

1.2 瓦片地图的原理

瓦片

指将一定范围内的地图按照一定的尺寸和格式,按缩放级别或者比例尺,切成若干行和列的正方形栅格图片,对切片后的正方形栅格图片被形象的称为瓦片(Tile)。

image

image

层次模型

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

image

image

使用互联网地图时,我们看到的是一张铺满整个屏幕的大的地图图片。实际上,这张大的图片是多个尺寸相同(通常是256*256像素)的小图片按照既定规则无缝拼接而成的,这些小图片就是瓦片。瓦片按照如下图所示的金字塔结构组织,每张瓦片都可通过级别、行列号唯一标记。在平移地图、缩放地图时,浏览器根据金字塔规则,计算出所需的瓦片,从瓦片服务器获取并拼接。

image

由于瓦片是静态的图片,可预先生成,通过缓存和CDN技术,瓦片服务器可提供高效的瓦片读取服务。此外,浏览器并行获取和显示多张小图片,比获取和显示一张大图片要高效的多。显示地图变成和显示图片一样简单,这也是互联网地图能够承载亿级规模用户的原因。

地图坐标系
  • 经纬度坐标系
  • 像素坐标系

像素坐标系,也可以成为屏幕坐标系,像素坐标系和地图的经纬度坐标系存在对应关系,屏幕上的每一个像素都对应一个经纬度点位置。 不同缩放级别下,像素坐标系和经纬度坐标系的对应关系是不同的。

  • 投影坐标系

投影坐标系在GIS系统中非常的重要,作用是将经纬度坐标系和屏幕的像素坐标系关联起来。理解投影坐标系也是GIS系统研究中的一个重要环节。

地图投影

地图投影是利用一定数学法则把地球表面的经、纬线转换到平面上的理论和方法。由于地球是一个赤道略宽两极略扁的不规则的梨形球体,故其表面是一个不可展平的曲面,所以运用任何数学方法进行这种转换都会产生误差和变形,为按照不同的需求缩小误差,就产生了各种投影方法。

image

常见的投影类型
  1. 高斯-克吕格投影
  2. 斜轴等面积方位投影
  3. 双标准纬线等角圆锥投影
  4. 等差分纬线多圆锥投影
  5. 正轴方位投影
  6. 墨卡托投影(正轴等角圆柱投影)
墨卡托投影

墨卡托投影,是正轴等角圆柱投影。由荷兰地图学家墨卡托(G.Mercator)于1569年创立。假想一个与地轴方向一致的圆柱切或割于地球,按等角条件,将经纬网投影到圆柱面上,将圆柱面展为平面后,即得本投影。等角条件是使地球面上微分区域内两个方向的夹角投影到平面以后,保持角度不变的条件。 百度地图和Google Maps使用的投影方法都是墨卡托投影。

image

image

投影结果

  1. 图中红色矩形区域是真实投影结果。
  2. 图中蓝色正方形区域,是数学计算区域。
  3. 正方形的边长是赤道周长。
  4. 纵轴方向,纬度的变化是非线性的。
  5. 横轴方向,经度的变化是线性的。
  6. 横轴和纵轴方向,投影区域和都比真实区域大, 处于拉伸状态。
墨卡托投影坐标算法

image

1.3 瓦片地图的进化

以图片为介质的瓦片(栅格瓦片)打开了互联网地图的大门,互联网地图得以迅速普及。但是,随着地图的移动化和应用的逐渐深入,栅格瓦片至少遇到了两个问题:

  • 图片占用带宽和存储都较大,不利于地图在移动设备的应用;
  • 图片无法交互。

受网络带宽开销和存储空间的限制,栅格瓦片地图在移动端一开始就显现出先天不足。这促使在移动端,使用矢量瓦片替代栅格瓦片。矢量瓦片采用和栅格瓦片相同的分级切割方案,所不同的是,瓦片数据以矢量形式存在。矢量瓦片体积小,可高度压缩,占用的存储空间比栅格瓦片要小上千倍。一方面减小网络带宽消耗,另一方面使地图离线成为可能。目前,在浏览器端,矢量瓦片也在逐渐成为互联网地图的主流技术。但这并不是说栅格瓦片将退出历史舞台。 互联网地图数据更新不频繁,单个瓦片内需要显示的地物数量和种类有限,矢量瓦片可预先生成,进行局部更新的代价也很小。矢量瓦片并不适合数据更新频繁,数据量大,渲染方式复杂多样的场景。

2.图片知识

图片是指由图形、图像等构成的平面媒体。图片的格式很多,但总体上可以分为点阵图和矢量图两大类,我们常用BMP、JPG等格式都是点阵图形,而SWF、CDR、AI等格式的图形属于矢量图形。

JPG

全名应该是JPEG。JPEG 图片以 24 位颜色存储单个光栅图像。JPEG 是与平台无关的格式,支持最高级别的压缩,不过,这种压缩是有损耗的。渐近式JPEG文件支持交错。

可以提高或降低 JPEG文件压缩的级别。但是,文件大小是以图像质量为代价的。压缩比率可以高达 100:1。(JPEG 格式可在 10:1 到 20:1 的比率下轻松地压缩文件,而图片质量不会下降。)JPEG压缩可以很好地处理写实摄影作品。但是,对于颜色较少、对比级别强烈、实心边框或纯色区域大的较简单的作品,JPEG 压缩无法提供理想的结果。有时,压缩比率会低到5:1,严重损失了图片完整性。这一损失产生的原因是,JPEG 压缩方案可以很好地压缩类似的色调,但是 JPEG 压缩方案不能很好地处理亮度的强烈差异或处理纯色区域。

优点:摄影作品或写实作品支持高级压缩。

利用可变的压缩比可以控制文件大小。

支持交错(对于渐近式 JPEG 文件)。

广泛支持 Internet 标准。

缺点:有损耗压缩会使原始图片数据质量下降。

当您编辑和重新保存 JPEG 文件时,JPEG 会混合原始图片数据的质量下降。这种下降是累积性的。

JPEG不适用于所含颜色很少、具有大块颜色相近的区域或亮度差异十分明显的较简单的图片。

PNG

PNG是20世纪90年代中期开始开发的图像文件存储格式,其目的是企图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。流式网络图形格式(Portable Network Graphic Format,PNG)名称来源于非官方的“PNG’s NotGIF”,是一种位图文件(bitmapfile)存储格式,读成“ping”。PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可存储多到16位的α通道数据。PNG使用从LZ77派生的无损数据压缩算法。

PNG文件格式保留GIF文件格式的下列特性:

使用彩色查找表或者叫做调色板可支持256种颜色的彩色图像。

流式读/写性能(streamability):图像文件格式允许连续读出和写入图像数据,这个特性很适合于在通信过程中生成和显示图像。

逐次逼近显示(progressivedisplay):这种特性可使在通信链路上传输图像文件的同时就在终端上显示图像,把整个轮廓显示出来之后逐步显示图像的细节,也就是先用低分辨率显示图像,然后逐步提高它的分辨率。

透明性(transparency):这个性能可使图像中某些部分不显示出来,用来创建一些有特色的图像。

辅助信息(ancillaryinformation):这个特性可用来在图像文件中存储一些文本注释信息。

独立于计算机软硬件环境。

使用无损压缩。

PNG文件格式中要增加下列GIF文件格式所没有的特性:

  1. 每个像素为48位的真彩色图像。
  2. 每个像素为16位的灰度图像。
  3. 可为灰度图和真彩色图添加α通道。
  4. 添加图像的γ信息。
  5. 使用循环冗余码(cyclic redundancy code,CRC)检测损害的文件。
  6. 加快图像显示的逐次逼近显示方式。
  7. 标准的读/写工具包。
GIF

GIF是用于压缩具有单调颜色和清晰细节的图像(如线状图、徽标或带文字的插图)的标准格式。

工作原理

GIF(GraphicsInterchange Format)的原义是“图像互换格式”,是CompuServe公司在 1987年开发的图像文件格式。GIF文件的数据,是一种基于LZW算法的连续色调的无损压缩格式。其压缩率一般在50%左右,它不属于任何应用程序。目前几乎所有相关软件都支持它,公共领域有大量的软件在使用GIF图像文件。GIF图像文件的数据是经过压缩的,而且是采用了可变长度等压缩算法。所以GIF的图像深度从lbit到8bit,也即GIF最多支持256种色彩的图像。GIF格式的另一个特点是其在一个GIF文件中可以存多幅彩色图像,如果把存于一个文件中的多幅图像数据逐幅读出并显示到屏幕上,就可构成一种最简单的动画。

分 类

GIF分为静态GIF和动画GIF两种,支持透明背景图像,适用于多种操作系统,“体型”很小,网上很多小动画都是GIF格式。其实GIF是将多幅图像保存为一个图像文件,从而形成动画,所以归根到底GIF仍然是图片文件格式。但GIF只能显示256色。

GIF主要分为两个版本,即GIF89a和GIF87a:

BMP

BMP是一种与硬件设备无关的图像文件格式,使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。

由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。

典型的BMP图像文件由三部分组成:位图文件头数据结构,它包含BMP图像文件的类型、显示内容等信息;位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息。

我们知道,一幅图像的基本组成单位是以RGB为基础展开的,为此可以理解为一个图像由RGB这样的三个元素组成,R为一个红色通道,表示为1;G为一个绿色通道,表示为2;B 为一个蓝色通道,表示为3;有一处白色图像则为4,它是由1、2、3处的通道颜色混合而成,这相当于我们使用的调色板,几种颜色混合在一起将产生一种新的颜色。

颜色模式

位图(bitmap)模式

位图模式用两种颜色(黑和白)来表示图像中的像素。位图模式的图像也叫作黑白图像。因为其深度为1,也称为一位图像。由于位图模式只用黑白色来表示图像的像素,在将图像转换为位图模式时会丢失大量细节,因此photoshop提供了几种算法来模拟图像中丢失的细节。 在宽度、高度和分辨率相同的情况下,位图模式的图像尺寸最小,约为灰度模式的1/7和rgb模式的1/22以下。

灰度(grayscale)模式

灰度模式可以使用多达256级灰度来表现图像,使图像的过渡更平滑细腻。灰度图像的每个像素有一个0(黑色)到255(白色)之间的亮度值。灰度值也可以用黑色油墨覆盖的百分比来表示(0%等于白色,100%等于黑色)。使用黑折或灰度扫描仪产生的图像常以灰度显示。

双色调(duotone)模式

双色调模式采用2-4种彩色油墨来创建由双色调(2种颜色)、三色调(3种颜色)和四色调(4种颜色)混合其色阶来组成图像。在将灰度图像转换为双色调模式的过程中,可以对色调进行编辑,产生特殊的效果。而使用双色调模式最主要的用途是使用尽量少的颜色表现尽量多的颜色层次,这对于减少印刷成本是很重要的,因为在印刷时,每增加一种色调都需要更大的成本。

索引颜色(indexed color)模式

索引颜色模式是网上和动画中常用的图像模式,当彩色图像转换为索引颜色的图像后包含近256种颜色。索引颜色图像包含一个颜色表。如果原图像中颜色不能用256色表现,则photoshop会从可使用的颜色中选出最相近颜色来模拟这些颜色,这样可以减小图像文件的尺寸。用来存放图像中的颜色并为这些颜色建立颜色索引,颜色表可在转换的过程中定义或在声称索引图像后修改。

多通道(multichannel)模式

多通道模式对有特殊打印要求的图像非常有用。例如,如果图像中只使用了一两种或两三种颜色时,使用多通道模式可以减少印刷成本并保证图像颜色的正确输出。

8位/16位通道模式

在灰度“红绿蓝”(外语简称:rgb)或“青色、洋红、黄、黑”(外语简称:cmyk)模式下,可以使用16位通道来代替默认的8位通道。根据默认情况,8位通道中包含256个色阶,如果增到16位,每个通道的色阶数量为65536个,这样能得到更多的色彩细节。photoshop可以识别和输入16位通道的图像,但对于这种图像限制很多,所有的滤镜都不能使用,另外16位通道模式的图像不能被印刷。

3 java api

需熟悉以下JAVA API才能熟悉切瓦片算法

  • ImageIO
  • BufferedImage
  • WritableRaster
  • ByteInterleavedRaster
  • ComponentSampleModel
  • Graphics
  • WritableRaster
  • PNGImageReader
  • ImageWriter

生成的BufferedImage,最终在ByteInterleavedRaster保存了一个data数组,data是字节数组,保存了图片数据,记住:

  1. RGB通道图片每个像素需要3个字节保存数据,ARGB通道图片需要4个字节保存每个像素图片数据
  2. jdk限制数组最大为Integer的最大值:2147483647
  3. jdk加载最大图片的像素限制为:2147483647/3 ,或者2147483647/4
  4. 通过抽样可以加载超过像素大小的图片
  5. 理论上可以切无限大的图片

4.算法

image

image

转载于:https://my.oschina.net/u/866172/blog/1823747

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CATiledLayer 是一个可以用来加载和显示大尺寸瓦片地图的图层类。瓦片地图是一种将地图分割成许多小块(瓦片)并按需加载显示的技术。 CATiledLayer 在处理瓦片地图时具有很多优势。首先,它可以分割整个地图成许多小瓦片,这样只有在需要显示的时候才加载对应的瓦片,有效地节省了内存空间。其次,CATiledLayer 支持异步地加载瓦片,这意味着在瓦片加载过程中,用户仍然可以滑动和放大缩小地图而不会有明显的卡顿。此外,CATiledLayer 还可以自动处理瓦片的级别细节,即在放大和缩小地图时,会自动加载和卸载相应级别的瓦片,以提供更好的用户体验。 使用 CATiledLayer 加载瓦片地图的过程主要包括以下几个步骤。首先,我们需要将整个地图图片切割成许多小瓦片,并为每个瓦片创建一个对应的 CATiledLayer。然后,我们需要实现一个自定义的 UIView,并将其 layer 类型设置为 CATiledLayer。在自定义的 UIView 中,我们需要实现 drawRect 方法,在该方法中根据当前的可视区域,使用 CGContextDrawImage 方法将需要显示的瓦片绘制到屏幕上。此外,我们还需要实现一个自定义的 UIScrollView,用于处理地图的滑动和缩放,以及对应瓦片的加载和卸载。 总的来说,CATiledLayer 瓦片地图是一种高效加载和显示大尺寸地图的技术,它通过分割地图成小瓦片并按需加载显示,提供了更好的用户体验和内存效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值