ol xyz 加载天地图_OpenLayers加载天地图方法——WMTS和XYZ

1、ol.layer.Tile及数据源类结构

openlayers中,图层(layer)不可缺少的组成部分是数据源(source),天地图是切片的数据服务,对应的图层是ol.layer.Tile,下图是其数据源对应的类结构图,红色部分是重点内容。

从图可以看到,加载天地图的数据源,可以是ol.source.WMTS(简称WMTS) 和 ol.source.XYZ(简称XYZ)。下面首先以实际的代码对分别使用WMTS和XYZ的方式加载天地图进行说明,然后总结他们的区别。

2、WMTS的方式加载天地图

//创建图层(WMTS方式)

function crtLayerWMTS(type, proj, opacity){

var projection = ol.proj.get(proj);

var projectionExtent = projection.getExtent();

var size = ol.extent.getWidth(projectionExtent) / 256;

var resolutions = new Array(19);

var matrixIds = new Array(19);

for (var z = 1; z < 19; ++z) {

// generate resolutions and matrixIds arrays for this WMTS

resolutions[z] = size / Math.pow(2, z);

matrixIds[z] = z;

}

var layer = new ol.layer.Tile({

opacity: opacity,

source: new ol.source.WMTS({

attributions: 'Tiles © 天地图',

url: 'http://t'+Math.round(Math.random()*7)+'.tianditu.com/'+type+'/wmts',

layer: type.substr(0, 3),

matrixSet: type.substring(4),

format: 'tiles',

projection: projection,

tileGrid: new ol.tilegrid.WMTS({

origin: ol.extent.getTopLeft(projectionExtent),

resolutions: resolutions,

matrixIds: matrixIds

}),

style: 'default',

wrapX: true

})

});

layer.id = type;

return layer;

}

重要说明:

(1)天地图有7个服务节点,代码中没有固定使用哪个节点的服务,而是使用 Math.round(Math.random()*7)的方式随机决定从哪个节点请求服务,避免指定节点因故障等原因停止服务的风险。

(2)天地图服务分经纬度和墨卡托投影两种类型,所以url中地图类型的投影方式应与参数 projection中保持一致(EPSG4326或EPSG3857)。

(3)天地图切片服务共有18级,在计算分辨率时,最大计算到18级;经实验发现,若指定到19或更高级别,放大到对应级别后,地图出现空白。

(4)WMTS方式加载的参数中,layer、matrixSet的可取值见下面【天地图地图类型及url】,format的取值固定为tiles, style参数为天地图服务默认的’style’。

天地图的地图类型及url如下所示:

// 全球影像地图服务(经纬度) http://t0.tianditu.com/img_c/wmts

// 全球影像注记服务(经纬度) http://t0.tianditu.com/cia_c/wmts

// 全球影像地图服务(墨卡托投影) http://t0.tianditu.com/img_w/wmts

// 全球影像注记服务(墨卡托投影) http://t0.tianditu.com/cia_w/wmts

// 全球矢量地图服务(经纬度) http://t0.tianditu.com/vec_w/wmts

// 全球矢量注记服务(经纬度) http://t0.tianditu.com/cva_w/wmts

// 全球矢量地图服务(墨卡托投影) http://t0.tianditu.com/vec_c/wmts

// 全球矢量注记服务(墨卡托投影) http://t0.tianditu.com/cva_c/wmts

// 全球地形晕渲地图服务(经纬度) http://t0.tianditu.com/ter_c/wmts

// 全球地形晕渲注记服务(经纬度) http://t0.tianditu.com/cta_c/wmts

// 全球地形晕渲地图服务(墨卡托投影) http://t0.tianditu.com/ter_w/wmts

// 全球地形晕渲注记服务(墨卡托投影) http://t0.tianditu.com/cta_w/wmts

3、XYZ的方式加载天地图

//创建图层(xyz方式)

function crtLayerXYZ(type, proj, opacity){

var layer = new ol.layer.Tile({

source: new ol.source.XYZ({

url: 'http://t'+Math.round(Math.random()*7)+'.tianditu.com/DataServer?T='+type+'&x={x}&y={y}&l={z}',

projection: proj

}),

opacity: opacity

});

layer.id = type;

return layer;

}

代码中应注意问题与上述WMTS加载方式(1)、(2)一致。

4、WMTS与XYZ方式比较

相同点:(1)不管采用哪种方式,显示的效果是一致的; (2)加载地图的类型参数应与投影参数保持一致。

不同点:(1)WMTS使用的数据源类型为ol.source.WMTS,XYZ方式使用的数据源类型为ol.source.XYZ;

(2)WMTS方式遵从标准的OGC规范,需要计算、指定分辨率、显示级别等,根据WMTS服务加载的标准规范加载天地图,XYZ方式只需根据天地图规定组装简单的url即可;

(3)实际使用中,难度上WMTS更繁琐,效率上XYZ更优。

结论:推荐使用XYZ的方式加载天地图服务(同时也是加载Google地图的首选)。

作者:顽劣的石头

原文:https://blog.csdn.net/shaxiaozilove/article/details/80371754

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux用户没有创建文件的权限设置密码,Linux学习第五章用户身份与文件权限

一、用户身份与能力Linux系统中一共有三种用户第一种&#xff1a;管理员 root UID 0第二种&#xff1a;系统用户 不需要登录系统 负责单一服务的运行 UID 0-1000第三种&#xff1a;普通用户 日常登录系统操作的用户 UID 1000--uid1000(zhang) gid1000(zhang) groups…

java类验证和装载顺序_Java类加载机制实现流程及原理详解

前言我们知道&#xff0c;Java项目编译后会生成许许多多的class文件&#xff0c;class文件保存着类的描述信息。虚拟机把描述类的数据从Class文件加载到内存&#xff0c;并对数据进行校验、转化解析和初始化&#xff0c;最终形成可以被虚拟机直接使用的Java类型&#xff0c;这就…

Linux中more命令的使用,Linux中more命令使用详解教程

1、使用权限&#xff1a;所有者 什么是所有者权限&#xff1f;2、使用方式more [参数选项] [文件]参数&#xff1a;num 从第num行开始显示&#xff1b;-num 定义屏幕大小&#xff0c;为num行&#xff1b;/pattern 从pattern 前两行开始显示&#xff1b;-c 从顶部清屏然后显示;-…

k8s 查看ip地址属于哪个pod_一个简单的例子理解Kubernetes的三种IP地址类型

很多Kubernetes的初学者对Kubernetes里面三种不同的IP地址和工作机制理解得不是很清楚。本文我们通过一个最简单的例子来学习。用如下命令行创建一个基于nginx的deployment&#xff1a;kubectl run nginx --imagenginx:maxline用kubectl get deploy查看成功生成的名为nginx的de…

linux resin 查看日志命令,【转】linux:访问日志分析

作为一个程序员或项目负责人&#xff0c;甚至运营人员&#xff0c;很多人都想知道&#xff1a;* 我们的项目访问量怎么样* 用户访问高峰在什么时候* 系统变慢的时候用户做了哪些操作* 用户对哪些功能比较感兴趣* 真实用户在服务器上的操作轨迹是什么样的* 系统的瓶颈在哪* 哪些…

linux系统初级管理书,Linux系统管理基础--超级适合Linux新手的书

liuyongqing 于 2012-11-15 11:53:18发表:谢谢分享liuyongqing 于 2012-11-15 11:53:11发表:谢谢分享liuyongqing 于 2012-11-15 11:52:52发表:谢谢分享liuyongqing 于 2012-11-15 11:52:46发表:谢谢分享liuyongqing 于 2012-11-15 11:52:43发表:谢谢分享wankuixing 于 2012-11…

是vans_Vans 的旧海报上原来有这么多学问…

事情是这样的&#xff0c;某天&#xff0c;当我们编辑部翻开一张 Vans 70 年代的海报&#xff0c;发现开头上面写着&#xff1a;GO “JAMIN” IN VANS。这段话引起了在场的所有人的好奇。(图片来源&#xff1a;Vans)到底什么是 “JAMIN” 呢&#xff1f; 在我们刨根究底的搜寻下…

linux单机到单机adg环境,Oracle 11.2.0.4 DataGuard 环境打PSU,OJVM PSU补丁快速参考

环境&#xff1a;RHEL6.5 Oracle 11.2.0.4 DataGuard physical standby主库和备库都是单节点。需求&#xff1a;主备库同时应用160719的PSU和OJVM PSU补丁。先参考MOS文档 ID 278641.1 的解决方案如下&#xff1a;SOLUTIONProcess Overview:In the primary disable log shippi…

python增量更新数据_Python标准库——加密

增量更新散列计算器的update()方法可以反复调用。每次调用时&#xff0c;都会根据提供的附加文本更新摘要。增量更新比将整个文件读入内存更高效&#xff0c;而且能生成相同的效果。新建hashlib_update.py文件。import hashlibfrom hashlib_data import loremh hashlib.md5()h…

linux 帮助文档管理,Linux系统帮助文件使用——man命令

如何获取命令帮助&#xff1a;(1)如果是内键命令&#xff1a;help COMMAND 例如&#xff1a;help history外部命令&#xff1a; COMMAND –help 例如&#xff1a;ifconfig –help(2)也可以查看manual手册&#xff0c;手册存放在/usr/share/man&#xff0c;全是.gz压缩…

activiti前端画图转化_记Activiti入门使用-2 流程绘制、导入及开始一个流程

一、流程绘制与导入百度啥的找了好多bpmn绘制工具&#xff0c;都不尽如人意&#xff0c;大多数都不能编辑网关出口的跳转条件&#xff0c;最后还是选择了activiti官方的那个绘图的app。。。啥都好&#xff0c;就是线不能弯&#xff0c;很难受。(后来开发的时候惊讶地发现了方法…

int是不是python保留字_下面不属于Python保留字的是:

【填空题】作解剖定位时&#xff0c;家畜前、后肢的后面分别称为( )和( )。【单选题】世界上第一条高速铁路是【单选题】ZZ* ?【单选题】下面不属于Python保留字的是&#xff1a;【单选题】The accounting concept which requires assets to be valued at their net book val…

计算机系统结构实验报告Linux,计算机操作系统体系结构实验报告.doc

操作系统实验报告实验目的&#xff1a;随着操作系统应用领域的扩大&#xff0c;以及操作系统硬件平台的多样化&#xff0c;操作系统的体系结构和开发方式都在不断更新&#xff0c;目前通用机上常见操作系统的体系结构有如下几种:模块组合结构、层次结构、虚拟机结构和微内核结构…

python列表的表示形式_python 列表推导式

1、列表推导式书写形式&#xff1a;[表达式 for 变量 in 列表] 或者 [表示式 for 变量 in 列表 if 条件]1 #!/usr/bin/python2 #-*- coding: utf-8 -*-34 li [1,2,3,4,5,6,7,8,9]5 print [x**2 for x inli]67 print [x**2 for x in li if x>5]89 print dict([(x,…

linux sh 编程,Linux shell 编程入门

shell 编程概念(1) shell是一种命令行解释器&#xff0c;外壳有很多种类(2) shell 看成是Linux内核和用户沟通的桥梁&#xff0c;用户默认不能直接操作内核(3)可以通过shell外壳去操作&#xff0c;用户指令传递给shell&#xff0c;传递给Linux内核&#xff0c;内核接受去处理(4…

云科技网络验证源码_面向虚拟化架构和容器云的开源安全工具

随着云和虚拟技术发展&#xff0c;docker容器的使用越来越流行和方便。有很多企业已经把基础架构由传统实体机转移到了虚拟机化架构&#xff0c;基于公有云、私有云以及容器云构建在线服务。与容器相关的安全性对变得越来越重要。与传统的安全性方法相比&#xff0c;虚拟化架构…

linux ubuntu 安装yum,ubuntu使用yum安装软件问题

其实ubuntu是不应该用yum来管理软件安装的&#xff0c;只是后来才发现的&#xff0c;这里记录一下尝试的过程。一开始是想把windows桌面上的文件拖到xshell登录的ubuntu的目录中&#xff0c;但是没成功&#xff0c;参考https://blog.csdn.net/liuao107329/article/details/4999…

kali linux 桌面消失_kalilinux系统设置不见了的解决方案

kalilinux的系统设置不见了是由于删除软件或者错误配置导致的&#xff0c;解决方法是重新安装桌面环境。下面我给出几个不同桌面环境。KDE桌面1.KDE Plasma Desktop (最小化的等离子桌面)安装&#xff1a;apt-get install kali-defaults kali-root-login desktop-base kde-plas…

linux异步实现原理,Android异步处理四:AsyncTask的实现原理

分析&#xff1a;在分析实现流程之前&#xff0c;我们先了解一下AsyncTask有哪些成员变量。privatestaticfinalintCORE_POOL_SIZE 5;//5个核心工作线程privatestaticfinalintMAXIMUM_POOL_SIZE 128;//最多128个工作线程privatestaticfinalintKEEP_ALIVE 1;//空闲线程的超时时间…

ue4集合类型_UE4项目问题集合

debugeditor模式下&#xff0c;在LoadPackage过程中crash&#xff0c;vs报出Stack overflow的错误这是由于Package层数过多&#xff0c;vs栈不够用导致的。而ue4用UBT导致不能直接修改项目的栈大小。之前项目后期就因为这个崩溃导致大家没法再用debug模式进行开发。直接的解决办…