跟牛老师一起学WEBGIS——WEBGIS基础(地图切片)_牛老师讲GIS的博客-程序员秘密

技术标签: webgis  跟牛老师一起学WEBGIS  牛老师  

2.1 切片服务

1.定义

瓦片数据是将矢量或影像数据进行预处理,采用高效的缓存机制(如金字塔)形成的缓存图片集,采用“级、行、列”方式进行组织,可在网页中快速加载。因此,瓦片地图加载是根据客户端请求的地图范围和级别,通过计算行列号获取对应级别下网格的瓦片(即服务器预裁剪的图片),由这些瓦片集在客户端形成一张地图。
切片示意图

2. 重要概念

切片概念

1.切片方案原点(Tile scheme origin)

采用源数据集空间参考的坐标值,一般切片方案原点取左上角(例如:谷歌切片方案的原点是[-20037508.34,20037508.34]),但是有些切片方案原点确实左下角(例如:TMS切片方案原点是[-20037508.34,-20037508.34])。源数据集的范围必须在此原点范围内(但不必与原点重合)。

2.切片大小(Tile Size:width,height)

缓存切片的宽度和高度(以像素为单位)。默认设置为 256x256。为在性能和可管理性之间寻求最佳平衡,应避免偏离宽度值 256 或 512。

3.dpi

专用输出设备的每英寸点数。如果所选择的 DPI 与输出设备(通常是显示器)的分辨率不匹配,则切片将显示错误比例。默认值为 96。

4.分辨率组

这个是在做切片的时候非常重要的一个参数,在前面一片文章里面已经说过了。
3857分辨率

5.切片范围

切片范围不是地图范围,是切片方案下的做切片的范围。例如,谷歌的切片范围是:[-20037508.34,-20037508.34,20037508.34,20037508.34]

3.切片的分类

GIS的底图一直使用金字塔技术进行切图,使用户能够快速访问指定级别的地图或者影像。但是切图本身是一张图片,无法进行交互。于是又引入了矢量图层用来显示矢量点线面,这通常需要先获取矢量地理数据(例如GeoJson),然后通过前端将其绘制成不同元素便能通过鼠标进行响应交互了。
栅格和矢量切片比较

1.栅格切片

随着大数据技术的发展,人们对电子地图的快速共享需求也越来越强烈。传统电子地图共享时,通常会通过瓦片裁剪工具获取栅格瓦片。相对于其他技术,栅格瓦片底图有其优越性,例如有效减少了传输数据体积,多级缩放等。然而,栅格瓦片底图也有一些短处,缺乏灵活性、实时性,数据完整性受损是比较突出的问题,这正是栅格数据的问题:

  • 缺乏灵活性。栅格瓦片完成后,已经保存为图片格式,样式不可修改。若要多种栅格底图,需裁剪多分栅格瓦片底图;
  • 缺乏实时性。由于栅格瓦片已保存为图片格式,当现实世界地物有变化时,不能实时更新,只能重新裁剪栅格瓦片;
  • 丢失属性信息。栅格瓦片没有属性信息,若要查询图片的多边形的属性,需要到服务器重新请求。
2.矢量切片

基于栅格瓦片底图的劣势,矢量瓦片针对矢量电子地图,按照一定的标准和技术将其保存为多种比例尺的矢量分块数据,在前端显示电子地图时,可直接调用矢量分块进行绘制。

  • 可保留属性信息,在客户端进行查询时,无需再次请求服务器;
  • 采用分块编码模式,客户端获取时只返回请求区域和相应级别的矢量瓦片底图,且采用实时绘制矢量模式,绘制效率更高;
  • 无级缩放。矢量瓦片分辨率高达4096*4096,是栅格瓦片的16倍,可保证缩放过程中的细节高度还原,且满足高分屏绘制需求;
  • 自定义渲染样式。客户端显示矢量瓦片底图时,可以按照用户赋予的样式渲染。如导航地图有白天和黑夜两种模式,只需共用一份矢量瓦片底图,利用两套样式进行渲染即可;可以通过属性过滤条件可以任意过滤筛选图元,实现个性化定制;可以编辑底图中每一个矢量图层的可见状态,调整矢量层的叠加压盖顺序,修改矢量图层的颜色、大小等显示样式。

4.相关计算

说明:下面说到的计算都是基于谷歌切片方案下的计算,因此,有些参数是固定的:

const tileExtent = [-20037508.34,-20037508.34,20037508.34,20037508.34];
const tileOrigin = [-20037508.34,20037508.34];
const tileSize = 256;
1.计算xyz
// 计算经纬度100, 39在8级时的行列号
var lonlat = [100, 39];
var xy = proj(lonlat, 'EPSG:4326', 'EPSG:3857');// [11131949.079327358, 4721671.572580107]
var res8 = ((20037508.34 - (-20037508.34)) / tileSize ) / Math.pow(2, 8); // 611.4962261962891
var size = res8 * 256;// 4891.9698095703125
var x = Math.floor((xy[0] - tileOrigin[0]) / size); //6371
var y = Math.floor((tileOrigin[1] - xy[1]) / size); //3130

2.计算切片范围

// 计算8级,行列号为100, 100的切片范围
var res8 = ((20037508.34 - (-20037508.34)) / tileSize ) / Math.pow(2, 8); // 611.4962261962891
var size = res8 * 256;// 4891.9698095703125
var xmin = 100 * size + tileOrigin[0]; //-19548311.35904297
var xmax = (100 + 1) * size + tileOrigin[0]; //-19543419.3892334
var ymin = tileOrigin[1] - (100 + 1) * size; //19543419.3892334
var ymax = tileOrigin[1] - 100 * size; //19548311.35904297

logo

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/GISShiXiSheng/article/details/108182400

智能推荐

鸿蒙应用开发:安装DevEco Studio及环境配置_czx鑫的博客-程序员秘密_deveco studio安装教程

一、安装DevEco Studio1、找到官网下载开发工具DevEco Studio官网2、解压下载好的压缩包3、关闭杀毒软件并以管理员身份运行4、在如下界面勾选DevEco Studio,直到安装完成二、下载HarmonyOS SDK1、打开DevEco Studio,选择Do not import settings,点击OK2、点击Start using DevEco Studio4、默认下载OpenHarmony SDK,也可以指定对应的存储路径,不要有中文稍作等

解决idea卡顿问题,亲测有效_豆芽爸爸呀的博客-程序员秘密_idea太卡了

IDEA优化内存配置,可提高启动和运行速度(亲测有效)一、优化IDEA配置IDEA默认启动配置主要考虑低配置用户,参数不高(默认最低128m,最高512m),导致启动慢,然后运行也不流畅,这里我们需要优化下启动和运行配置;但是在工作中的电脑一般都是8G或者16G的运行内存,所以我们需要手动去修改默认的IDEA配置。二、手动修改IDEA配置步骤找到IDEA安装的bin目录 打开idea.exe.vmoptions 文件 关键的三个参数的说明 ...

2021-10-06_爱学习的小耀612的博客-程序员秘密

陈强老师的《高级计量经济学及stata应用》视频+书籍+数据

win10安装docker desktop 测试出现 Unable to find image 'hello-world:latest' locally解决方案_OB1JADI的博客-程序员秘密

**win10安装docker desktop version:19.0305版本,测试出现 Unable to find image ‘hello-world:latest’ locally解决方案 问题描述我们在WIN10环境下安装好docker后测试hello-world镜像 出现卡在Using default tag:latest界面问题解析这是由于docker在本地没有找到...

[已解决]: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4_千雅爸爸的博客-程序员秘密

今天开发的时候,发现明明有这个id,而且也通过findviewbyid获取了,但是为什么最后得到viewpager 是空呢?Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.view.ViewPager.setAdapter(android.s

python获取自己的exe路径_weixin_30377461的博客-程序员秘密

exe路径>>> sys.executable'C:\\Python27\\python.exe'lib路径>>> sys.prefix'C:\\Python27' 转载于:https://www.cnblogs.com/yongqing/p/9595977.html...

随便推点

python工业自动化镜头_ELVIS III + Python | 如何用Python对ELVIS III进行编程开发_weixin_39637285的博客-程序员秘密

通过本文,你将学习如何在NI ELVIS III上安装和使用Python:连接到NI ELVIS III,安装包和库,下载存储库,运行Python代码。1 - 软件环境搭建配置ELVIS III设备1)安装 NI Measurement Live Support Files;2)通过以太网或无线网络将NI ELVIS III连接到Internet,以便可以从Internet上安装Python库(建...

matlab 报错:数组索引必须为正整数或逻辑值。_ANAN永不败315的博客-程序员秘密_数组索引必须为正整数或逻辑值是什么意思

报错原因可能有别的情况,只说一下我遇到的原因C语言等等其他语言,数组一般从0开始。但matlab是从1开始的。把数组改成从1开始就不报错了。看完记得点赞,(づ ̄3 ̄)づ╭~

TCP/IP详解学习笔记_奔跑的路的博客-程序员秘密

TCP/IP详解学习笔记 这位仁兄写得太好了TCP/IP详解学习笔记   这位仁兄写得太好了.http://blog.csdn.net/goodboy1881/category/204448.aspxTCP/IP详解学习笔记(13)-TCP坚持定时器,TCP保活定时器TCP/IP详解学习笔记(12)-TCP的超时与重传TCP/IP详解学习笔记

在Hibernate中使用存储过程_dnc8371的博客-程序员秘密

本文介绍了从休眠状态调用存储过程的不同方法。 JDBC操作将不涉及。 PostgreSQL将用作数据库。 CREATE DATABASE example;CREATE TABLE company ( company_id BIGSERIAL PRIMARY KEY, name TEXT NOT NULL);CREATE TABLE benefit ( benefit_...

正则化和pytorch实际正则化应用_tongk手势舞的博客-程序员秘密

深度学习离不开梯度下降:(1)优化器也是做上述公式。正则化:在下图中,虽然绿线完美的匹配训练数据,但太过依赖,并且与黑线相比,对于新的测试数据上会具有更高的错误率。虽然这个模型在训练数据集上的正确率很高,但这个模型却很难对从未见过的数据做出正确响应,认为该模型存在过拟合现象。绿线代表过拟合模型,黑线代表正则化模型。故我们使用正则化来解决过拟合问题。正则化是机器学习中通过显示控制模型复杂度来避免模型过拟合、确保泛化能力的一种有效方式。正则化在损失函数中引入模型复杂度指标..

人脸识别与向量机_m0_61811389的博客-程序员秘密

目录一、基于dlib库人脸特征提取二、人脸P上两个小黑点三、SVM算法四、对鸢尾花数据集进行SVM训练一、基于dlib库人脸特征提取代码import numpy as npimport cv2import dlibimport osimport sysimport random# 存储位置output_dir = 'E:/HHH'size = 64 if not os.path.exists(output_dir): os.maked..