7点 讲明白地图切片的概念与原理

简介: 7点 讲明白地图切片的概念与原理

定义

地图切片:采用预生成的方法存放在服务器端,然后根据用户提交的不同请求,把相应的地图瓦片发送给客户端的过程,它是一种多分辨率层次模型,从瓦片金字塔底层到顶层,分辨率越来越低,但表示的地理范围不变。

地图缓存:又称地图瓦片,是一个包含了不同比例尺下整个地图范围的地图切片的目录,即一个缓存的地图服务就是能够利用静态图片来快速地提供地图的服务。

优缺点

1)速度快,预先配色,显示效果佳,满足高并发访问,适合做底图。

2)瓦片地图缓存非常高效,如果你曾经查看过某一区域的瓦片,当你再次查看该区域的瓦片时,浏览器可能使用之前缓存的相同的瓦片,而不用重新下载一次。

3)瓦片地图可以渐进加载。中心区域的瓦片可能优先于边缘区域的瓦片加载,你可以移动或定位某一点,即使当前地图边缘区域还未加载。

4)简单易用。所以很容易在服务器、网络、桌面或移动设备上实现技术集成。

5)需要额外占用磁盘空间,需要预先生成切片,无法自定义地图。

原理

在进行切片之前首先要确定切图的起点(Tiling scheme origin point)、图片宽度和高度,设置起点(WGS84下默认是(-400,400))的目的在于保证同一坐标系下的切片地图可以完美的叠加在一起。

在默认的Tiling scheme origin下和图片大小的情况下进行地图切片,可以根据用户设置的比例尺来计算地图数据在整个网格中的行列号,计算公式如下:

col=(int)Math.floor((point.x1-this.x1)/256/plottingResolution);
row=(int)Math.floor((Math.abs(point.y1-this.y1))/256/plottingResolution);

其中point是当前坐标,this是origin点坐标,plottingResolution指当前Level的地图的地图分辨率。

如果要计算plottingResolution,可以根据用户输入的levelScale得到当前条件下的地图分辨率:

Scale=1:(96*2*Math.PI*6378137*resolution/360/0.0254);

主要概念

1) 四至(Extent)和原点(Origin)

2)切片的分辨率和比例尺

比例尺:图上一单位长度代表实际多少长度单位;分辨率:屏幕一像素(px)代表实际多少单位,实际单位按照地图坐标而定。分辨率与dpi(每英寸的像素数)有关、与地图单位有关。

两者之间的转换关系:

1、如果地图单位是米,dpi=96 1英寸=2.54厘米;1英寸=96像素;最终换算的单位是米;

Scale=1:(96*Resolution/0.0254);

2、如果地图单位是度(地理坐标系是WGS84),dpi为96,1度约等于111194.872221777米;

Scale=1:(96*2*Math.PI*6378137*Resolution/360/0.0254);

切片分类

1)矢量切片(详情)

是一种利用协议缓冲(Protocal Buffers)技术的紧凑的二进制格式用来传递信息。当渲染地图时矢量切片使用一系列存储的内部数据进行制图。被组织到矢量切片的图层比如(水、道路、区域等),每一层都有包含几何图形和可变属性的独立要素。通俗地讲,就是将矢量数据以建立金字塔的方式,像栅格切片那样分割成一个个描述性文件,以GeoJson格式或者PDF等自定义格式组织,然后在前端根据显示需要按需请求不同的矢量瓦片数据进行Web绘图

常见的格式有GeoJson、TopoJson、PDF(ArcGIS格式)、KML、GeoRSS等等。

2)栅格切片

注意事项

注意切片等级的设定,如果生成的级别太高,等待时间非常漫长。以ArcGIS Server切片服务为例,每一级相对上一级是 4 倍的关系,每一级是将上一级一个切片再分成大小一致的四个切片,也就是说每一级生成的切片数将是 4 的 n 次幂。

不同平台的切片方式

ArcGIS:ArcGIS Desktop、ArcGIS Server、ArcGIS API For JS/Flex

开源GIS:MapServer/GeoServer、Udig、PostGIS、openLayers

目录
相关文章
|
9月前
|
XML Java 数据库连接
谈谈Java反射:从入门到实践,再到原理
谈谈Java反射:从入门到实践,再到原理
152 0
|
9月前
|
存储 C++
【C++】多态(重写)的实现过程及其原理【核心知识点精讲】(22)
【C++】多态(重写)的实现过程及其原理【核心知识点精讲】(22)
|
8月前
|
JSON Java 测试技术
一篇文章讲明白JGit学习
一篇文章讲明白JGit学习
244 0
|
9月前
|
SQL 关系型数据库 MySQL
搞懂connectTimeout和socketTimeout的区别
搞懂connectTimeout和socketTimeout的区别
433 0
|
存储 编译器 C语言
【C】函数真的难嘛?其实一点也不难,原理很简单。
# 什么是函数 程序是由多个零件组合而成的,而函数就是这种“零件”的一个较小单位。 ## main函数和库函数 C语言程序中,main函数是必不可少的。程序运行的时候,会执行main函数的主题部分。main函数中使用了printf、scanf、puts等函数。由C语言提供的这些为数众多的函数称为库函数。 ## 什么是函数 当然,我们也可以自己创建函数。而实际上,我们也必须亲自动手创建各种函数。下面我们来自己创建一个简单的函数。 创建一个函数,接收两个整数参数,返回较大整数的值。 printf函数和scanf函数等创建得比较好得函数,即使不知道其内容,只要了解使用方法,也可以轻松使用。 ## 函
|
安全 Linux 程序员
Linux环境编程必须搞懂的几个概念
Linux环境对于初学者来说,必须深刻理解重点概念才能更好的编写代码,实现业务功能,下面就几个重要的及常用的知识点进行说明。搞懂这几个概念后以免在将来的编码出现混淆。
20850 0
Linux环境编程必须搞懂的几个概念
|
设计模式 存储 算法
理论:第七章:用生活的案例解释23种设计模式
理论:第七章:用生活的案例解释23种设计模式
142 0
理论:第七章:用生活的案例解释23种设计模式
|
编解码 缓存 NoSQL
7 段话说明 地图切片的概念与原理
7 段话说明 地图切片的概念与原理
231 0
|
设计模式
设计模式原理还不知道吗?这篇让你彻底明白
设计模式原理还不知道吗?这篇让你彻底明白
设计模式原理还不知道吗?这篇让你彻底明白
|
存储 数据采集 算法
库调多了,都忘了最基础的概念-方法篇
库调多了,都忘了最基础的概念-方法篇
176 0
库调多了,都忘了最基础的概念-方法篇