加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Cesium学习笔记13--绘制对象-Entity方式

(2018-06-14 16:00:10)
标签:

cesium

entity

分类: Cesium
前面几篇博客我们学习了cesium构造场景的基本知识:影像加载、地形加载、模型加载、鼠标操作。我们可以构造一个基本的三维场景并且可以和场景进行交互操作。三维引擎想做的远不止这些,我们最迫切的需求就是在三维场景中绘制我们的空间对象(数据),本节我们就一起学习下cesium是如何绘制空间对象。
针对空间对象可视化cesium提供了两类接口:entity和primitive。帮助文档解释:
entity:
primitive:
http://s11/mw690/006pZnPwzy7lfJFI2Lg4a&690
哪里都离不开英语,本人是一个六级都没过的,也只能看个大概:entity是一个相对高级的接口;primitive则更为复杂,包括geometry和appearance两部分。本节我们先学习entity。
在示例程序中查看最简单的绘制point示例:
    viewer.entities.add({
        position : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),
        point : {
            pixelSize : 10,
            color : Cesium.Color.YELLOW
        }
    });
可以看到entity通过viewer中的entities加载到场景中,entities是entity的集合对象。这是一个最简单的示例,在场景中加一个点,可以看到需要以下属性:
position :点在场景中位置
point:指明该entity对象为point类型,其中大小为10、颜色为黄色。
在帮助文档中查看entity:
http://s15/mw690/006pZnPwzy7lfLcAKbc6e&690
可以看到entity的属性:id、name、availability、show、description、position、orientation、viewFrom、parent等其他表示entity类型。
//box
    viewer.entities.add({
        name: 'Blue box',
        position: Cesium.Cartesian3.fromDegrees(homePOsition[0], homePOsition[1], 0),
        box: {
            dimensions: new Cesium.Cartesian3(400000.0, 300000.0, 500000.0),
            material: Cesium.Color.BLUE
        }
    });
//Circle
    viewer.entities.add({
        position: Cesium.Cartesian3.fromDegrees(111.0, 40.0, 150000.0),
        name: 'Green circle at height',
        ellipse: {
            semiMinorAxis: 300000.0,
            semiMajorAxis: 300000.0,
            height: 200000.0,
            material: Cesium.Color.GREEN
        }
    });
//Ellipse
    viewer.entities.add({
        position: Cesium.Cartesian3.fromDegrees(103.0, 40.0),
        name: 'Red ellipse on surface with outline',
        ellipse: {
            semiMinorAxis: 250000.0,
            semiMajorAxis: 400000.0,
            material: Cesium.Color.RED.withAlpha(0.5),
            outline: true,
            outlineColor: Cesium.Color.RED
        }
    });
        //Corridor
    viewer.entities.add({
        name: 'Red corridor on surface with rounded corners and outline',
        corridor: {
            positions: Cesium.Cartesian3.fromDegreesArray([
            100.0, 40.0,
            105.0, 40.0,
            105.0, 35.0
            ]),
            width: 200000.0,
            material: Cesium.Color.RED.withAlpha(0.5),
            outline: true,
            outlineColor: Cesium.Color.RED
        }
    });
    //Cylinder
    viewer.entities.add({
        name: 'Green cylinder with black outline',
        position: Cesium.Cartesian3.fromDegrees(100.0, 40.0, 200000.0),
        cylinder: {
            length: 400000.0,
            topRadius: 200000.0,
            bottomRadius: 200000.0,
            material: Cesium.Color.GREEN.withAlpha(0.5),
            outline: true,
            outlineColor: Cesium.Color.DARK_GREEN
        }
    });
    //Cone
    viewer.entities.add({
        name: 'Red cone',
        position: Cesium.Cartesian3.fromDegrees(105.0, 40.0, 200000.0),
        cylinder: {
            length: 400000.0,
            topRadius: 0.0,
            bottomRadius: 200000.0,
            material: Cesium.Color.RED
        }
    });
    //Polygon 
    viewer.entities.add({
        name: 'Red polygon on surface',
        polygon: {
            hierarchy: Cesium.Cartesian3.fromDegreesArray([115.0, 37.0,
            115.0, 32.0,
            107.0, 33.0,
            102.0, 31.0,
            102.0, 35.0]),
            material: Cesium.Color.RED
        }
    });
    //polyline
    viewer.entities.add({
        name: 'Red line on the surface',
        polyline: {
            positions: Cesium.Cartesian3.fromDegreesArray([75, 35,
            125, 35]),
            width: 5,
            material: Cesium.Color.RED
        }
    });
    //polylineVolume
    function computeCircle(radius) {
        var positions = [];
        for (var i = 0; i < 360; i++) {
            var radians = Cesium.Math.toRadians(i);
            positions.push(new Cesium.Cartesian2(radius * Math.cos(radians), radius * Math.sin(radians)));
        }
        return positions;
    }
    viewer.entities.add({
        name: 'Red tube with rounded corners',
        polylineVolume: {
            positions: Cesium.Cartesian3.fromDegreesArray([85.0, 32.0,
            85.0, 36.0,
            89.0, 36.0]),
            shape: computeCircle(60000.0),
            material: Cesium.Color.RED
        }
    });
        //rectangle
    viewer.entities.add({
        name: 'Red translucent rectangle with outline',
        rectangle: {
            coordinates: Cesium.Rectangle.fromDegrees(80.0, 20.0, 110.0, 25.0),
            material: Cesium.Color.RED.withAlpha(0.5),
            outline: true,
            outlineColor: Cesium.Color.RED
        }
    });
        //Sphere
    viewer.entities.add({
        name: 'Red sphere with black outline',
        position: Cesium.Cartesian3.fromDegrees(107.0, 40.0, 300000.0),
        ellipsoid: {
            radii: new Cesium.Cartesian3(300000.0, 300000.0, 300000.0),
            material: Cesium.Color.RED.withAlpha(0.5),
            outline: true,
            outlineColor: Cesium.Color.BLACK
        }
    });
        //ellipsoid
    viewer.entities.add({
        name: 'Blue ellipsoid',
        position: Cesium.Cartesian3.fromDegrees(114.0, 40.0, 300000.0),
        ellipsoid: {
            radii: new Cesium.Cartesian3(200000.0, 200000.0, 300000.0),
            material: Cesium.Color.BLUE
        }
    });
        //wall
    viewer.entities.add({
        name: 'Green wall from surface with outline',
        wall: {
            positions: Cesium.Cartesian3.fromDegreesArrayHeights([107.0, 43.0, 100000.0,
            97.0, 43.0, 100000.0,
            97.0, 40.0, 100000.0,
            107.0, 40.0, 100000.0,
            107.0, 43.0, 100000.0]),
            material: Cesium.Color.GREEN
        }
    });
以上代码最终绘制大杂烩:
http://s7/mw690/006pZnPwzy7lfNYwCtUb6&690
这些接口都是直接复制官方demo中的代码。
工程源码:github源码


我的学习公众号也开通,感兴趣的小伙伴们可以加关注:giserYZ2SS,代码交流小伙伴在公众号发消息,我会一一回复的。

http://s14/small/006pZnPwzy7q1bYCcFvad&690


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有