一、学习资料:http://cesiumjs.org/tutorials.html,看完6个教程后对图层加载、控件控制开关、地形数据叠加、模型添加、相机控制、图形绘制有一点了解。这也是cesium的主要功能。

二、下载cesium 1.3的压缩包。

1.模块功能的演示:Apps/Sandcastle/gallery,能更加快速的入门。

2.API查询。Build\Documentation\,对函数、参数有了解。

三、实践:主要实现车辆位置的监控及厂区、道路的显示。

1.初始化控件

  1. <span style="white-space:pre">    </span>var viewer = new Cesium.Viewer('cesiumContainer', {
  2. //baseLayerPicker : false,//图层控制显示
  3. animation: false, //动画控制不显示
  4. timeline: false,//时间线不显示
  5. sceneModePicker: false,//投影方式显示
  6. navigationHelpButton: false//帮助不显示
  7. });

2.加载geojson道路和厂区建筑

  1. <span style="white-space:pre">    </span>    var billboards = new Cesium.BillboardCollection();//图形集合
  2. scene.primitives.add(billboards);
  3. var labels = new Cesium.LabelCollection();//文字集合
  4. scene.primitives.add(labels);
  1. <span style="white-space:pre">    </span>   //加载geojson
  2. function loadGeoJson(url) {
  3. var dtd = $.Deferred();//这个Deferred可以看看jquery的资料
  4. var dataSource = new Cesium.GeoJsonDataSource();
  5. viewer.dataSources.add(dataSource);
  6. dataSource.loadUrl(url).then(function () {
  7. var entities = dataSource.entities.entities;
  8. var colorHash = {};
  9. for (var i = 0; i < entities.length; i++) {
  10. var entity = entities[i];
  11. var colorstr = entity.properties["color"];
  12. var ispolygon = entity.polygon;
  13. var ispolyline = entity.polyline;
  14. var color = Cesium.Color.BLUE;
  15. if (colorstr) {
  16. color = colorHash[colorstr];
  17. if (!color) {
  18. color = Cesium.Color.fromRandom({
  19. alpha: 0.6
  20. });//这里采用随机,api中颜色用的是rgba的32位
  21. colorHash[name] = color;
  22. }
  23. }
  24. if (ispolygon)//面处理
  25. {
  26. entity.polygon.material = Cesium.ColorMaterialProperty.fromColor(color);
  27. var height=entity.properties["height"];//要素的属性字段
  28. var x = entity.properties["x"];
  29. var y = entity.properties["y"];
  30. var name = entity.properties["NAME"];
  31. if (height) {
  32. entity.polygon.extrudedHeight = new Cesium.ConstantProperty(height);//拔高
  33. <span style="white-space:pre">                </span>//深入可以考虑材质贴文理
  34. }
  35. if (x && y)
  36. {
  37. if (!height)
  38. { height = 0; }
  39. if (name) {
  40. buildlabels.add({//添加面的标注
  41. position: Cesium.Cartesian3.fromDegrees(x, y, height+5),
  42. text: name,
  43. scale: 0.8,
  44. translucencyByDistance: new Cesium.NearFarScalar(2000, 1, 3000, 0),//代表2000米,透明度1。3000米,文字透明度0
  45. fillColor: new Cesium.Color(0.6, 0.9, 1.0),
  46. outlineColor: Cesium.Color.BLACK,
  47. outlineWidth: 2,
  48. style: Cesium.LabelStyle.FILL_AND_OUTLINE
  49. });
  50. }
  51. }
  52. }
  53. else if (ispolyline)//线处理
  54. {
  55. entity.polyline.material = Cesium.ColorMaterialProperty.fromColor(color);
  56. }
  57. }
  58. dtd.resolve();
  59. });
  60. return dtd;
  61. }

3.同时加载2个geojson数据及定位后再加载车辆。但是还是车子先显示

  1. <span style="font-size:18px;"><span style="white-space:pre">    </span>$.when(loadGeoJson('data/road5.geojson'), loadGeoJson('data/build6.geojson'), zoomToCenter(x, y))
  2. .done(function () {
  3. setInterval(refreshCar, 10000);
  4. jBox2.tip("加载完成", 'success');
  5. })
  6. .fail(function () {
  7. jBox2.tip("加载失败", 'error');
  8. });</span></span>

4.加载车辆。原来想用模型,但是效率不行,demo中的1m左右车子,加载100个就挂了。后来采用图片,车子确没有方向性了,图片随地图拖动自动旋转的。效率确实快了。

  1. <span style="white-space:pre">    </span>function createModel2(car) {
  2. var x = car.jin;
  3. var y = car.wei;
  4. var carid = car.carid;
  5. labels.add({//给车子添加标注
  6. position: Cesium.Cartesian3.fromDegrees(x, y, 5),
  7. text: carid,
  8. scale: 0.8,
  9. translucencyByDistance: new Cesium.NearFarScalar(200, 1, 500, 0)
  10. });
  11. billboards.add({
  12. image: 'image/car.gif',
  13. position: Cesium.Cartesian3.fromDegrees(x, y, 0),
  14. scaleByDistance: new Cesium.NearFarScalar(0, 2, 10000, 0)//根据距离放大缩小图片
  15. });
  16. }

5.加载外部模型测测效率-10m左右的房子。

  1. <span style="white-space:pre">    </span> function createModel(url, x, y, height, rotate) {
  2. height = Cesium.defaultValue(height, 0.0);
  3. var ellipsoid = viewer.scene.globe.ellipsoid;
  4. var cart3 = ellipsoid.cartographicToCartesian(Cesium.Cartographic.fromDegrees(x, y, height));
  5. var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(cart3);
  6. var quat = Cesium.Quaternion.fromAxisAngle(Cesium.Cartesian3.UNIT_Z, Cesium.Math.toRadians(rotate));
  7. var mat3 = Cesium.Matrix3.fromQuaternion(quat);
  8. var mat4 = Cesium.Matrix4.fromRotationTranslation(mat3, Cesium.Cartesian3.ZERO);
  9. var m = Cesium.Matrix4.multiplyTransformation(modelMatrix, mat4, new Cesium.Matrix4());
  10. var model = scene.primitives.add(Cesium.Model.fromGltf({
  11. url: url,//模型地址
  12. modelMatrix: m,//模型转换矩阵,像角度,之类
  13. minimumPixelSize: 30,//地图上显示最小像素
  14. scale: 10//模型放大比例
  15. }));
  16. // model.readyToRender.addEventListener(function (model) {//如果模型有动画,开启动画
  17. //Play and loop all animations at half-speed
  18. //  model.activeAnimations.addAll({
  19. //      speedup : 0.5,
  20. //      loop : Cesium.ModelAnimationLoop.REPEAT
  21. //  });
  22. //
  23. //  });
  24. };

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的学习的更多相关文章

  1. 最近开始学习Cesium,学习学习。

    最近开始学习Cesium,学习学习.

  2. cesium相关学习网址

    cesium相关学习网址: cesium资料大全网址:https://www.cnblogs.com/cesium1/p/10062942.html       http://192.168.101. ...

  3. Cesium系统学习整理(一)

    (一)Cesium的概念定义 Cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎.Cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区域,并提供良好的 ...

  4. cesium js学习一加载三维模型【转】

    http://blog.csdn.net/tangyajun_168/article/details/50936698 最近项目中用到室外三维模型与室内三维地图交互,室外三维模型的加载我们采用了ces ...

  5. Cesium.js学习第三天(模型展示)

    var viewer = new Cesium.Viewer('cs'); viewer.scene.primitives.add(Cesium.Model.fromGltf({ url : '/Ce ...

  6. Cesium.js学习第二天(立方体)

    var viewer = new Cesium.Viewer('cs'); viewer.entities.add({//图标 position: Cesium.Cartesian3.fromDegr ...

  7. Cesium.js学习第一天(设置材质)

    var viewer = new Cesium.Viewer('cs'); var entity = viewer.entities.add({ position: Cesium.Cartesian3 ...

  8. cesium 学习(四) Hello World

    一.前言 之前的文章都是基础,搭建环境.部署Cesium.学习资料等等.现在简单入手,一个Hello World页面开发. 二.Hello World 感觉Hello World没有什么特别需要讲的, ...

  9. Cesium学习笔记(七):Demo学习(自由控制飞行的飞机)[转]

    https://blog.csdn.net/umgsoil/article/details/74923013# 这是官方的教程Demo,名字叫Use HeadingPitchRoll,顾名思义,就是教 ...

随机推荐

  1. ASM instance正常启动,但是用sqlplus 连不上的问题

    首先,这是oracle 11g 11.0.2.3 版本.这是一个神奇的问题. asm instance启动正常,但是用sqlplus 去连接的时候会显示如下: [oracle@racnode1 ~]$ ...

  2. KonBoot – 只要5K映象文件轻易绕过您的WindowsXP/VISTA/7系统的密码

    http://pannisec.diandian.com/?tag=konBoot 这个东西是我昨晚点击了QQ弹窗的那个SOSO问题后,有人问我如何破解Windows登陆密码,且不可以用net命令创建 ...

  3. oracle汉字占多少字节问题

    这个其实和Oracle的配置是相关的,用以下语句查询: select * from v$nls_parameters t where t.PARAMETER='NLS_CHARACTERSET'; 可 ...

  4. 自己定义ViewpagerIndicator (仿猫眼,加入边缘回弹滚动效果)

    一.概述 今天主要来分享个自己定义viewpagerindicator.效果主要是仿 猫眼电影 顶部的栏目切换.也就是我们常说的indicator,难度简单,为了让滑动时效果更炫酷,我在滑动到左边第一 ...

  5. Java课程设计——人事管理系统

    主界面代码: package PersonSystem; import java.awt.*; import java.awt.event.*; import javax.swing.*; impor ...

  6. Android:仿手机QQ好友动态的ListView

    1.介绍: 本博客使用XListView模仿Android版QQ好友动态的ListView效果.效果截图例如以下: 效果图1 watermark/2/text/aHR0cDovL2Jsb2cuY3Nk ...

  7. oc84--单利

    // Tools.h #import <Foundation/Foundation.h> @interface Tools : NSObject<NSCopying, NSMutab ...

  8. 【转】Android进阶2之 阴影制作(Shadow)

    阴影制作:包括各种形状(矩形,圆形等等),以及文字等等都能设置阴影. 阴影制作是什么原理呢? 其实很简单,你需要设置阴影的东西被看作一个主层.然后在主层下面画一个阴影层. 阴影制作涉及到一个重要函数: ...

  9. YTU 2723: 默认参数--求圆的面积

    2723: 默认参数--求圆的面积 时间限制: 1 Sec  内存限制: 128 MB 提交: 206  解决: 150 题目描述 根据半径r求圆的面积, 如果不指定小数位数,输出结果默认保留两位小数 ...

  10. 描述一下ArrayList和LinkedList各自实现和区别

    ArrayList,LinkedList,Vestor这三个类都实现了java.util.List接口,但它们有各自不同的特性,主要如下: 一.同步性 ArrayList,LinkedList是不同步 ...