Cesium学习教程+笔记(Mars3D) 图层 图层组 矢量数据

简介: Cesium学习教程+笔记(Mars3D) 图层 图层组 矢量数据

图层与图层组

为什么需要了解图层组?图层与图层组又是啥关系?

之前学过的点线面都是矢量数据 , 添加到矢量图层直接到地图上的

var tucengdian = new mars3d.layer.GraphicLayer(); //新建矢量图层
      map.addLayer(tucengdian); //把矢量图层绑定到map地图上
      var graphic = new mars3d.graphic.PointEntity({
        //PointEntity 像素点对象
        position: [108, 30], //坐标
        style: {
          //样式
          color: "pink", //颜色
          pixelSize: 10, //大小
          outline: true, //是否边框
          outlineColor: "#ffffff", //边框颜色
          outlineWidth: 2, //边框大小
        },
      });
tucengdian.addGraphic(graphic); //把刚刚创建的像素点添加到矢量图层上

然而只是一个图层 , 或者只是控制图层 在复杂的场景已经远远不能满足需求

比如之前的台风案例 , 控制整个台风的显示与隐藏居然涉及到这么多图层的控制,非常麻烦 ,如果同时有多个台风就显得非常乏力

image-20210806140734544

所以需要图层组来集中控制 ,集中管理

图层

图层其实有很多很多,万变不离其宗 其实就是用来放一些东西而已

比如矢量数据的点线面,就是放入矢量图层的

下面的例子以矢量数据为例

新建图层

let GraphicLayer = new mars3d.layer.GraphicLayer();  //新建矢量图层

销毁图层

GraphicLayer.remove();

添加矢量数据

addGraphic.addGraphic(graphic); //graphic 是矢量数据内容

图层组

图层组 集中管理图层 , 集中

新建图层组

let GroupLayer = new mars3d.layer.GroupLayer(); //新建图层组

销毁图层组

GroupLayer.remove(); //销毁图层组

添加图层到图层组

//新建矢量图层添加到图层组
let GraphicLayer = new mars3d.layer.GraphicLayer();
GroupLayer.addLayer(GraphicLayer);

图层组添加到地图上

图层组不能直接放到地图上 否则之后放入的数据将不再渲染

必须要在所有数据添加完毕了再放到地图上

 this.map.addLayer(graphicLayer);

图层与图层组的疑问

序号 问题 回答
1 图层能直接添加到地图吗? 可以
2 图层内能添加图层吗? 不能
3 矢量数据能直接添加到地图上吗? 不能
4 图层组内可以添加图层组吗? 可以
5 图层组内可以添加矢量数据吗? 不能
6 地图可以添加多个图层组吗? 可以

矢量数据

矢量数据需要放到矢量图层中 , 常见的矢量数据 点线面等等

像素点 PointEntity

var tucengdian = new mars3d.layer.GraphicLayer(); //新建图层
      map.addLayer(tucengdian); //把图层绑定到map地图上
      var graphic = new mars3d.graphic.PointEntity({
        //PointEntity 像素点对象
        position: [108, 30], //坐标
        style: {
          //样式
          color: "pink", //颜色
          pixelSize: 10, //大小
          outline: true, //是否边框
          outlineColor: "#ffffff", //边框颜色
          outlineWidth: 2, //边框大小
        },
      });
tucengdian.addGraphic(graphic); //把刚刚创建的像素点添加到图层上

image-20210617133205241

线 PolylineEntity

var tucengxian = new mars3d.layer.GraphicLayer(); //新建图层
      map.addLayer(tucengxian); //把图层绑定到map地图上
      var graphic = new mars3d.graphic.PolylineEntity({
        //PolylineEntity 线
        positions: [
          //坐标 --线是直至少两点组成的,所有需要二维数组坐标
          [108, 30],
          [108, 31],
        ],
        style: {
          width: 6,
          material: mars3d.MaterialUtil.createMaterialProperty(
            //新建材质线
            mars3d.MaterialType.PolylineOutline, //线的材质
            {
              color: Cesium.Color.ORANGE, //线的颜色
              outlineWidth: 2, //线的轮廓宽度
              outlineColor: Cesium.Color.BLACK, //线的轮廓颜色
            }
          ),
        },
      });
tucengxian.addGraphic(graphic);//把线添加到图层中

image-20210617134332843

圆 CircleEntity

var tucengyuan = new mars3d.layer.GraphicLayer(); //新建图层
     map.addLayer(tucengyuan); //把图层绑定到map地图上
      let graphic = new mars3d.graphic.CircleEntity({
        //圆对象
        position: [116.1, 30.9, 1000], //坐标
        style: {
          //样式
          radius: 180000, //半径
          color: "#00ff00", //颜色
          opacity: 0.3, //透明度
          outline: true, //是否显示轮廓
          outlineWidth: 3, //轮廓宽度
          outlineColor: "#ffffff", //轮廓颜色
        },
      });
      tucengyuan.addGraphic(graphic);//把圆添加到图层上

image-20210617135047335

面 PolygonEntity

var tucengyuan = new mars3d.layer.GraphicLayer(); //新建图层
      map.addLayer(tucengyuan); //把图层绑定到map地图上
      var graphic = new mars3d.graphic.PolygonEntity({
        //面
        positions: [
          //坐标
          [116.510278, 25.834372],
          [110.530085, 30.809331],
          [116.507367, 30.788551],
          [116.472468, 30.823091],
        ],
        style: {
          //样式
          color: "pink", //颜色
          opacity: 0.7, //透明
          outline: true, //是否开启轮廓
          outlineWidth: 0, //轮廓宽度
        },
      });
      tucengyuan.addGraphic(graphic); //添加多边形到图层上

image-20210617141406537

文字 LabelEntity

let graphic = new mars3d.graphic.LabelEntity({
        position: new mars3d.LatLngPoint(116.1, 31.0, 1000),
        style: {
          text: "小陈爱编程",
          font_size: 25,
          font_family: "楷体",
          color: "#003da6",
          outline: true,
          outlineColor: "#bfbfbf",
          outlineWidth: 2,
          horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
          verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
          visibleDepth: false,
        },
      });
this.GraphicLayer.addGraphic(graphic);

image-20210806150935195

图标点 BillboardEntity

 let graphic = new mars3d.graphic.BillboardEntity({
        name: "贴地图标",
        position: [116.3, 31.0, 1000],
        style: {
          image: require("../assets/logo.png"),
          scale: 1,
          horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
          verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
          clampToGround: true,
        },
      });
this.GraphicLayer.addGraphic(graphic);

image-20210806151425539

平面 PlaneEntity

let graphic = new mars3d.graphic.PlaneEntity({
        position: new mars3d.LatLngPoint(116.4, 31.0, 1000),
        style: {
          plane: new Cesium.Plane(Cesium.Cartesian3.UNIT_Z, 0.0),
          dimensions: new Cesium.Cartesian2(4000.0, 4000.0),
          material: mars3d.MaterialUtil.createMaterialProperty(
            mars3d.MaterialType.Image,
            {
              image: require("../assets/movingRiver.png"),
              transparent: true,
            }
          ),
        },
      });
      this.GraphicLayer.addGraphic(graphic);

image-20210806151924551

盒子 BoxEntity

let graphic = new mars3d.graphic.BoxEntity({
        position: new mars3d.LatLngPoint(116.5, 31.0, 1000),
        style: {
          dimensions: new Cesium.Cartesian3(2000.0, 2000.0, 2000.0),
          fill: true,
          color: '#00ffff',
          opacity: 0.9,
          heading: 45,
          roll: 45,
          pitch: 0,
        },
      })
this.GraphicLayer.addGraphic(graphic);

image-20210806152402143

其他类型

类型太多了,这里就不一一介绍了 从左到右按顺序依次

圆 , 圆柱 CircleEntity

圆锥 CylinderEntity

球 , 半球 , 椭球 EllipsoidEntity

gltf小模型 ModelEntity

线 PolylineEntity

管道线 PolylineVolumeEntity

走廊 CorridorEntity

墙 WallEntity

矩形 RectangleEntity

面 PolygonEntity

image-20210806152932835

 function addGraphic_e06(graphicLayer) {
      let graphic = new mars3d.graphic.CircleEntity({
        position: [116.1, 30.9, 1000],
        style: {
          radius: 1800.0,
          color: '#00ff00',
          opacity: 0.3,
          outline: true,
          outlineWidth: 3,
          outlineColor: '#ffffff',
          clampToGround: true,
        },
      })
      graphicLayer.addGraphic(graphic)
    }
/*---------------------------------------------------------*/
    function addGraphic_e07(graphicLayer) {
      let graphic = new mars3d.graphic.CylinderEntity({
        position: [116.2, 30.9, 1000],
        style: {
          length: 3000.0,
          topRadius: 0.0,
          bottomRadius: 1300.0,
          color: '#00FFFF',
          opacity: 0.7,
        },
      })
      graphicLayer.addGraphic(graphic)
    }
/*---------------------------------------------------------*/
    function addGraphic_e08(graphicLayer) {
      let graphic = new mars3d.graphic.EllipsoidEntity({
        position: new mars3d.LatLngPoint(116.3, 30.9, 1000),
        style: {
          radii: new Cesium.Cartesian3(1500.0, 1500.0, 1500.0),
          material: Cesium.Color.RED.withAlpha(0.5),
          outline: true,
          outlineColor: Cesium.Color.WHITE.withAlpha(0.3),
        },
      })
      graphicLayer.addGraphic(graphic)
    }
/*---------------------------------------------------------*/
    function addGraphic_e09(graphicLayer) {
      let graphic = new mars3d.graphic.ModelEntity({
        name: '消防员',
        position: [116.4, 30.9, 1000],
        style: {
          url: '//data.mars3d.cn/gltf/mars/firedrill/xiaofangyuan-run.gltf',
          scale: 16,
          minimumPixelSize: 100,
        },
      })
      graphicLayer.addGraphic(graphic)
    }
/*---------------------------------------------------------*/
    function addGraphic_e10(graphicLayer) {
      let graphic = new mars3d.graphic.PolylineEntity({
        positions: [
          [116.5, 30.9, 1000],
          [116.52, 30.91, 1000],
          [116.53, 30.89, 1000],
        ],
        style: {
          width: 5,
          color: '#3388ff',
        },
      })
      graphicLayer.addGraphic(graphic) //还可以另外一种写法: graphic.addTo(graphicLayer)
    }
/*---------------------------------------------------------*/
    function addGraphic_e11(graphicLayer) {
      let graphic = new mars3d.graphic.PolylineVolumeEntity({
        positions: [
          [116.1, 30.8, 1000],
          [116.12, 30.81, 1000],
          [116.13, 30.79, 1000],
        ],
        style: {
          shape: 'pipeline',
          radius: 80,
          color: '#3388ff',
          opacity: 0.9,
        },
      })
      graphicLayer.addGraphic(graphic) //还可以另外一种写法: graphic.addTo(graphicLayer)
    }
/*---------------------------------------------------------*/
    function addGraphic_e12(graphicLayer) {
      let graphic = new mars3d.graphic.CorridorEntity({
        positions: [
          [116.2, 30.8, 1000],
          [116.22, 30.81, 1000],
          [116.23, 30.79, 1000],
          [116.247328, 30.806077, 610.41],
        ],
        style: {
          width: 500,
          color: '#3388ff',
        },
      })
      graphicLayer.addGraphic(graphic) //还可以另外一种写法: graphic.addTo(graphicLayer)
    }
/*---------------------------------------------------------*/
    function addGraphic_e13(graphicLayer) {
      let graphic = new mars3d.graphic.WallEntity({
        positions: [
          [116.3, 30.8, 1000],
          [116.31, 30.81, 1000],
          [116.334639, 30.800735, 721.39],
          [116.32, 30.79, 1000],
        ],
        style: {
          closure: true,
          diffHeight: 500,
          //动画线材质
          material: mars3d.MaterialUtil.createMaterialProperty(mars3d.MaterialType.LineFlow, {
            image: 'img/textures/fence.png',
            color: '#00ff00',
            speed: 10,
            axisY: true,
          }),
        },
      })
      graphicLayer.addGraphic(graphic) //还可以另外一种写法: graphic.addTo(graphicLayer)
    }
/*---------------------------------------------------------*/
    function addGraphic_e14(graphicLayer) {
      let graphic = new mars3d.graphic.RectangleEntity({
        positions: [
          [116.383144, 30.819978, 444.42],

          [116.42216, 30.793431, 1048.07],
        ],
        style: {
          color: '#3388ff',
          opacity: 0.5,
          outline: true,
          outlineWidth: 3,
          outlineColor: '#ffffff',
        },
      })
      graphicLayer.addGraphic(graphic) //还可以另外一种写法: graphic.addTo(graphicLayer)
    }
/*---------------------------------------------------------*/
    function addGraphic_e15(graphicLayer) {
      let graphic = new mars3d.graphic.PolygonEntity({
        positions: [
          [116.510278, 30.834372, 567.29],
          [116.530085, 30.809331, 448.31],
          [116.507367, 30.788551, 98.21],
          [116.472468, 30.823091, 677.39],
        ],
        style: {
          material: mars3d.MaterialUtil.createMaterialProperty(mars3d.MaterialType.Water, {
            normalMap: 'img/textures/waterNormals.jpg', // 水正常扰动的法线图
            frequency: 8000.0, // 控制波数的数字。
            animationSpeed: 0.02, // 控制水的动画速度的数字。
            amplitude: 5.0, // 控制水波振幅的数字。
            specularIntensity: 0.8, // 控制镜面反射强度的数字。
            baseWaterColor: '#006ab4', // rgba颜色对象基础颜色的水。#00ffff,#00baff,#006ab4
            blendColor: '#006ab4', // 从水中混合到非水域时使用的rgba颜色对象。
          }),
        },
      })
      graphicLayer.addGraphic(graphic) //还可以另外一种写法: graphic.addTo(graphicLayer)
    }
相关文章
|
4月前
|
数据可视化
R语言多图合成:优雅地在一个画布上展示多个图形
【8月更文挑战第30天】R语言提供了多种方法来实现多图合成,从基础的`par()`函数到高级的`gridExtra`、`ggplot2`和`cowplot`包,每种方法都有其独特的优势和应用场景。通过掌握这些技术,你可以根据实际需求灵活地组合图形,从而更高效地展示和解读数据。希望本文能为你提供一些有益的参考和启示。
|
3月前
|
JSON JavaScript Linux
绘图框架 plotly 知识点补充(绘制子图,图表保存)
绘图框架 plotly 知识点补充(绘制子图,图表保存)
79 13
|
2月前
|
开发框架 前端开发 定位技术
在Mars3d实现cesium的ImageryLayer自定义瓦片的层级与原点
通过上述步骤,您可以成功在Mars3D平台上集成Cesium,并实现自定义瓦片图层的层级与原点配置。这一过程不仅提升了地图应用的定制化程度,也为处理特定数据集和优化用户体验提供了灵活的解决方案。在实际开发过程中,不断测试和微调是确保图层展示效果与性能的关键。
147 0
|
6月前
|
JavaScript 前端开发 数据可视化
ECharts 雷达图案例001-自定义节点动画
使用ECharts创建自定义雷达图,通过JavaScript动态更新高亮和交互反馈,增强用户体验。关键步骤包括:开启动画效果,数据更新时保持图表状态,鼠标悬浮时动态高亮指标,优化动画性能。案例展示了ECharts在数据可视化中的灵活性和表现力。[查看完整案例](https://download.csdn.net/download/No_Name_Cao_Ni_Mei/89454380)。
281 0
|
7月前
|
数据可视化
R语言动态图可视化:如何、创建具有精美动画的图
R语言动态图可视化:如何、创建具有精美动画的图
|
数据可视化 搜索推荐 JavaScript
数据可视化大屏Echarts高级开发散点图实战案例分析(地图扩展插件bmap.min.js、散点图、百度地图控件、柱图、涟漪动图、条件判断颜色)
数据可视化大屏Echarts高级开发散点图实战案例分析(地图扩展插件bmap.min.js、散点图、百度地图控件、柱图、涟漪动图、条件判断颜色)
629 0
|
Web App开发 数据可视化 JavaScript
漏刻有时数据可视化Echarts组件开发(23):世界地图动态时间轴的散点气泡图
漏刻有时数据可视化Echarts组件开发(23):世界地图动态时间轴的散点气泡图
209 0
Echarts实战案例代码(48):堆叠图实现图形和坐标轴对齐的解决方案
Echarts实战案例代码(48):堆叠图实现图形和坐标轴对齐的解决方案
163 0
|
JavaScript 定位技术 API
GIS开发:three.js标签注记添加
GIS开发:three.js标签注记添加
386 0
|
数据可视化 图形学 Python
Matplotlib从入门到精通:图层结构
Matplotlib从入门到精通:图层结构
431 0
Matplotlib从入门到精通:图层结构

热门文章

最新文章