最近项目有三维地图展示需求,甲方提供了三维数据,要求使用Cesium集成。

利用一天时间集中突击了一下做个笔记,后面再用到的话也好自查。

声明一下,作者也是最近刚接触cesium,目前的探索也只是作为初学者一个导引吧,避免少走弯路。不喜勿喷,谢谢。

资源

官网地址:https://cesium.com/platform/
文档示例很多,API也很全,就是全部英文看起来费劲,建议深度学习可以看看。

GitHub地址:https://github.com/CesiumGS
有几个JavaScript分类的demo可以看看,因为做vue集成,作者参考了一下:
cesium-webpack-example 这个demo,其它的建议深度学习可以看一下。

Cesium ion

在开始之前先引入个Cesium ion,这是官方提供的一个云服务,用来上传自己的图形文件,也提供了几个资源供大家使用,作者自己写的demo用的就是官方提供的。

页面长这个样子:

有几个页签:

stories

个人理解是一个地图制作工具,可以根据自己的需求并且加入自己上传过的资源,制作完成以后可以生成访问链接,具体操作步骤官方有教程: stories生成步骤

我这里简单做了一个,保存以后可以看到生成了id和访问地址。不过这里有个问题,在自己项目中本地打开页面会跨域错误,还需要自行配置代理。

My Assets

这里是用户上传资源的地方,可以上传3dtiles和其它类型文件,同时这里上传的资源可以在前面的stories里面使用的。

下图我并没有上传我的资源,这些事cesium官方提供的几个地图,做demo的时候会用到其中的资源。

Access Token

作为认证使用,以便自己上传的资源不被他人盗用,很关键,在使用云平台资源的时候代码中会用到。

CesiumJS

介绍完云平台,下面该进入主题了,CesiumJS的集成。

首先npm安装插件

npm install cesium

安装后的package.json文件(目前最新版本1.91.0)

 "dependencies": {"cesium": "^1.91.0",}

在页面中引入组件

import * as Cesium from "cesium";
import "cesium/Build/Cesium/Widgets/widgets.css";

这里我采用全部引入的方式,如果为了避免加载不必要插件可以按需引入,如下:

import { Ion, Viewer, createWorldTerrain, createOsmBuildings, Cartesian3, Math } from "cesium";
import "cesium/Build/Cesium/Widgets/widgets.css";

两种方式在使用上稍有区别,下面使用第一种方式继续编写代码。

第一步,要使地图能够显示,首先在页面中添加一个显示的区域,如下:

<template><div class="map-index"><div id="cesiumContainer" class="cesiumContainer"></div></div>
</template>

其中 div 的 id 非常关键,下面实例化的时候要用到,这里记得给div设置宽高,以便地图显示。

第二步,进行地图的初始化工作。上面讲了因为要用到云平台的资源,所以要先设置token,然后再初始化地图。

 initCesium() {//设置云平台 AccessToken ,使用本地3dtiles文件可以不设置Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI5MjcxYzM2Yy1mYjQ4LTQ5ZTYtODg3Ny1hN2JjOGIxMjVmYTIiLCJpZCI6NjM1MTYsImlhdCI6MTYyODIxNjcyMX0'//cesiumContainer 即为上一步显示区域设置的 idvar viewer = new Cesium.Viewer("cesiumContainer", {baseLayerPicker: false,   //控制图层选择器是否显示geocoder: false,          //控制位置选择器是否显示});

第三步,初始化3dtiles文件,使用viewer显示加载:

   //创建实例var tileset = new Cesium.Cesium3DTileset({ url: Cesium.IonResource.fromAssetId(354307)});// readyPromise,资源加载完成后会 resolved ,此时可以使用viewer加载显示tileset.readyPromise.then(function (tileset) {viewer.scene.primitives.add(tileset);viewer.zoomTo(tileset,new Cesium.HeadingPitchRange(0.0,-0.5,tileset.boundingSphere.radius * 2.0));}).otherwise(function (error) {console.log(error);});

这里 Cesium.IonResource.fromAssetId(354307) 里的数字id就是前面提到云平台提供的一个默认的3dtiles数据的id

最终代码如下

<template><div class="map-index"><div id="cesiumContainer" class="cesiumContainer"></div></div>
</template><script>
import * as Cesium from "cesium";
import "cesium/Build/Cesium/Widgets/widgets.css";
export default {data() {return {};},mounted() {this.initCesium();},methods: {initCesium() {Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI5MjcxYzM2Yy1mYjQ4LTQ5ZTYtODg3Ny1hN2JjOGIxMjVmYTIiLCJpZCI6NjM1MTYsImlhdCI6MTYyODIxNjcyMX0.jWrOsZ95ATIT6rhY2hkx2_9yvZ8FDvpLOpfsuaDyc9Q'var viewer = new Cesium.Viewer("cesiumContainer", {baseLayerPicker: false,geocoder: false,});//初始化资源var tileset = new Cesium.Cesium3DTileset({ url: Cesium.IonResource.fromAssetId(354307)});//加载资源tileset.readyPromise.then(function (tileset) {viewer.scene.primitives.add(tileset);viewer.zoomTo(tileset,new Cesium.HeadingPitchRange(0.0,-0.5,tileset.boundingSphere.radius * 2.0));}).otherwise(function (error) {console.log(error);});},},
};
</script><style lang="scss" scoped>
.map-index {.cesiumContainer {height: 1080px;width: 1920px;}
}
</style>

运行一下,不出意外,报错了。


提示找不到 CESIUM_BASE_URL 配置,针对这项配置官方解释如下:

Configuring CESIUM_BASE_URLCesiumJS requires a few static files to be hosted on your server, like web workers and SVG icons.

说的简单就是需要找到网站静态资源,但是有什么用暂时不清楚,具体的配置方式也有说明:

The window.CESIUM_BASE_URL global variable must be set before CesiumJS is imported. It must point to the URL where those four directories are served.For example, if the image at Assets/Images/cesium_credit.png is served with a static/Cesium/ prefix under http://localhost:8080/static/Cesium/Assets/Images/cesium_credit.png, then you would set the base URL as follows:window.CESIUM_BASE_URL = '/static/Cesium/';

那这就简单了,由于我们服务都在根目录嘛,所以增加了一段代价如下:

window.CESIUM_BASE_URL = "/";

而上面也说明了,这段配置要在 import cesium 之前,所以最终代码:

<template><div class="map-index"><div id="cesiumContainer" class="cesiumContainer"></div></div>
</template><script>
window.CESIUM_BASE_URL = "/";import * as Cesium from "cesium";
import "cesium/Build/Cesium/Widgets/widgets.css";
export default {data() {return {};},mounted() {this.initCesium();},methods: {initCesium() {Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI5MjcxYzM2Yy1mYjQ4LTQ5ZTYtODg3Ny1hN2JjOGIxMjVmYTIiLCJpZCI6NjM1MTYsImlhdCI6MTYyODIxNjcyMX0.jWrOsZ95ATIT6rhY2hkx2_9yvZ8FDvpLOpfsuaDyc9Q'var viewer = new Cesium.Viewer("cesiumContainer", {baseLayerPicker: false,geocoder: false,});//初始化资源var tileset = new Cesium.Cesium3DTileset({ url: Cesium.IonResource.fromAssetId(354307)});//加载资源tileset.readyPromise.then(function (tileset) {viewer.scene.primitives.add(tileset);viewer.zoomTo(tileset,new Cesium.HeadingPitchRange(0.0,-0.5,tileset.boundingSphere.radius * 2.0));}).otherwise(function (error) {console.log(error);});},},
};
</script><style lang="scss" scoped>
.map-index {.cesiumContainer {height: 1080px;width: 1920px;}
}
</style>

那么再次运行项目结果:

地图加载暂时完成,稍后会补充视角控制和扎点的方法。

Vue 第三方集成之 Cesium相关推荐

  1. Vue实现集成使用第三方Animate.css动画库详细教程(解决鼠标移入移出闪烁问题)

    vue通过第三方集成Animate.css简单快速的实现动画,通过类名引用,可以轻松实现Animate的所有动画,Animate.css是一款强大的预设css3动画库,Animate.css内置了很多 ...

  2. tinymce--一款非常好用的富文本编辑器 VUE如何集成tinymce编辑器

    博客(coder的自我修养)原文链接:tinymce--一款非常好用的富文本编辑器 vue集成tinymce编辑器 - coder的自我修养 TinyMC编辑器简介 TinyMCE是一款易用.且功能强 ...

  3. RxJS实践,Vue如何集成RxJS

    一. 本文章不会对RxJS的原理进行讲解,仅讨论如何在vue中对RxJS进行集成 1.30天精通 RxJS 这是一个台湾开发者编写的关于RxJS的教程,教程涉及到原理解析.简易实现,以及常用opera ...

  4. 【转】D365 FO第三方集成(四)---客户端调用

    客户端调用json-based服务非常简单,就是标准的http调用. http调用首先要解决URL的组成,D365 FO json-based调用的url组成如下: https://usnconebo ...

  5. vue中集成的ui组件库_Vue组件可使用Vault Flow通过Braintree集成PayPal付款

    vue中集成的ui组件库 Vue Braintree PayPal按钮 (Vue Braintree PayPal button) Vue component to integrate PayPal ...

  6. 【ZRender 渲染引擎 - 贰】 | Vue 框架集成与绘制其他图元

    theme: cyanosis 持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第 8 天,点击查看活动详情 1. Vue 中使用 ZRender 上一篇中,我们通过最原始的方式 ...

  7. UNI-APP/VUE 项目集成 微信SDK /微信开放标签 教程和避坑指南(下)——微信开放标签篇

    UNI-APP/VUE 项目集成 微信开放标签 教程和避坑指南 文章同步发布于

  8. vue项目集成乾坤(qiankun)微前端

    vue项目集成qiankun微前端 集成乾坤微前端主应用: 1.安装 2.main.js中进行配置 3.配置路由 4.将主应用路由模式设置为history模式 子应用中配置(子应用无需安装乾坤) 1. ...

  9. iOS第三方集成之jpush极光推送

    iOS第三方集成之jpush极光推送 现在很多app都带推送功能,极光推送是很受大家欢迎的第三方推送,本文将为iOS初学者和初次设计开发推送的攻城狮们提供以下自己的使用心得. 大家可以边参考官方文档, ...

最新文章

  1. 版本变迁_一本书遍览古今中外红楼梦版本变迁
  2. Python快速入门(1)
  3. mysql 5.1编译参数和编译方法
  4. cnn验证码识别代码_中文项目:快速识别验证码,CNN也能为爬虫保驾护航
  5. linux 和服务通讯,Android 的Activity和Service之间的通信
  6. gateway配置mysql_使用Gateway配置路由以及动态路由
  7. 1.高性能MySQL --- MySQL 架构
  8. Linux下命令行安装WebLogic 10.3.6
  9. 项目采集自动刷新 php,PHP168 CMS自动采集-PHP168 CMS自动更新-齐博CMS站群管理系统...
  10. 调音台docker教程_Docker菜鸟教程 - Docker入门教程 - Docker基础教程 - 动力节点
  11. win10 红警启动必要文件
  12. 北京城建:建筑业龙头的数字化修炼之路
  13. Apache Log4j2 查找功能 JNDI 注入 (CVE-2021-44228)
  14. 0906期特别策划——“架构师大阅兵”
  15. 关于线程中断thread interrupt
  16. 5.询问姓名及电话号码
  17. vmware P2V问题汇总
  18. Java中的Object类 是什么?JSONObject 又是什么?
  19. 被窝网告诉你:商标转让与许可哪个更合算
  20. iPhone 计算机 桌面,仿苹果电脑桌面软件 仿苹果桌面软件

热门文章

  1. Sleep tight:(晚上) 睡个好觉!
  2. 屏幕截取招招看!教你十种屏幕抓取方法
  3. C语言-在scanf表示什么,在c语言中scanf代表什么意思?
  4. 本网吧单机游戏存档路径!!!
  5. 如何将图片转换成pdf实用方法
  6. python办公自动化系列之金蝶K3自动登录(二)
  7. python输入两个数,分别代表年份和月份,计算这个月的天数
  8. 全国英语全国计算机考试,同时报考了全国英语和全国计算机等级考试,是同一..._公共英语考试_帮考网...
  9. 开启Mac os系统原生的NTFS读写功能
  10. 部署 WVP+ZLMediaKit 实现大华摄像头接入