点击查看:最新Cesium可视化系统实战视频课程

2025020617033257214223ae01279d78f03e7eba19e926468Cesium 是一个强大的开源 3D 地球浏览器,广泛用于地理信息系统 (GIS) 和空间数据可视化。它可以支持多种地图服务和图层,包括天地图(Tianditu)服务。在本文中,我们将详细讲解如何在 Cesium 中设置天地图的图层。

1. 什么是天地图?

天地图(Tianditu)是中国提供的一个地理信息平台,提供了多种地图服务,包括影像地图、矢量地图、地形图等。天地图为开发者提供了通过 API 接入的功能,能够在应用程序中显示中国境内的地图数据。

在 Cesium 中,我们可以通过天地图的在线服务来加载这些地图图层,提升用户的空间数据展示效果。

2. Cesium 中加载图层的基础概念

在 Cesium 中,图层是通过 ImageryProvider 来加载的。ImageryProvider 是一个接口,负责从服务器获取和渲染图像数据。对于天地图图层,我们需要使用 UrlTemplateImageryProvider,它可以基于 URL 模板来动态加载图块。

3. 代码解析:设置天地图图层

以下代码展示了如何在 Cesium 中设置天地图的图层:


let tdtKey = "42db15b4ef78cc8436426030062e08bb";  // 天地图的 API 密钥
// 图层类型
let tdtType = "ter_w";  // 这里是地形渲染图层,天地图还提供了影像图层(img_w)和矢量图层(vec_w)

// 定义天地图的 URL 模板
let url = `https://t{s}.tianditu.gov.cn/DataServer?T=${tdtType}&x={x}&y={y}&l={z}&tk=${tdtKey}`;

// 创建 Cesium 的 UrlTemplateImageryProvider 实例
const layerProvider = new Cesium.UrlTemplateImageryProvider({
  url: url,  // 传入 URL 模板
  subdomains: ["0", "1", "2", "3", "4", "5", "6", "7"],  // 为了优化请求,使用多级域名
  tilingScheme: new Cesium.WebMercatorTilingScheme(),  // 使用 Web Mercator 投影方案
  maximumLevel: 18  // 设置最大缩放级别
});

// 将图层添加到 Cesium 的视图器中
viewer.imageryLayers.addImageryProvider(layerProvider);


3.1 API 密钥

javascript
let tdtKey = "42db15b4ef78cc8436426030062e08bb";

天地图提供的每个 API 调用都需要一个有效的 API 密钥 tdtKey,这是用来鉴权和追踪 API 使用量的。在实际开发中,开发者需要向天地图申请 API 密钥。

3.2 图层类型

javascript
let tdtType = "ter_w";  // 地形图层

天地图提供了几种不同类型的图层,常见的包括:

  • img_w: 影像图层
  • vec_w: 矢量图层
  • ter_w: 地形图层

不同的图层类型用于显示不同的数据。例如,ter_w 显示的是三维地形图层,适用于地形展示。

3.3 URL 模板

javascript
let url = `https://t{s}.tianditu.gov.cn/DataServer?T=${tdtType}&x={x}&y={y}&l={z}&tk=${tdtKey}`;

天地图提供了基于 URL 模板的图层服务。URL 模板中的 {x}, {y}, {z} 是动态替换的占位符,代表图层的瓦片坐标系:

  • {x}: 水平坐标
  • {y}: 垂直坐标
  • {z}: 缩放级别

通过这些占位符,Cesium 会根据视图的变化动态加载不同的瓦片数据。

为了实现多级域名优化请求,{s} 表示一个子域名,它会在请求中随机选择。例如,t0.tianditu.gov.cn, t1.tianditu.gov.cn 等,以提高加载效率。

3.4 UrlTemplateImageryProvider


const layerProvider = new Cesium.UrlTemplateImageryProvider({
  url: url,  // 传入 URL 模板
  subdomains: ["0", "1", "2", "3", "4", "5", "6", "7"],  // 使用多级域名
  tilingScheme: new Cesium.WebMercatorTilingScheme(),  // Web Mercator 投影
  maximumLevel: 18  // 最大缩放级别
});

UrlTemplateImageryProvider 是 Cesium 中加载图层的主要方式,它根据传入的 URL 模板来加载图块。在这里,我们设置了以下几个参数:

  • url: 用于图层的 URL 模板。
  • subdomains: 用于请求优化的多个子域名。
  • tilingScheme: 图层的切片方案,这里使用的是 WebMercatorTilingScheme,这是地球地图常用的投影方案。
  • maximumLevel: 设置图层的最大缩放级别,18 级表示高精度的地图图层。

3.5 添加图层到视图器

javascript
viewer.imageryLayers.addImageryProvider(layerProvider);

最后,我们将创建的图层添加到 Cesium 视图器的图层集合中。imageryLayers.addImageryProvider 会将图层加载到 Cesium 的场景中,使其可以渲染和显示。

4. 如何选择不同的图层类型?

天地图提供了多种不同类型的地图图层。根据需求,开发者可以选择不同的图层类型:

  • 影像图层 (img_w): 用于显示卫星影像,适合需要精确地形图像的场景。
  • 矢量图层 (vec_w): 用于显示地图的矢量数据,如道路、行政区划等,适合展示高精度的地图元素。
  • 地形图层 (ter_w): 用于显示地形数据,如三维地形,适合需要展示地面起伏的场景。

根据不同的使用需求,开发者可以在代码中灵活地切换这些图层类型。

5. 配置和优化

5.1 缩放级别

图层的最大缩放级别 maximumLevel 控制着图层的显示精度。Cesium 支持高达 23 级的缩放,但是并非每个图层都支持这么高的精度。一般来说,天地图提供的图层在 18 级左右已经足够详细。

5.2 多级域名优化

为了提高图层加载的效率,天地图支持多级域名。通过配置 subdomains 数组,Cesium 可以在多个子域之间分配请求,避免同一个域名的负载过大,从而提高性能。

6. 总结

通过上述代码示例,我们展示了如何在 Cesium 中加载和使用天地图的图层。具体来说:

  1. API 密钥:用于认证和调用天地图服务。
  2. 图层类型:选择合适的图层(影像、矢量、地形)。
  3. URL 模板:动态加载图块数据,支持 Web Mercator 坐标系。
  4. 图层配置:通过 UrlTemplateImageryProvider 配置图层的显示方式。
  5. 优化:通过多级域名和缩放级别设置优化性能。

在实际应用中,开发者可以根据自己的需求调整图层类型、缩放级别和其它配置,从而实现更好的地图展示效果。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注