Cesium 数据可视化之 Entity(上)

记录一个待解决的问题

  • 轮廓线宽度设置后无效果

一、Billboard 广告牌(图片形式)

用于绘制位置图标,方便根据图标来查看地区的特征,如国旗的显示,以及城市标志性建筑物的显示。官方链接:点击访问

var entity = viewer.entities.add({
        // id: "", // 此对象的唯一标识符。如果未提供,则将生成GUID。
        name: "billboard", // 获取或设置对象的名称
        // description: "", // 获取或者设置HTML描述
        // orientation: "", // 获取或者设置方向
        position: Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883), // 获取或者设置位置
        billboard: {
            show: true, // default 是否显示该实体
            image: "/static/images/pythondjango.png", // 指定广告牌的URL,Django中可以是静态文件也可以是媒体文件
            scale: 1.0, // default: 1.0 ,一个数字属性,指定要应用于图像尺寸的比例
            //像素偏移    type: Cartesian2    default:Cartesian2.ZERO
            pixelOffset: new Cesium.Cartesian2(0, 0), // 二维笛卡尔坐标系
            //眼睛偏移    type: Cartesian3    default:Cartesian3.ZERO
            eyeOffset: new Cesium.Cartesian3(0.0, 0.0, 0.0), // 三维笛卡尔坐标点
            // 水平对齐方式  type: HorizontalOrigin  default:HorizontalOrigin.CENTER
            // CENTER 原点在对象的水平中心;LEFT 原点在对象的左侧;RIGHT 原点在对象的右侧
            horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
            // 垂直对齐方式  type: VerticalOrigin  default:VerticalOrigin.CENTER
            // CENTER 原点位于 BASELINE 和 TOP 之间的垂直中心;BOTTOM 原点在对象的底部;
            // BASELINE 如果对象包含文本,则原点位于文本的基线,否则原点位于对象的底部;TOP 原点在对象的顶部
            verticalOrigin: Cesium.VerticalOrigin.CENTER, // default: CENTER 垂直对齐位置 参考Cesium.VerticalOrigin
            // 获取或设置此广告牌的高度参考    type: HeightReference    default:HeightReference.NONE
            // NONE 位置绝对;CLAMP_TO_GROUND 位置固定在地形上;RELATIVE_TO_GROUND 位置高度是指地形上方的高度
            heightReference: Cesium.HeightReference.NONE,
            // 颜色  type: Color  default:Color.WHITE
            color: Cesium.Color.LIME,
            // 获取或设置以弧度为单位的旋转角度  type: number  default:0
            rotation: 0,
            // 获取或设置世界空间中的对齐轴  type:Cartesian3  default:Cartesian3.ZERO
            alignedAxis: Cesium.Cartesian3.ZERO,
            width: 50, // 用于指定广告牌的宽度(以像素为单位),并覆盖原始尺寸。
            height: 50, // 用于指定广告牌的高度(以像素为单位),并覆盖原始尺寸。
            // 根据广告牌与相机的距离获取或设置广告牌的近和远缩放属性  type:NearFarScalar
            // new Cesium.NearFarScalar (
            // near: 摄像机范围的下限 default=0,
            // nearValue:摄像机范围下限的值 default=0,
            // far 摄像机范围的上限 default=1,
            // farValue 摄像机范围的上限的值 default=0)
            scaleByDistance: new Cesium.NearFarScalar(1.0e3, 2.0, 2.0e3, 1.0),
            // 根据广告牌到相机的距离,获取或设置广告牌的近和远半透明属性  type:NearFarScalar
            translucencyByDistance: new Cesium.NearFarScalar(
                1.0e3,
                1.0,
                1.5e6,
                0.5
            ),
            // 根据广告牌与摄像头的距离,获取或设置广告牌的近像素偏移量和远像素偏移量缩放属性  type:NearFarScalar
            pixelOffsetScaleByDistance: new Cesium.NearFarScalar(
                1.0e3,
                1.0,
                1.5e6,
                0.0
            ),
            //定义了要用于广告牌的图像的子区域,而不是整个图像,而是从左下角开始以像素为单位。
            //imageSubRegion: Cesium.BoundingRectangle ( x , y , width , height )
            // 它指定将在距摄像机的距离上显示此广告牌
            distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0.0, 5000.0),
            // 获取或设置与相机的距离,在深度处禁用深度测试,例如,以防止剪切地形。
            // 设置为零时,将始终应用深度测试。设置为Number.POSITIVE_INFINITY时,永远不会应用深度测试。
            disableDepthTestDistance: Number.POSITIVE_INFINITY,
        },
    });
    // 异步设置摄像机以查看提供的一个或多个实体或数据源。如果数据源仍在加载过程中,或者可视化仍在加载中,此方法在执行缩放之前等待数据准备就绪。 
    viewer.zoomTo(entity);
    // 更改广告牌的相关属性,首先实例化,然后类似于python字典的更改值
    var billboard = entity.billboard;
    billboard.scale = 1.0;
    billboard.color = Cesium.Color.WHITE.withAlpha(1);

在这里插入图片描述

二、Box 盒子(长方体)

 var entity = viewer.entities.add({
      name: "box", // 设置新增的名称
      position: Cesium.Cartesian3.fromDegrees(-107.0, 40.0, 3000.0),  // 设置盒子中心的位置
      box: {
        show: true, // 设置是否显示
        dimensions: new Cesium.Cartesian3(4000.0, 3000.0, 1000.0), // Cartesian3类型,用于指定框的长度,宽度和高度
        // 指定距实体位置的高度是相对于什么的高度。 default: HeightReference.NONE
        // NONE	位置绝对;CLAMP_TO_GROUND	位置固定在地形上;RELATIVE_TO_GROUND 位置高度是指地形上方的高度。
        heightReference: Cesium.HeightReference.NONE,
        fill: true, // 指定是否用提供的材料填充该框。
        // MaterialProperty|Color  default:Color.WHITE // 用于指定用于填充框的材料
        material: Cesium.Color.RED.withAlpha(0.5),
        outline: true, // 是否显示轮廓线
        // type:Property|Color  default:Color.BLACK 轮廓线颜色
        outlineColor: Cesium.Color.YELLOW,
        outlineWidth: 20, // 轮廓宽度

        // type:ShadowMode  default:ShadowMode.DISABLED
        // DISABLED	对象不投射或接收阴影;ENABLED	对象投射并接收阴影;
        // CAST_ONLY	对象仅投射阴影;RECEIVE_ONLY 该对象仅接收阴影。
        shadows: Cesium.ShadowMode.DISABLED,
        // type:DistanceDisplayCondition 指定要在距摄像机的距离处显示此框。(a,b)表示在a和b之间才显示 
         distanceDisplayCondition: new Cesium.DistanceDisplayCondition(1.0e3,2.0e3 ),
      },
    });
    viewer.zoomTo(entity);

在这里插入图片描述

三、Corridor 走廊

 var entity = viewer.entities.add({
      name: "corridor",
      corridor: {
        // show: true,
        // 指定定义走廊中心线的 Cartesian3 位置的数组  type: Cartesian3
        positions: Cesium.Cartesian3.fromDegreesArray([
          -80.0,
          40.0,
          -85.0,
          40.0,
          -85.0,
          35.0,
        ]),
        width: 200000.0, // 指定道路边缘之间的距离。
        height: 200000.0, // 指定走廊相对于椭球表面的高度。
          // 指定距实体位置的高度是相对于什么的高度。 default: HeightReference.NONE
        // NONE	位置绝对;CLAMP_TO_GROUND	位置固定在地形上;RELATIVE_TO_GROUND 位置高度是指地形上方的高度。
        heightReference: Cesium.HeightReference.NONE,
        extrudedHeight: 100000.0, // 指定走廊的凸出面相对于椭球面的高度。
          // 指定走廊凸出面的高度是相对于什么的高度。
        extrudedHeightReference: Cesium.HeightReference.NONE,

        // 拐角的样式  type:CornerType  default:CornerType.ROUNDED
        // ROUNDED	角有光滑的边缘;MITERED	拐角点是相邻边的交点;BEVELED	角被修剪
        cornerType: Cesium.CornerType.MITERED,
        granularity: Cesium.Math.RADIANS_PER_DEGREE, // 每个纬度和经度之间的距离
        fill: true, // 指定是否提供填充材料
        // 材质  type:MaterialProperty|Color  default:Color.WHITE
        material: Cesium.Color.RED.withAlpha(0.5),
        outline: true, // height or extrudedHeight must be set for outlines to display
        outlineColor: Cesium.Color.BLACK,
        outlineWidth: 1.0,
          // type:ShadowMode  default:ShadowMode.DISABLED
        // DISABLED	对象不投射或接收阴影;ENABLED	对象投射并接收阴影;CAST_ONLY	对象仅投射阴影;RECEIVE_ONLY 该对象仅接收阴影。
        shadows: Cesium.ShadowMode.CAST_ONLY,
          // 在距地面多少高度之间显示
        // distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
        //   1.0e3,
        //   2.0e3
        // ),
        // 走廊在地面上时将对地形,3D tiles还是对两者进行分类  type:ClassificationType  default:ClassificationType.BOTH
        // TERRAIN 将仅对地形进行分类;CESIUM_3D_TILE 将仅对3D Tiles进行分类;BOTH	将同时对Terrain和3D Tiles进行分类。
        classificationType: Cesium.ClassificationType.BOTH,
      },
       // zindex:1,// 一个属性,指定道路的zIndex,仅当未定义height和extrudedHeight且道路为静态时才有效。
    });
    viewer.zoomTo(entity);

在这里插入图片描述

四、Cylinder 棱柱(锥)

为什么我要称之为棱柱,是因为slices属性小时其实就是棱柱,只有该值为无穷大时才是圆。

var entity = viewer.entities.add({
      name: "cylinder", // 绘制圆柱
      position: Cesium.Cartesian3.fromDegrees(-105.0, 40.0, 200000.0),
      cylinder: {
        // show: true,
        length: 400000.0, // 圆柱体长度
        topRadius: 200000.0, // 圆柱体顶部半径
        bottomRadius: 200000.0, // 圆柱体底部半径
          // 指定距实体位置的高度是相对于什么的高度。 default: HeightReference.NONE
        // NONE	位置绝对;CLAMP_TO_GROUND	位置固定在地形上;RELATIVE_TO_GROUND 位置高度是指地形上方的高度。
        heightReference: Cesium.HeightReference.NONE, //
        fill: true,
        material: Cesium.Color.GREEN.withAlpha(0.5),
        outline: true,
        outlineColor: Cesium.Color.DARK_GREEN,
        outlineWidth: 1.0,
        numberOfVerticalLines: 6, // 用于指定沿轮廓的周长绘制的垂直线的数量。
           // type:ShadowMode  default:ShadowMode.DISABLED
        // DISABLED	对象不投射或接收阴影;ENABLED	对象投射并接收阴影;CAST_ONLY	对象仅投射阴影;RECEIVE_ONLY 该对象仅接收阴影。
        shadows: Cesium.ShadowMode.DISABLED,
        slices: 8, // 圆柱周围的边缘数量,数值大则圆
          // 设置位于哪个高度之间能够显示
        // distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
        //   1.0e3,
        //   2.0e3
        // ),
      },
    });
    viewer.zoomTo(entity);
  • slices大于numberOfVerticalLines时,numberOfVerticalLines才会生效

在这里插入图片描述

在这里插入图片描述

  • 通多调整 圆柱底部半径为0

在这里插入图片描述

五、Ellipse 椭圆

Tip:长短轴距离相等就是绘制圆了

var entity = viewer.entities.add({
        name: "Circles and Ellipses",
        // 指定椭圆的中心
        position: Cesium.Cartesian3.fromDegrees(-95.0, 40.0, 100000.0),
        ellipse: {
            show: true,
            semiMajorAxis: 300000.0, // 长半轴距离
            semiMinorAxis: 150000.0, // 短半轴距离
            height: 0.0, // 指定椭圆相对于椭球表面的高度
            // 指定距实体位置的高度是相对于什么的高度。 default: HeightReference.NONE
            // NONE	位置绝对;CLAMP_TO_GROUND	位置固定在地形上;RELATIVE_TO_GROUND 位置高度是指地形上方的高度。
            heightReference: Cesium.HeightReference.NONE,
            extrudedHeight: 0.0, // 用于指定椭圆的挤压面相对于椭球面的高度
            extrudedHeightReference: Cesium.HeightReference.NONE, // 用于指定extrudedHeight相对于什么
            // rotation: Cesium.Math.toRadians(45), // 指定椭圆从北方逆时针旋转
            stRotation: 0.0, // 用于指定椭圆纹理从北方逆时针旋转
            granularity: Cesium.Math.RADIANS_PER_DEGREE, // 椭圆上各点之间的角距离
            fill: true, // 是否填充
            material: Cesium.Color.BLUE.withAlpha(0.5),
            outline: true, // 是否显示填充线
            outlineColor: Cesium.Color.DARK_GREEN,
            outlineWidth: 1.0,
            numberOfVerticalLines: 16, // 沿轮廓的周长绘制的垂直线的数量
            shadows: Cesium.ShadowMode.DISABLED,
            // distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
            //   1.0e3,
            //   2.0e3
            // ),
            // 在地面上时将对地形,3D tiles还是对两者进行分类  type:ClassificationType  default:ClassificationType.BOTH
            // TERRAIN 将仅对地形进行分类;CESIUM_3D_TILE 将仅对3D瓷砖进行分类;BOTH	将同时对Terrain和3D Tile进行分类。
            classificationType: Cesium.ClassificationType.BOTH,
        },
    });

    viewer.zoomTo(viewer.entities);

在这里插入图片描述

六、Ellipsoid 椭球体

 var entity = viewer.entities.add({
      name: "Spheres and Ellipsoids",
      position: Cesium.Cartesian3.fromDegrees(-100.0, 40.0, 300000.0), // 从以度为单位的经度和纬度值返回Cartesian3位置。
      ellipsoid: {
        show: true,
        radii: new Cesium.Cartesian3(200000.0, 200000.0, 200000.0), // 椭球外半径
       // innerRadii: new Cesium.Cartesian3(1000.0, 1000.0, 1000.0), // 椭球内半径
        minimumClock: 0.0, // 最小时钟角度
        maximumClock: 2 * Math.PI, // 最大时钟角度
        minimumCone: 0.0, // 最小圆锥角
        maximumCone: Math.PI, // 最大圆锥角
        heightReference: Cesium.HeightReference.NONE,
        fill: true,
        material: Cesium.Color.BLUE.withAlpha(0.5),
        outline: true,
        outlineColor: Cesium.Color.YELLOW,
        outlineWidth: 1.0,

        stackPartitions: 12, // 延纬度线切割的次数 格网
        slicePartitions: 12, // 延经度线切割的次数 格网
        subdivisions: 120, // 每个轮廓环的样本数,确定曲率的粒度,越大越光滑

        shadows: Cesium.ShadowMode.DISABLED,
        // distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
        //   1.0e3,
        //   2.0e3
        // ),
      },
    });

    viewer.zoomTo(viewer.entities);

在这里插入图片描述

七、Label 标签

主要用于地图位置的标注,可以与图片合用( billboard 广告牌 ),这时为了防止遮挡,可以设置偏移来避免。

    var entity = viewer.entities.add({
      name: "label",
      position: Cesium.Cartesian3.fromDegrees(
        -75.1641667,
        39.9522222,
        300000.0
      ),
      label: {
        show: true, // 是否显示文字标注
        text: "label标签", // 显示的标注是什么
        font: "normal 30px Sans-serif", // 设置标注字体的大小和类型
                  fillColor: Cesium.Color.RED, // 字体颜色
        // FILL	填充;OUTLINE 只显示边框;FILL_AND_OUTLINE 既有填充又有边框
        style: Cesium.LabelStyle.FILL_AND_OUTLINE,
        scale: 0.7, // 整体缩放,若字体出现模糊可以先设置两倍大字体,然后进行缩放
        showBackground: false,// 是否显示标注的背景颜色
        backgroundColor: Cesium.Color.BLUE, // 设置背景颜色
        backgroundPadding: new Cesium.Cartesian2(7, 5), // 以像素为单位指定水平和垂直背景填充的属性
        pixelOffset: Cesium.Cartesian2.ZERO, // 指定像素偏移的属性
        eyeOffset: Cesium.Cartesian3.ZERO, // 指定眼偏移
        horizontalOrigin: Cesium.HorizontalOrigin.CENTER, // 水平对齐
        verticalOrigin: Cesium.VerticalOrigin.CENTER, // 垂直对齐
        heightReference: Cesium.HeightReference.NONE,
        outlineColor: Cesium.Color.BLACK, // 字体外围颜色
        outlineWidth: 1,
          // 用于根据与相机的距离设置半透明度的属性
        translucencyByDistance: new Cesium.NearFarScalar(
          1.0e3,
          1.0,
          1.5e6,
          1
        ),
          // 用于根据与相机的距离设置 pixelOffset 的属性
        pixelOffsetScaleByDistance: new Cesium.NearFarScalar(
          1.0e3,
          1.0,
          1.5e6,
          0.0
        ),
          // 用于根据与相机的距离设置比例的属性
        scaleByDistance: new Cesium.NearFarScalar(1.0e3, 2.0, 2.0e3, 1.0),
         distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
           0,
          2.0e4),
          // 一个属性,指定要禁用深度测试的距离相机的距离
        disableDepthTestDistance: Number.POSITIVE_INFINITY,
      },
    });
    viewer.zoomTo(viewer.entities);

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

而又何羡乎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值