Cesium笔记(1):在项目中使用Cesium—Vue整合Cesium
Author:zhoulujun Date:
项目中引入Cesium,普通项目,按照官方文档照做就可
https://cesium.com/docs/tutorials/getting-started/
常规引入
很多人说需要require.js,我是没有使用,
/Cesium-1.40/Build/CesiumUnminified/Cesium.js
/Cesium-1.40/Build/CesiumUnminified/Widgets/widgets.css
当然,也可以手工导入 improt 导入,这个不需要修改webpack 配置
整合入webpack
首先npm i cesium,如果按照不成功(再次fuck GFW),直接下载cesium包(https://cesiumjs.org/downloads/),丢入node_modules/cesium,直接引入也可。
配置 amd参数
在output 里加入sourcePrefix: ' ' 让webpack 正确处理多行字符串
module中在rules后添加 unknownContextCritical: false
项目根目录新建文件夹ThirdParty,放入draco_decoder.wasm文件,在加载gltf模型文件需要用到
如下配置,合并到wepback config,即可
// cesium--配置 const cesiumSource = '../node_modules/cesium/Source' const cesiumWorkers = '../Build/Cesium/Workers' const path = require('path') // 合并入现有webpack配置 module.exports = { output: { // cesium--配置------------------------------------ sourcePrefix: ' ' }, // cesium--配置---------------------------------------- amd: { toUrlUndefined: true }, resolve: { extensions: ['.js', '.vue', '.json'], alias: { // cesium--配置 'cesium': path.resolve(__dirname, cesiumSource) } }, module: { // cesium--配置------------------------------------- // unknownContextRegExp: /^.\/.*$/ unknownContextCritical: false, }, plugins: [ new webpack.DefinePlugin({ // cesium--配置 为实际 CESIUM_BASE_URL 加载目录地址------------------------------------------- 'CESIUM_BASE_URL': JSON.stringify('') }), // cesium--配置--------------------------------------------- new CopyWebpackPlugin([{ from: path.join(cesiumSource, cesiumWorkers), to: 'Workers' }]), //flag new CopyWebpackPlugin([{ from: path.join(cesiumSource, 'Assets'), to: 'Assets' }]), new CopyWebpackPlugin([{ from: path.join(cesiumSource, 'Widgets'), to: 'Widgets' }]), new CopyWebpackPlugin([{ from: path.join(cesiumSource, 'ThirdParty/Workers'), to: 'ThirdParty/Workers' }]), new CopyWebpackPlugin([{ from: 'ThirdParty', to: 'ThirdParty' }]), ] }
合并到原有你的项目配置,我是这么操作的木有发现问题
Cesium初始化配置
let viewer = new this.Cesium.Viewer('cesiumContainer', { imageryProvider: new Cesium.ArcGisMapServerImageryProvider({ url: 'http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer' }), baseLayerPicker: false, // 图层选择器 animation: false, // 左下角仪表 fullscreenButton: false, // 全屏按钮 geocoder: false, // 右上角查询搜索 infoBox: false, // 信息框 homeButton: false,// home按钮 sceneModePicker: true, // 3d 2d选择器 selectionIndicator: false, timeline: false, // 时间轴 navigationHelpButton: false, // 右上角帮助按钮 contextOptions: {// 截图需要的 webgl: { alpha: true, depth: true, stencil: true, antialias: true, premultipliedAlpha: true, // 通过canvas.toDataURL()实现截图需要将该项设置为true preserveDrawingBuffer: true, failIfMajorPerformanceCaveat: true } } }) // 添加另外一个图层 var layers = viewer.scene.imageryLayers var blackMarble = layers.addImageryProvider(new Cesium.TileMapServiceImageryProvider({ url: '//cesiumjs.org/tilesets/imagery/blackmarble', maximumLevel: 8, credit: 'Black Marble imagery courtesy NASA Earth Observatory' })) // 设置图层的透明度 blackMarble.alpha = 0.5 // 设置图层的亮度 blackMarble.brightness = 2.0 // 添加一个图层,在特定位置绘制一个图片 layers.addImageryProvider(new Cesium.SingleTileImageryProvider({ url: '../images/Cesium_Logo_overlay.png', rectangle: Cesium.Rectangle.fromDegrees(-75.0, 28.0, -67.0, 29.75) }))
这个配置,参考:https://www.cnblogs.com/reround/p/12160503.html
vue使用Cesium注意事项
无论是maptalks还是Cesium,请不要把跟地图更新相关数据放到Vue data中,不然,出现的问题,会搞晕自己的
cesium 的 viewer 不能放在vue的data对象中
最开始的时候直接把viewer放在data中使用,发现建筑数据过万直接卡崩溃。
原因:viewer与vue中的data或者computed进行了绑定,导致vue对viewer进行了数据劫持,劫持了太多数据。
解决:将viewer放到全局对象当中
之前做maptalks地图的时候,maptalks.ui.UIMarker,把创建的marker 放到一个 vue data 定义的数组中MarkersList(Vue View 中,通过数组做一些页面展示逻辑),清空MarkersList的时候,会发现,地图上的˛UIMarker清除不干净。会重复叠加。
如果是angularJS,不会产生如上问题。
可参看文章:
基于Webpack的Cesium+Vue应用 https://blog.csdn.net/m0_37972557/article/details/79768408?utm_source=copy
vue集成Cesium(直接引入方式) https://www.jianshu.com/p/a4f371c56ba1
vue2.0项目集成Cesium的实现方法 https://www.jb51.net/article/166568.htm
Vue3.0+Cesium+Tomcat服务下倾斜摄影数据加载详细过程 https://blog.csdn.net/wo_buzhidao/article/details/100124205
Vue-cli 3.0 + cesium 构建 https://www.jianshu.com/p/0815c76d949f
Cesium+Vue过程中遇到的问题(持续更新) https://blog.csdn.net/li11122212/article/details/93167685
转载本站文章《Cesium笔记(1):在项目中使用Cesium—Vue整合Cesium》,
请注明出处:https://www.zhoulujun.cn/html/GIS/cesium/8321.html