cesium(三)各类在线地图资源比对及使用教程

1 cesium内置资源比较

1.1 Imagery(影像)

通过调研网上数据,如下图所示,(有些可能不准确),排除了部分不符合需求的选项
单独测试了4个地图,通过对比,发现Bing Maps Aerial的清晰度最高
在这里插入图片描述

1.1.1 Bing Maps Aerial

在这里插入图片描述
在这里插入图片描述

1.1.2 Natural Earth II with Shaded Relief, Water, and Drainages

10万米高度下的新疆乌鲁木齐
在这里插入图片描述

1.1.3 Blue Marble Next Generation July, 2004

10万米高度下的新疆乌鲁木齐
在这里插入图片描述

1.1. 4 Sentinel-2

在这里插入图片描述
在这里插入图片描述

1.2 Terrain(地形)

在这里插入图片描述

1.2.1 Cesium World Terrain

在这里插入图片描述

1.3 3DTiles

通过网上调研,调研结果如下(可能一些不太准确),排除了一些选项,单独测试了两个地图,两个地图的表现都算良好,可以根据需求进一步选择。
在这里插入图片描述
根据比对结果,下面列举了这两个图形的使用情况

1.3.1 Cesium OSM Buildings

一个来自OpenStreetMap的3D建筑物图层,覆盖整个地球。它包含超过35亿栋建筑物,每个特征数据如名称、地址、建筑物是商业还是住宅等。这些建筑物使用Cesium World Terrain数据来推导出基海拔。
加载慢
在这里插入图片描述

1.3.2 Google Photorealistic 3D Tiles

加载快
在这里插入图片描述

2 cesium内置资源使用教程

登录cesium js 官网注册账号,注册完成后,点击OPEN ION在这里插入图片描述
点击Asset Depot(资产仓库),里面有所有的cesium内置的在线资源
在这里插入图片描述
当你想使用某个资源时,点击资源右侧的“+”号,将其添加进入自己的资源仓库中
在这里插入图片描述
点击后,“+”变为了“-”,这时可以去自己的资产仓库中找资源了
资源右侧有对应的代码示例,可以直接将其复制进入自己的代码中使用
在这里插入图片描述
示例代码

<template>
  <!-- Cesium视图容器 -->
  <div id="cesiumContainer" ref="cesiumContainer">
  </div>
</template>

<script setup>
import * as Cesium from 'cesium'; // 导入Cesium
import "./Widgets/widgets.css";   // 导入Cesium的样式
import {
    
     onMounted, ref } from 'vue'; // 导入声明周期"挂载"和ref

//设置cesium token
Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIyMjA2YWQ1Zi1mMWE1LTQzODAtOTI5MS05OGI1ZjYwODA4OTMiLCJpZCI6MjY4MDQ1LCJpYXQiOjE3MzY0NzYxMDl9.9qoWJ0BMQKg9R9kfvpzsvFgSKcxNOTO-uMFSksc0ZE8';

// 设置Cesium的静态资源路径
window.CESIUM_BASE_URL = "/";
// 创建一个对DOM元素的引用
const cesiumContainer = ref(null);

// 组件挂载后执行的代码
onMounted(async () => {
    
    
  // 初始化viewer,并将其绑定到ref="cesiumContainer"的div中
  const viewer = new Cesium.Viewer(cesiumContainer.value, {
    
    });
  const layer = viewer.imageryLayers.addImageryProvider(
    await Cesium.IonImageryProvider.fromAssetId(2),
  );
});
</script>

<style>
* {
    
    
  margin: 0;
  padding: 0;
}

#cesiumContainer {
      
      
  width: 100vw;
  /* 使用视口宽度 */
  height: 100vh;
  /* 使用视口高度 */
}
</style>

运行效果
在这里插入图片描述

其它3D资源和terrain资源使用方式一样

3 在线加载外置地图资源

3.1 天地图

3.1.1 使用教程

天地图官网
①注册账号并登录
在这里插入图片描述
②点击导航栏的开发资源
在这里插入图片描述
③进入右上角的控制台
在这里插入图片描述
④创建新应用,每个应用对应一个key,后面代码中会用到
在这里插入图片描述
⑤应用:回到第③步的页面,随便点击一个地图API
在这里插入图片描述
⑥选择想要使用的资源(其实能够发现,资源地址只有中间那块不同,其它是不变的)
在这里插入图片描述
⑦应用举例:我是以img_w和cia_w为例的,其它应用类似

const tdtKey = 天地图token;//token获取方法参考上述教程
// 加载天地图影像底图
const tdtBasicLayer = new Cesium.ImageryLayer(new Cesium.WebMapTileServiceImageryProvider({
    
    
  url: `http://t0.tianditu.com/img_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=img&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=${tdtKey}`,
  layer: "tdtBasicLayer",
  style: "default",
  format: "image/jpeg",
  tileMatrixSetID: "GoogleMapsCompatible",
}));

// 加载天地图影像地理标签
const tdtLabelLayer = new Cesium.ImageryLayer(new Cesium.WebMapTileServiceImageryProvider({
    
    
  url: `http://t0.tianditu.com/cia_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cia&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=${天地图token}`,
  layer: "tdtAnnoLayer",
  style: "default",
  format: "image/jpeg",
  tileMatrixSetID: "GoogleMapsCompatible",
}));

viewer.imageryLayers.add(tdtBasicLayer);
viewer.imageryLayers.add(tdtLabelLayer);

⑧运行结果
在这里插入图片描述

3.1.2 运行效果

①影像图
在这里插入图片描述
②矢量图
在这里插入图片描述
③地形晕染图
在这里插入图片描述
④ 3D图
天地图三维地名服务和地形服务需要利用 cesium 开源三维地球API与天地图扩展插件共同使用,目前支持cesuim1.108。
需要下载插件,并且将cesium换成更低版本的,因此先不考虑。

3.2 高德地图

3.2.1 使用教程

高德提供了自己的API,不需要与cesium集成使用
高德地图更专注于导航服务、位置搜索、交通信息等。
cesium更适合创建交互式的三维地球和地图可视化,两者应用场景不同。
通过影像图的比对,高德比不过cesium。
使用高德,有两种方式

3.2.1.1 下载高德插件使用

①下载插件

npm install @amap/amap-jsapi-loader

②组件引入插件

import AMapLoader from '@amap/amap-jsapi-loader';

③创建应用获得key
登录高德官网
应用管理–>我的应用–>创建新应用
在这里插入图片描述
应用名称随便取,应用类型也随便选。
在这里插入图片描述
点击添加key
在这里插入图片描述
我一般都选web端
在这里插入图片描述
提交后多了生成了key和安全密钥
在这里插入图片描述
④使用

<template>
  <!-- Cesium视图容器 -->
  <div id="cesiumContainer" ref="cesiumContainer">
  </div>
</template>

<script setup>
import "./Widgets/widgets.css";   // 从src中导入Cesium的样式
import {
    
     onMounted, ref } from 'vue'; // 导入声明周期"挂载"和ref
import AMapLoader from '@amap/amap-jsapi-loader';

// 设置Cesium的静态资源路径
window.CESIUM_BASE_URL = "/";

// 创建一个对DOM元素的引用
const cesiumContainer = ref(null);
const amapKey = '高德官网你自己的key';//去官网获取key

onMounted(() => {
    
    
  // 加载高德地图 API
  AMapLoader.load({
    
    
    key: amapKey,
    version: "2.0",
    plugins: [], // 如果需要加载额外的插件,请在此处指定
  }).then((AMap) => {
    
    
    // 初始化地图实例
    const map = new AMap.Map(cesiumContainer.value, {
    
    
      viewMode: "2D", // 使用2D模式
      zoom: 11, // 地图级别
      center: [116.397428, 39.90923], // 地图中心点
    });

    // 添加默认矢量图层
    const normalLayer = new AMap.TileLayer();
    map.add(normalLayer);

    // 添加卫星图层
    const satelliteLayer = new AMap.TileLayer.Satellite();
    map.add(satelliteLayer);
  }).catch(e => {
    
    
    console.error(e);
  });
});

</script>

<style>
* {
    
    
  margin: 0;
  padding: 0;
}

#cesiumContainer {
      
      
  width: 100vw;
  /* 使用视口宽度 */
  height: 100vh;
  /* 使用视口高度 */
}
</style>
3.2.2.2 直接使用高德瓦片数据
/** 加载高德地图 */
// 加载高德影像底图
const gdBasicLayer = new Cesium.ImageryLayer(new Cesium.UrlTemplateImageryProvider({
    
    
  url: 'https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}',
  style: 'default',
  format: 'image/png',
  tileMatrixSetID: 'GoogleMapsCompatible',
}));

// 加载高德地图影像地理标签
const gdLabelLayer = new Cesium.ImageryLayer(new Cesium.UrlTemplateImageryProvider({
    
    
  url: 'http://webst02.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8',
  style: 'default',
  format: 'image/jpeg',
  tileMatrixSetID: 'GoogleMapsCompatible',
}));

viewer.imageryLayers.add(gdBasicLayer);
viewer.imageryLayers.add(gdLabelLayer);

3.2.2 运行效果

①影像图
在这里插入图片描述
②矢量图

    // 添加默认矢量图层
    const normalLayer = new AMap.TileLayer();
    map.add(normalLayer);

在这里插入图片描述
③交通图层

    const trafficLayer = new AMap.TileLayer.Traffic({
    
    
      autoRefresh: true, // 是否自动刷新
      interval: 180 // 刷新间隔,单位秒
    });
    map.add(trafficLayer);

在这里插入图片描述
④路网图层

    const roadNetLayer = new AMap.TileLayer.RoadNet();
    map.add(roadNetLayer);

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lhllhllhl_/article/details/145733894
今日推荐