cesium的学习
一、学习资料:http://cesiumjs.org/tutorials.html,看完6个教程后对图层加载、控件控制开关、地形数据叠加、模型添加、相机控制、图形绘制有一点了解。这也是cesium的主要功能。
二、下载cesium 1.3的压缩包。
1.模块功能的演示:Apps/Sandcastle/gallery,能更加快速的入门。
2.API查询。Build\Documentation\,对函数、参数有了解。
三、实践:主要实现车辆位置的监控及厂区、道路的显示。
1.初始化控件
- <span style="white-space:pre"> </span>var viewer = new Cesium.Viewer('cesiumContainer', {
- //baseLayerPicker : false,//图层控制显示
- animation: false, //动画控制不显示
- timeline: false,//时间线不显示
- sceneModePicker: false,//投影方式显示
- navigationHelpButton: false//帮助不显示
- });
2.加载geojson道路和厂区建筑
- <span style="white-space:pre"> </span> var billboards = new Cesium.BillboardCollection();//图形集合
- scene.primitives.add(billboards);
- var labels = new Cesium.LabelCollection();//文字集合
- scene.primitives.add(labels);
- <span style="white-space:pre"> </span> //加载geojson
- function loadGeoJson(url) {
- var dtd = $.Deferred();//这个Deferred可以看看jquery的资料
- var dataSource = new Cesium.GeoJsonDataSource();
- viewer.dataSources.add(dataSource);
- dataSource.loadUrl(url).then(function () {
- var entities = dataSource.entities.entities;
- var colorHash = {};
- for (var i = 0; i < entities.length; i++) {
- var entity = entities[i];
- var colorstr = entity.properties["color"];
- var ispolygon = entity.polygon;
- var ispolyline = entity.polyline;
- var color = Cesium.Color.BLUE;
- if (colorstr) {
- color = colorHash[colorstr];
- if (!color) {
- color = Cesium.Color.fromRandom({
- alpha: 0.6
- });//这里采用随机,api中颜色用的是rgba的32位
- colorHash[name] = color;
- }
- }
- if (ispolygon)//面处理
- {
- entity.polygon.material = Cesium.ColorMaterialProperty.fromColor(color);
- var height=entity.properties["height"];//要素的属性字段
- var x = entity.properties["x"];
- var y = entity.properties["y"];
- var name = entity.properties["NAME"];
- if (height) {
- entity.polygon.extrudedHeight = new Cesium.ConstantProperty(height);//拔高
- <span style="white-space:pre"> </span>//深入可以考虑材质贴文理
- }
- if (x && y)
- {
- if (!height)
- { height = 0; }
- if (name) {
- buildlabels.add({//添加面的标注
- position: Cesium.Cartesian3.fromDegrees(x, y, height+5),
- text: name,
- scale: 0.8,
- translucencyByDistance: new Cesium.NearFarScalar(2000, 1, 3000, 0),//代表2000米,透明度1。3000米,文字透明度0
- fillColor: new Cesium.Color(0.6, 0.9, 1.0),
- outlineColor: Cesium.Color.BLACK,
- outlineWidth: 2,
- style: Cesium.LabelStyle.FILL_AND_OUTLINE
- });
- }
- }
- }
- else if (ispolyline)//线处理
- {
- entity.polyline.material = Cesium.ColorMaterialProperty.fromColor(color);
- }
- }
- dtd.resolve();
- });
- return dtd;
- }
3.同时加载2个geojson数据及定位后再加载车辆。但是还是车子先显示
- <span style="font-size:18px;"><span style="white-space:pre"> </span>$.when(loadGeoJson('data/road5.geojson'), loadGeoJson('data/build6.geojson'), zoomToCenter(x, y))
- .done(function () {
- setInterval(refreshCar, 10000);
- jBox2.tip("加载完成", 'success');
- })
- .fail(function () {
- jBox2.tip("加载失败", 'error');
- });</span></span>
4.加载车辆。原来想用模型,但是效率不行,demo中的1m左右车子,加载100个就挂了。后来采用图片,车子确没有方向性了
,图片随地图拖动自动旋转的。效率确实快了。
- <span style="white-space:pre"> </span>function createModel2(car) {
- var x = car.jin;
- var y = car.wei;
- var carid = car.carid;
- labels.add({//给车子添加标注
- position: Cesium.Cartesian3.fromDegrees(x, y, 5),
- text: carid,
- scale: 0.8,
- translucencyByDistance: new Cesium.NearFarScalar(200, 1, 500, 0)
- });
- billboards.add({
- image: 'image/car.gif',
- position: Cesium.Cartesian3.fromDegrees(x, y, 0),
- scaleByDistance: new Cesium.NearFarScalar(0, 2, 10000, 0)//根据距离放大缩小图片
- });
- }
5.加载外部模型测测效率-10m左右的房子。
- <span style="white-space:pre"> </span> function createModel(url, x, y, height, rotate) {
- height = Cesium.defaultValue(height, 0.0);
- var ellipsoid = viewer.scene.globe.ellipsoid;
- var cart3 = ellipsoid.cartographicToCartesian(Cesium.Cartographic.fromDegrees(x, y, height));
- var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(cart3);
- var quat = Cesium.Quaternion.fromAxisAngle(Cesium.Cartesian3.UNIT_Z, Cesium.Math.toRadians(rotate));
- var mat3 = Cesium.Matrix3.fromQuaternion(quat);
- var mat4 = Cesium.Matrix4.fromRotationTranslation(mat3, Cesium.Cartesian3.ZERO);
- var m = Cesium.Matrix4.multiplyTransformation(modelMatrix, mat4, new Cesium.Matrix4());
- var model = scene.primitives.add(Cesium.Model.fromGltf({
- url: url,//模型地址
- modelMatrix: m,//模型转换矩阵,像角度,之类
- minimumPixelSize: 30,//地图上显示最小像素
- scale: 10//模型放大比例
- }));
- // model.readyToRender.addEventListener(function (model) {//如果模型有动画,开启动画
- //Play and loop all animations at half-speed
- // model.activeAnimations.addAll({
- // speedup : 0.5,
- // loop : Cesium.ModelAnimationLoop.REPEAT
- // });
- //
- // });
- };
6,模型处理过程
sketchup下载模型-》导出dae格式-》将图片及dae压缩成zip格式-》 http://cesiumjs.org/convertmodel.html-》转换完成自动下载glTF文件-》copy
glTF文件及图片文件到工程目录下。当中碰见过问题是图片格式是bmp,但是glTF中写的是png,可以手动修改下文件中相应图片的后缀。
四、综合
1.cesium基于webgl,实践中性能不佳,特别是模型这块支持不理想。对矢量操作确实不错,商用有差距。
2.官网有些插件可以下载直接使用,如cesium-drawhelper(画图工具)
3.可以参考下这位的博客:http://my.oschina.net/u/1585572/blog/287961
cesium的学习的更多相关文章
- 最近开始学习Cesium,学习学习。
最近开始学习Cesium,学习学习.
- cesium相关学习网址
cesium相关学习网址: cesium资料大全网址:https://www.cnblogs.com/cesium1/p/10062942.html http://192.168.101. ...
- Cesium系统学习整理(一)
(一)Cesium的概念定义 Cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎.Cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区域,并提供良好的 ...
- cesium js学习一加载三维模型【转】
http://blog.csdn.net/tangyajun_168/article/details/50936698 最近项目中用到室外三维模型与室内三维地图交互,室外三维模型的加载我们采用了ces ...
- Cesium.js学习第三天(模型展示)
var viewer = new Cesium.Viewer('cs'); viewer.scene.primitives.add(Cesium.Model.fromGltf({ url : '/Ce ...
- Cesium.js学习第二天(立方体)
var viewer = new Cesium.Viewer('cs'); viewer.entities.add({//图标 position: Cesium.Cartesian3.fromDegr ...
- Cesium.js学习第一天(设置材质)
var viewer = new Cesium.Viewer('cs'); var entity = viewer.entities.add({ position: Cesium.Cartesian3 ...
- cesium 学习(四) Hello World
一.前言 之前的文章都是基础,搭建环境.部署Cesium.学习资料等等.现在简单入手,一个Hello World页面开发. 二.Hello World 感觉Hello World没有什么特别需要讲的, ...
- Cesium学习笔记(七):Demo学习(自由控制飞行的飞机)[转]
https://blog.csdn.net/umgsoil/article/details/74923013# 这是官方的教程Demo,名字叫Use HeadingPitchRoll,顾名思义,就是教 ...
随机推荐
- npm/bower/brew
npm: npm(node package manager)node包管理器,用来下载发布第三方工具包,例如:代码的压缩.合并.编译的插件包.主要功能:安装.卸载.更新.查看.搜索.发布等 npm的具 ...
- SQL server用到的SQL语句备份下
这是触发器用于关联条件的 -------------1-------------- set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgo ALTER trigger ...
- SQL 字符串处理函数大全
select语句中只能使用sql函数对字段进行操作(链接sql server),select 字段1 from 表1 where 字段1.IndexOf("云")=1;这条语句不对 ...
- ES mapping可以修改include_in_all,也可以修改index_options,norm,但是无法修改_all属性!
ES mapping可以修改include_in_all,也可以修改index_options,norm,但是无法修改_all属性! curl -XPOST "http://localhos ...
- bzoj4889
http://www.lydsy.com/JudgeOnline/problem.php?id=4889 人傻常数大 bzoj上跑不过 洛谷上能过两到三个点 我写的是树套树啊 怎么跑的比分块还慢 每次 ...
- openStack aio 测试
- 【转载】HashMap实现原理浅析
HashMap和Hashtable的区别 两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全Hashtable的实现方法里面都添加了synchronized关键字来确保线程 ...
- Linux系统的整体目录结构和文件解析
Linux系统目录结构 使用 ls / 查看系统的文件目录: /:根目录,根目录下一般只存放子目录,不存放文件.在linux系统中所有的文件都挂载该目录下. /bin:命令目录. 存放系统的可执行的二 ...
- php排序函数测试
1.sort,asort,arsort函数 十万个数的数组排序,用了0.17秒 $starttime=explode(' ',microtime());;for ($i=0; $i <10000 ...
- 一款超好用的第三方评论插件--Gitalk
一,使用Gitalk的背景: 1.最近在做一个基于Java的个人博客系统,已经基本完工了,突然发现怎么没有评论的操作,如果再从头开始从数据库开始写的话,花费的代价有点大,于是乎我就在网上寻找一款适合我 ...