【openlayers系统学习】4.1渲染矢量瓦片、VectorTile 层

一、VectorTile 层

我们现在知道如何加载切片图像,并且已经看到了加载和渲染矢量数据的不同方法。但是,如果我们能够拥有快速传输到浏览器的切片,并且可以动态样式化,那该多好啊?这就是矢量切片的用途。OpenLayers 通过 VectorTile 图层支持矢量切片。

注意:这里有很多瓦片​和切片​两个名称混用,都已相同的含义tile

由矢量数据渲染的世界地图

我们将从 index.html​ 中与基础练习中相同的标签开始。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>OpenLayers</title>
    <style>
      @import "node_modules/ol/ol.css";
    </style>
    <style>
      html, body, #map-container {
        margin: 0;
        height: 100%;
        width: 100%;
        font-family: sans-serif;
      }
    </style>
  </head>
  <body>
    <div id="map-container"></div>
    <script src="./main.js" type="module"></script>
  </body>
</html>

像往常一样,我们将 index.html​ 保存在workshop文件夹的根目录中。

对于该应用程序,我们将从 Workshop 文件夹根目录中的新 main.js​ 开始,并添加所需的导入:


import MVT from 'ol/format/MVT';
import VectorTileLayer from 'ol/layer/VectorTile';
import VectorTileSource from 'ol/source/VectorTile';
import {Map, View} from 'ol';
import {fromLonLat} from 'ol/proj';
  • VectorTileLayer代表一个矢量瓦片图层,允许高效地显示大量地理数据。
  • VectorTileSource代表矢量瓦片的源,用于提供瓦片数据。
  • MVT格式模块,用于解析和处理MVT格式的数据。MVT(MapBox Vector Tile)
  • fromLonLat 是一个用于将 WGS84 坐标(经度/纬度)转换为地图投影坐标的函数。

我们将使用来自 Natural Earth 数据的世界各国简易地图作为数据源,由 GeoServer 提供矢量切片服务。

我们要在此处创建的地图设置与我们在之前的练习中使用的相同:

const map = new Map({
  target: 'map-container',
  view: new View({
    center: fromLonLat([0, 0]),
    zoom: 2,
  }),
});

这次我们要使用的图层类型是 VectorTileLayer​ ,以及 VectorTileSource​ :

const layer = new VectorTileLayer({
  source: new VectorTileSource({
    format: new MVT(),
    url:
      'https://ahocevar.com/geoserver/gwc/service/tms/1.0.0/' +
      'ne:ne_10m_admin_0_countries@EPSG%3A900913@pbf/{z}/{x}/{-y}.pbf',
    maxZoom: 14,
  }),
});
map.addLayer(layer);

我们的数据源仅提供缩放级别 0​ 到 14​ ,因此我们需要将此信息传递给源。矢量切片图层通常针对 512 像素的切片大小进行优化,这也是 VectorTile 源的切片网格的默认值。数据提供者要求我们显示一些 attributions​ ,我们也将其添加到源配置中。

VectorTileSource 与 VectorSource 一样配置了format​和 URL​。MVT 格式解析 Mapbox 矢量切片。与栅格瓦片一样,通过瓦片的缩放级别和 x、y 坐标来访问瓦片数据。因此,URL 包含了 {z}​ 占位符表示缩放级别,以及 {x}​ 和 {y}​ 占位符表示瓦片坐标。

http://localhost:5173/ 上的工作示例显示了一个无样式的矢量切片地图,如下所示:

image

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值