龙空技术网

GIS数据如何用于数字孪生(九)地图瓦片(切片)服务

UINO优锘科技 552

前言:

目前兄弟们对“js地图瓦片”大约比较重视,大家都需要学习一些“js地图瓦片”的相关文章。那么小编在网上搜集了一些有关“js地图瓦片””的相关知识,希望姐妹们能喜欢,咱们快快来了解一下吧!

前文阅读:

《GIS数据如何用于数字孪生(六)投影坐标系统》

《GIS数据如何用于数字孪生(七)投影坐标系统(二)》

《GIS数据如何用于数字孪生(八)地图投影杂谈》

我们今天就来详细分析一下”UINO优锘的森工厂支持什么标准/规则/类型的地图瓦片(切片)服务?”这个问题。

01 森城市发布的地图瓦片服务

首先,基于森城市发布的地图瓦片服务肯定是支持的,森城市瓦片服务发布支持下列三种方式:

● Linux下使用Docker部署后发布(需安装Docker应用容器引擎);

● Linux下直接部署发布(不需安装Docker);

● Windows或Mac下直接部署发布。

02 常见的互联网在线地图

ThingJS低代码数字孪生开发平台支持常见的互联网在线地图瓦片服务(百度地图除外),由于百度地图坐标系的坐标原点的特殊性,目前不支持百度地图作为地理底图。

如果坐标数据来自于百度地图,数据上传时选择百度坐标系,可以与其他的地理底图进行匹配。

ThingJS低代码在线开发中有修改地图底图的官方示例可供参考:

03 ArcGIS地图服务(MapServer)

以ArcGIS为例可以看出在上面的ThingJS低代码数字孪生开发平台官方示例的互联网地图中有使用 ArcGIS Server发布的地图服务(MapServer)。

用ThingJS低代码在线开发来观察一个访问ArcGIS发布MapServer的例子:

一般来说,可以通过ArcGIS服务的地址来查看该服务的“元数据”。比如:

“元数据”即空间数据的数据,是描述空间数据及相关资料的信息,便于查询和使用有关的数据。

其中比较重要的是:

3.1. Spatial Reference:空间坐标系

上图中 102100(3857)代表该地图服务所发布的地图瓦片(切片)投影类型Web墨卡托投影,也叫 (Pseudo-Mercator) 伪墨卡托投影或球面墨卡托(Spherical Mercator)。

Web墨卡托投影是一种投影坐标系,也叫做平面坐标系,在投影坐标系下的坐标单位为米(metre)。

3.2. Tile Info:瓦片(切片)信息

一般包含单张切片的图片尺寸(Height/Width)、格式(Format)等信息,还包括瓦片的层级数(Levels of Detail),以及具体每个层级的分辨率、比例尺。

把Level 0、Level 1的瓦片(切片)图拼凑为一张图,可以看出在Web墨卡托投影坐标系下的地图瓦片(切片)的索引组织规律:Z 表示缩放层级,XY 的原点在左上角,X 从左向右,Y 从上向下

讲解到这,相信大家已经对上面低代码ThingJS官方示例中的几行url有了进一步的理解。

综上,ThingJS低代码可以支持ArcGIS Server发布的地图服务(MapServer)。

04 WMTS地图服务

以WMTS地图服务为案例,当WMTS再次回到ArcGIS的服务地址。

可以发现此处有个WMTS,这就说明ArcGIS也能发布WMTS地图服务。

ThingJS低代码数字孪生开发平台能不能加载WMTS地图服务呢?当然可以!

怎样知道这个WMTS的请求地址是什么呢?

打开WMTS地图服务的“元数据”(Metadata),在Layer中找到它对应的地图服务的URL"模版"(template)。

可以看出,这部分和uearth里加载瓦片地图的url地址很像,只是uearth里可能是{x}、{y}、{z},但在这里显示的是{Style}、{TileMatrixSet}、{TileMatrix}、{TileRow}、{TileCol},“名字”不一样。其实”{}“就是个“占位符”,那占位符具体该怎么填呢?

这其实是一道“填空题”,从WMTS标准的定义来看 TileCol 其实就代表瓦片的X索引,TileRow 其实就代表瓦片的Y索引。

可以简单理解为每个 TileMatrixSet 定义了一种切片方案 ,然后再去对应的 TileMatrixSet 里去找具体的参数信息。

Identifier 定义了切片方案的 ID,

SupportedCRS 定义了切片方案的空间坐标系,

TileMatrix 定义了各级别切片的细节,比如级别ID、比例尺除数、原点(左上角)坐标、单张瓦片的尺寸等等。

比如示例中 default028mm 这个 TileMatrixSet 定义了0-23级切片的具体细节。

GoogleMapsCompatible 的TileMatrixSet 定义了0-18级切片的具体细节。

因此对于这个具体例子来说,这里有两个url可用:

对于这个例子而言,由于两个url对应的TileMatrixSet区别不大,所以在ThingJS低代码数字孪生开发平台随时都可以使用。

在WMTS标准中获取瓦片图(GetTile),除了用上面RESTful的方式请求服务地址外,还可以用KVP的方式来请求(key-value pair即以键-值对作为参数),也可以在地图服务的“元数据”中找到。

具体需要请求参数的如下:

例如:

等价于:

所以在ThingJS低代码中给瓦片图层(TileLayer)设置的 url 是用RESTful的风格,或是用KVP的风格都是可行的。不过具体还得看WTMS的“元数据”中,GetTile 提供了哪些访问方式,比如下面就只提供了KVP的方式:

综上,ThingJS低代码数字孪生开发平台支持对接OGC标准的WMTS地图瓦片服务;WMTS地图瓦片服务的坐标系目前支持Web墨卡托投影坐标系(EPSG:3857/900913)。

05 TMS地图服务

在OGC发布WMTS标准之前的地图瓦片标准是OSGeo发布的TMS 标准,TMS标准与WMTS标准最大的不同就是瓦片索引的组织方式。

根据前文我们了解到WMTS是:Z 表示缩放层级,XY 的原点在左上角,X 从左向右,Y 从上向下。

而 TMS是:Z 表示缩放层级,XY 的原点在左下角,X 从左向右,Y 从下向上。

以Web墨卡托投影的TMS服务具体举例是:

可见TMS切片的Y轴正好与WMTS的Y轴“相反”,因此在API 中,用 {y} 的“占位符”就要变成 {reverseY}。

在 QGIS 中加载 XYZTiles 如果是 TMS 标准的瓦片也是用的 {-y} 作为“占位符”。

案例

TMS以用GeoServer发布的TMS服务为例,同样可以查看他的元数据。这里面还是关注坐标系信息,同样需要是Web墨卡托投影坐标系。

可以根据 TileSet 中的信息拼出 url:

在 ThingJS 在线开发中加载,代码如下:

综上,UINO优锘的森工厂支持对接OSGeo标准的TMS地图瓦片服务;TMS地图瓦片服务的坐标系支持Web墨卡托投影坐标系(EPSG:3857/900913)。

06 XYZ瓦片

首先观察一下在ThingJS低代码API中给瓦片图层设置的url,可以发现长相有些类似,都是{x} 、{y} 、{z} 作为“占位符”去替换实际请求的瓦片地址。

所以又把这种形式的url叫做 XYZ 瓦片(切片),也可以尝试在QGIS中通过XYZ Tiles加载。

比如有时候我们看到一个url不知道它是哪种“标准”的地图服务,但能用类似的XYZ这种形式表达,那么也可以去试一试它能否加载。例如:

再比如 MapBox 的 Raster Tiles:

6.1. 瓦片索引规则

那是不是所有XYZ形式的都可以加载呢?答案是:不是的。

比如,百度的瓦片也是XYZ,但它的 XY 原点在经度为0纬度为0的位置,X 从左向右,Y 从下向上,所以百度的瓦片不能加载。

如果从XYZ瓦片的索引组织规则来看,以下几种类别的可以加载:

谷歌XYZ

Z 表示缩放层级,XY 的原点在左上角,X 从左向右,Y 从上向下,且瓦片的坐标系为Web墨卡托投影坐标系。

在实际应用中通过url进行访问的时候,有时候需要注意xyz的顺序,比如前面看到的ArcGIS发布的MapServer是{z}/{y}/{x},而OSM(OpenStreetMap)的则是{z}/{x}/{y}。

所以在API里给TileLayer设置url的形式可能为:

……/{z}/{y}/{x}[.Format]

……/{z}/{x}/{y}[.Format]

TMS

前Z 表示缩放层级,XY 的原点在左下角,X 从左向右,Y 从下向上。

那么这种在uearth里给TileLayer设置url的形式基本为:

……/{z}/{x}/{reverseY}[.Format]

项目中可能遇到的一种情况就是有时候用XXX下载软件下了瓦片图,比如下图,下载标准TMS瓦片,也选择了正确的坐标投影:

下载下来的切片直接当“静态图片资源”,多个Web服务都可进行发布(Nginx、Apache、Tomcat、IIS……)。

比如就用个Tomcat扔进去,在ThingJS低代码数字孪生开发平台中也可以加载。

那有人可能会问,那如果选择其他的瓦片格式可不可以呢?

比如:ArcGIS Server 瓦片、ArcGIS Bundle 紧凑型瓦片。答案是,不一定。

准确说是如果把下载下来的瓦片图直接当做”静态资源”访问的话不可以,因为直接下载下来的资源未必是按照XYZ的形式组织文件目录和文件(夹)名的,瓦片文件类型也未必是图片类型。

比如,ArcGIS Server 瓦片下载下来的文件目录结构如下:

ArcGIS Bundle 紧凑型瓦片下载下来的文件目录结构如下:

这种情况下就需要有能把他们转成能通过谷歌XYZ或TMS瓦片索引规则的url进行访问的服务。

总结:

ThingJS低代码数字孪生开发平台目前支持的地图瓦片 (切片) :

1.支持ThingMap发布的地图瓦片服务

2.支持常见的互联网在线地图瓦片服务 (百度地图除外)

3.支持ArcGIS发布的地图服务 (MapServer)

4.支持OGC标准的 WMTS 地图瓦片服务

5.支持OSGeo标准的 TMS 地图瓦片服务

6.支持符合谷歌XYZ、TMS瓦片索引组织形式的XYZ瓦片服务

针对上述几点,有以下注意事项:

1. 地图瓦片服务的坐标系目前仅支持Web墨卡托投影坐标系 (EPSG:3857)

2. 如果是标准的TMS规则,那么url中用reverseY作为”占位符例如: ...../[z/(x}/[reverseY} .png

3. 上述瓦片均为图片类型切片,一般为 jpg/png 图片格式,暂不支持矢量切片 VectorTile (如 Mapbox的 mvt )

结语

“投影”这个思想随处可见,3D模型的贴图也可以看做是“投影”,我们看到场景中的天空盒、环境贴图也可以看做是“投影”,就连我们在屏幕上看到的“3D”场景又何尝不是MVP(Model-View-Projection)变换后最终的投影呢?

或许在浩瀚宇宙面前我们也只是柏拉图故事中的“洞中人”罢了。

GIS数据系列中地图瓦片(切片)服务的相关内容讲解到这里就结束了,如果觉得对你有帮助有收获,可以关注我们的官方账号,持续关注更多精彩内容。

标签: #js地图瓦片