Cesium代码块段学习

Web框架

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title>cesium</title><script type="text/javascript" src="../Build/Cesium/Cesium.js"></script>  <script type="text/javascript" src="../Source/My/ExtendGlobe.js"></script> <style>@import url(../Build/Cesium/Widgets/widgets.css);</style></head><body><div id="cesiumContainer"></div> <script>[后续代码按需编写]</script><script src="../demon/10-1.js"> </script><script src="../demon/10-3.js"> </script><script src="../demon/10-4.js"> </script></body>
</html>

Cesium基础操作

连接Cesium账号的token
Cesium.Ion.defaultAccessToken = 'Your Token';
Web界面的各个控件
//用于构建应用程序的基本小部件。
var viewer = new Cesium.Viewer('cesiumContainer', {//需要进行可视化的数据源的集合animation: false, //是否显示动画控件//shouldAnimate: true,homeButton: false, //是否显示Home按钮fullscreenButton: false, //是否显示全屏按钮baseLayerPicker: false, //是否显示图层选择控件geocoder: false, //是否显示地名查找控件timeline: false, //是否显示时间线控件sceneModePicker: true, //是否显示投影方式控件navigationHelpButton: false, //是否显示帮助信息控件infoBox: false, //是否显示点击要素之后显示的信息requestRenderMode: true, //启用请求渲染模式scene3DOnly: false, //每个几何实例将只能以3D渲染以节省GPU内存sceneMode: 3, //初始场景模式 1 2D模式 2 2D循环模式 3 3D模式  Cesium.SceneModefullscreenElement: document.body, //全屏时渲染的HTML元素 暂时没发现用处});

获取地球场景及地形

     //获取场景var scene = viewer.scene;//在场景中渲染的地球仪var globe = scene.globe;scene.screenSpaceCameraController.enableCollisionDetection = false;//第一个根据鼠标输入到画布修改摄像机位置和方向;第二个使相机进入地下。//screenSpaceCameraController获取用于摄像机输入处理的控制器;enableCollisionDetection启用或禁用相机对地形的碰撞检测。(默认为true)var extendGlobe = new Cesium.ExtendGlobe(viewer);extendGlobe.terrainTransparent = true; // or false
全球影像中文注记服务
 viewer.imageryLayers.addImageryProvider(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.jpg",layer: "tdtAnnoLayer",style: "default",format: "image/jpeg",tileMatrixSetID: "GoogleMapsCompatible",maximumLevel: 13,minimumLevel: 1,show: false}));
飞行定位(运行后最初位置)
 viewer.scene.camera.flyTo({destination: new Cesium.Cartesian3.fromDegrees(107.767504857,28.8597158189,10000),orientation: {heading : Cesium.Math.toRadians(20.0), // 方向pitch : Cesium.Math.toRadians(-90.0),// 倾斜角度roll : 0},duration:1});
设置相机位置以及航向角
viewer.scene.camera.setView({                //设置相机的位置,方向和变换。destination: new Cesium.Cartesian3(       //笛卡尔坐标类型。摄像机在WGS84(世界)坐标中的最终位置或从上向下视图中可见的矩形。3827058.651471591,  -256575.7981065622,5078738.238484612),                                           //116.3972282409668, 39.90960456049752orientation: new Cesium.HeadingPitchRoll(       // //目的类型(航向角【从局部北向旋转,其中正角向东增加】、俯仰角【正俯仰角在平面上方。负俯仰角在平面下方】、距中心距离【距本地框架中心的距离】)1.9765540737339418,-0.17352018581162754,0.0030147639151465455),endTransform: Cesium.Matrix4.IDENTITY,        //表示摄像机参考帧的变换矩阵
});
开启地下可见以及地表透明
var viewer = new Cesium.Viewer('cesiumContainer', {//开启或者关闭地下模式setCollisionDetection(enable) {this.viewer.scene.screenSpaceCameraController.enableCollisionDetection = enable},//设置透明度setAlpha(alpha) {this.viewer.scene.globe.translucency.frontFaceAlpha = alpha;},//创建世界地形terrainProvider : Cesium.createWorldTerrain()
});

模型

加载模型

加载gltf模型

entities方式加载gltf模型(01)
 // 添加模型var position=Cesium.Cartesian3.fromDegrees(107.767504857,28.8597158189, 0);addFengjiModel(position);function  addFengjiModel(position){var hpRoll = new Cesium.HeadingPitchRoll(Cesium.Math.toRadians(180), 0, 0);var orientation = Cesium.Transforms.headingPitchRollQuaternion(position, hpRoll);var color=Cesium.Color.WHITE ;// 添加模型var model = viewer.entities.add({//模型idid:'model',//模型位置position: position,//模型方向orientation: orientation,// 模型资源model: {//  模型路径uri: '../no1/try1/g3.gltf',//  模型最小刻度minimumPixelSize: 128,// 模型最大刻度maximumSize: 128,//   设置模型最大放大大小maximumScale : 200,//   模型是否可见show: true,//  模型轮廓颜色silhouetteColor:Cesium.Color.WHITE,//  模型颜色  ,这里可以设置颜色的变化color: color ,//   仅用于调试,显示魔仙绘制时的线框debugWireframe : false,//   仅用于调试。显示模型绘制时的边界球。debugShowBoundingVolume : false,scale:10,runAnimations:true                //是否运行模型中的动画效果},// 添加描述description: '风机模型'});// 视角切换到模型viewer.trackedEntity = model;}

点击模型会显示模型的注释(这里是风机模型)

entities方式加载gltf模型(02)
var position=Cesium.Cartesian3.fromDegrees(107.767504857,28.8597158189, 0);
var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);
var model = viewer.scene.primitives.add(Cesium.Model.fromGltf({url : '../no1/try1/g3.gltf',
}));
entities方式加载gltf模型(02)
var entity = viewer.entities.add({  position : Cesium.Cartesian3.fromDegrees(107.767504857,28.8597158189,100),  model : {  uri : '../no1/try1/g3.gltf'  }
});
viewer.trackedEntity = entity;

加载3DTile(json)模型(01)

   var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({url: '../data/3dtiles/tianjie/tileset.json', //数据地址maximumScreenSpaceError: 2,  //最大的屏幕空间误差maximumNumberOfLoadedTiles: 1000, //最大加载瓦片个数modelMatrix: m,//形状矩阵}));

加载3DTile(json)模型(02)

var palaceTileset = new Cesium.Cesium3DTileset({url: '../no1/try1/1/tileset.json',//控制切片视角显示的数量,可调整性能maximumScreenSpaceError: 2,//最大的屏幕空间误差maximumNumberOfLoadedTiles: 100000,//最大加载瓦片个数});viewer.scene.primitives.add(palaceTileset);//场景中添加该模型scene.globe.depthTestAgainstTerrain = true;viewer.zoomTo(palaceTileset);//相机飞至模型上空

加载3DTile(json)模型(03)

模型属性绑定

ViewModel属性设置

var originalColor = Cesium.Color.BLACK;
var originalNearDistance = 1000.0;
var originalFarDistance = 1000000.0;
var originalNearAlpha = 0.0;
var originalFarAlpha = 1.0;var color = originalColor;// The viewModel tracks the state of our mini application.
var viewModel = {enabled: true,nearDistance: originalNearDistance,farDistance: originalFarDistance,nearAlpha: originalNearAlpha,farAlpha: originalFarAlpha,
};Cesium.knockout.track(viewModel);              把对象关联到Cesium这里用的绑定可以参考观察者模式

ViewModel与地形模型绑定且实时更新

// Bind the viewModel to the DOM elements of the UI that call for it.(绑定地形模型,且实时更新)
var toolbar = document.getElementById("toolbar");
Cesium.knockout.applyBindings(viewModel, toolbar);          绑定MV
for (var name in viewModel) {if (viewModel.hasOwnProperty(name)) {         // Object 的原型方法,定义在viewModel对象之上。用来检测一个属性是否是对象的自有属性,是返回trueCesium.knockout.getObservable(viewModel, name).subscribe(update);  //knockout使Cesium球体监听html控件, 从而根据控件的值实时更新一些地图属性.}
}//图层切换
Sandcastle.addToolbarButton("Random color", function () {   //相机移动时,添加按钮更新图层颜色color = Cesium.Color.fromRandom({alpha: 1.0,});update();
});Sandcastle.addToolbarButton("Clear", function () {          //相机移动时,添加按钮清除模型信息,进行更新color = originalColor;viewModel.enabled = true;viewModel.nearDistance = originalNearDistance;viewModel.farDistance = originalFarDistance;viewModel.nearAlpha = originalNearAlpha;viewModel.farAlpha = originalFarAlpha;update();
});function update() {globe.undergroundColor = viewModel.enabled ? color : undefined;      //地下颜色为模型部分是,设置颜色var nearDistance = Number(viewModel.nearDistance);nearDistance = isNaN(nearDistance)? originalNearDistance: nearDistance;var farDistance = Number(viewModel.farDistance);farDistance = isNaN(farDistance)? originalFarDistance : farDistance;if (nearDistance > farDistance) {nearDistance = farDistance;}var nearAlpha = Number(viewModel.nearAlpha);nearAlpha = isNaN(nearAlpha) ? 0.0 : nearAlpha;var farAlpha = Number(viewModel.farAlpha);farAlpha = isNaN(farAlpha) ? 1.0 : farAlpha;globe.undergroundColorAlphaByDistance.near = nearDistance;globe.undergroundColorAlphaByDistance.far = farDistance;globe.undergroundColorAlphaByDistance.nearValue = nearAlpha;globe.undergroundColorAlphaByDistance.farValue = farAlpha;}
update();

模型变换

模型旋转

// 设置模型旋转90度entity.readyPromise.then(function(argument) {var position = Cesium.Cartesian3.fromDegrees(position);var mat = Cesium.Transforms.eastNorthUpToFixedFrame(position);var rotationX = Cesium.Matrix4.fromRotationTranslation(Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(90)));Cesium.Matrix4.multiply(mat, rotationX, mat);model.modelMatrix = mat;
})

模型矩阵变换

palaceTileset.readyPromise.then(function(argument) {var position = Cesium.Cartesian3.fromDegrees(longitude, latitude, height);var mat = Cesium.Transforms.eastNorthUpToFixedFrame(position);    //mat为局部坐标的z轴垂直于地表,局部坐标的y轴指向正北的4x4变换矩阵var rotationX = Cesium.Matrix4.fromRotationTranslation(Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(heading)));  //rotationX为旋转加平移的3x3变换矩阵,这里按照弧度转换Cesium.Matrix4.multiply(mat, rotationX, mat);     //生成局部坐标的变换最终矩阵tileset._root.transform = mat;viewer.camera.flyTo({destination: Cesium.Cartesian3.fromDegrees(longitude, latitude, height + 1000)});
});

添加JS文件

在网络框架最后添加

               </script><script src="../demon/10-1.js"> </script></body>
</html>

Cesium源码中的基础代码相关推荐

  1. html源码蔡,html基础代码详解

    大家好,现在大家已经了解了什么是SEO,怎么学习SEO,也知道什么是域名怎么使用域名了,那么蔡江就给大家分享一下学习SEO需要懂的基础的不能再基础的内容:HTML代码基础的学习了. 一.什么是HTML ...

  2. vue源码中优秀代码片段(一)

    一.前言 笔者在读Vue源码时, 手记一些源码中优美的代码片段,一起来学习吧 二.代码片段 1. makeMap 检测某值是否在字符串(逗号分隔的字符串)中存在, 运用了柯里化函数和缓存函数 源码鉴赏 ...

  3. Nacos源码中为什么使用了String.intern方法?

    前言 面试的时候经常被问到String的intern方法的调用及内存结构发生的变化.但在实际生产中真正用到过了吗,看到过别人如何使用了吗? 最近阅读Nacos的源码,还真看到代码中使用String类的 ...

  4. 初学者也能看懂的 Vue2 源码中那些实用的基础工具函数

    1. 前言 大家好,我是若川.最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12 想学源码,极力推荐之前我写的<学习源码整体架构系列>jQuery.underscore.l ...

  5. 初学者也能看懂的 Vue3 源码中那些实用的基础工具函数

    1. 前言 大家好,我是若川.最近组织了源码共读活动.每周读 200 行左右的源码.很多第一次读源码的小伙伴都感觉很有收获,感兴趣可以加我微信ruochuan12,拉你进群学习. 写相对很难的源码,耗 ...

  6. Jquery源码中的Javascript基础知识(三)

    这篇主要说一下在源码中jquery对象是怎样设计实现的,下面是相关代码的简化版本: 1 (function( window, undefined ) { 2 // code 定义变量 3 jQuery ...

  7. android单例模式代码,设计模式(一):Android 源码中的单例模式

    设计模式(一):Android 源码中的单例模式 2020-08-17 22:51 阅读数 57 <>什么是单例模式? 单例模式(Singleton) 是最常见也最简单的设计模式,它的目的 ...

  8. OpenCV源码中Haar训练及特征提取的代码说明

    //针对大小为winsize的图,计算所有HaarFeature的rect,存入features返回,即获取所有特征坐标 CvIntHaarFeatures* icvCreateIntHaarFeat ...

  9. 从 vue3 和 vite 源码中,我学到了一行代码统一规范团队包管理器的神器

    1. 前言 大家好,我是若川.最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.已进行四个月了,很多小伙伴表示收获颇丰. 想学源码 ...

最新文章

  1. python提取图片gps坐标_用python从.docx文件中提取GPS坐标
  2. TCP UDP HTTP 的关系和区别
  3. C#异步编程-------异步编程模型(APM)
  4. pgpool-II 高可用搭建
  5. 大数据之-Hadoop3.x_MapReduce_数据压缩---大数据之hadoop3.x工作笔记0138
  6. 关于sql语句between and的边界问题
  7. Delphi已经25岁了,我的公司每天都在使用Delphi开发跨平台的实时视频会议软件APP
  8. 深入浅出 NXLog (二)
  9. 思科CCNP认证和华为 HCIP认证路由交换技术的分类最全总结
  10. 服务器外置硬盘的分区格式,MacBook下移动硬盘分区配置几种格式解决方案
  11. [转]仙剑4破解方法详解(免激活刻盘法)--仙剑爱好者看看[图]
  12. python的下载与安装小牛学堂_Python学习_Day1
  13. mac 安装问题汇总
  14. 禅道----产品经理创建项目集和产品线
  15. 伪元素写竖线_[CSS] 用伪元素:after实现分割线和气泡
  16. 基于高德地图的交通数据分析
  17. IP-guard加密软件的攻防之路
  18. (一)走进Linux世界(安装Centos8,初始化生产环境,GNU bash)
  19. loadrunne-- Analysis 分析器
  20. 网管系统 php,智和网管平台-真正开放源码的网元管理系统(EMS)

热门文章

  1. 新手怎么学习嵌入式?什么人适合转行学习嵌入式?
  2. ADSP-21489的图形化编程详解(7:延时、增益、分频、反馈、响度)
  3. 《白话机器学习的数学》正则化实现代码
  4. 云服务器如何查看服务器日志?
  5. 架构师之路--让代码和血液相融!!
  6. php cms 源码,PHPCMS v9.6.1 UTF8
  7. php用户第三方登录失败,php 实现网站端qq第三方登录接口及一些注意事项【原创】...
  8. 【总结】Maven用阿里云作为中央仓库/国内镜像用法设置
  9. K3s 工具进阶完全指南
  10. 服务器端技术及JSP