cesium教程6-用entity绘制点线面label和billboard广告牌

 

 

 

 

 

 注意:billboard显示的图片是立体的,会跟随角度而变化的。

pinBuilder.fromText()用于创建自定义地图图钉

 完整示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>cesium示例</title>
  <!-- 引用cesium的js和css,天地图的扩展js -->
  <script src="https://cesium.com/downloads/cesiumjs/releases/1.92/Build/Cesium/Cesium.js"></script>
  <link rel="stylesheet" href="https://cesium.com/downloads/cesiumjs/releases/1.92/Build/Cesium/Widgets/widgets.css"/>
  <script src="http://api.tianditu.gov.cn/cdn/plugins/cesium/cesiumTdt.js" ></script>
  <style type="text/css">
    html, body, #tiandituContainer {
      width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden;
    }
  </style>
 
</head>
<body onload="loadData()">
<div id="tiandituContainer">
</div>
<script>
    
  //Cesium官网注册后的授权token,没有token不能使用cesium在线的地形服务,这里需要改成自己的token
  Cesium.Ion.defaultAccessToken = "";
  
  var viewer;
   function loadData()
   {
       //默认会调用微软virtualearth地图
        viewer = new Cesium.Viewer('tiandituContainer',{
          animation:false,       //是否显示动画控件
          homeButton:true,       //是否显示home键
          geocoder:true,         //是否显示地名查找控件,如果设置为true,则无法查询
          baseLayerPicker:true, //是否显示图层选择控件
          timeline:false,        //是否显示时间线控件
          fullscreenButton:true, //是否全屏显示
          infoBox:true,         //是否显示点击要素之后显示的信息
          sceneModePicker:true,  //是否显示投影方式控件  三维/二维
          navigationInstructionsInitiallyVisible:false, //导航指令
          navigationHelpButton:false,     //是否显示帮助信息控件
          selectionIndicator:false, //是否显示指示器组件
        });
        //隐藏cesium的logo
        viewer._cesiumWidget._creditContainer.style.display = "none"; 
        //默认的Cesium会加载一个bingMap底图,这个地图网络不太好,一般要先去掉这个默认的
        viewer.imageryLayers.remove(viewer.imageryLayers.get(0));
        
        //arcgis在线影像地图
        viewer.imageryLayers.addImageryProvider(new Cesium.ArcGisMapServerImageryProvider({
            name:"img_arcgis",
            url:"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"
        }));
         
         viewer.scene.globe.depthTestAgainstTerrain = false;//地形遮挡效果开关,打开后地形会遮挡看不到的区域
         viewer.scene.globe.enableLighting = true; //对大气和雾启用动态照明效果
         let pinBuilder = new Cesium.PinBuilder()
       
          //加载点1
          var point1 = viewer.entities.add({
              id: 'point1', // id属性
              position: Cesium.Cartesian3.fromDegrees(103, 30, 100), // 位置
              point: {  //
                  color: new Cesium.Color.fromCssColorString("#3388ff"), // 点颜色
                  pixelSize: 10,  // 点大小
                  outlineColor: new Cesium.Color.fromCssColorString("#ffffff"), // 点的外圈线颜色
                  outlineWidth: 2,  // 点的外圈线宽度
                  disableDepthTestDistance: Number.POSITIVE_INFINITY  // 被遮挡是否可见(也就是将这个Entity在场景中置顶)
              },
              billboard: {
                  image: pinBuilder.fromText('first', Cesium.Color.ROYALBLUE, 48).toDataURL(),
                  verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
              },
          });
          //加载点2,并绘制label文字和billboard广告牌
          var point2 = viewer.entities.add({
              id: 'point2', // id属性
              position: Cesium.Cartesian3.fromDegrees(104, 30, 100), // 位置
              point: {  //
                  color: new Cesium.Color.fromCssColorString("#ff88ff"), // 点颜色
                  pixelSize: 10,  // 点大小
                  outlineColor: new Cesium.Color.fromCssColorString("#ffffff"), // 点的外圈线颜色
                  outlineWidth: 2,  // 点的外圈线宽度
                  disableDepthTestDistance: Number.POSITIVE_INFINITY  // 被遮挡是否可见(也就是将这个Entity在场景中置顶)
              },
              label: {
                       text: '紫色点的label标签',
                       font: '16px sans-serif', // 字体大小
                       style: Cesium.LabelStyle.FILL_AND_OUTLINE, // 字体样式
                       fillColor: new Cesium.Color.fromCssColorString("#ff88ff"), // 字体填充色
                       outlineWidth: 1,  // 字体外圈线宽度(同样也有颜色可设置)
                       outlineColor: new Cesium.Color.fromCssColorString("#ffffff"),
                       verticalOrigin: Cesium.VerticalOrigin.BOTTOM, // 垂直位置
                       pixelOffset: new Cesium.Cartesian2(0, 15),  // 中心位置
                       disableDepthTestDistance: Number.POSITIVE_INFINITY
                   },
           billboard : {
                         image : 'https://leafletjs.com/docs/images/logo-ua.png',//billboard广告牌
                         show: true, // default
                         pixelOffset: new Cesium.Cartesian2(0, -10), // default: (0, 0)设置图片的偏移,是按屏幕坐标来偏移的
                         eyeOffset: new Cesium.Cartesian3(0.0, 0.0, 0.0), // default
                         horizontalOrigin: Cesium.HorizontalOrigin.CENTER, // default
                         verticalOrigin: Cesium.VerticalOrigin.BOTTOM, // default: CENTER
                         scale: 2.0, // default: 1.0
                         color: new Cesium.Color.fromCssColorString("#ffffff"), // default: WHITE
                         rotation: 0, // default: 0.0
                         alignedAxis: Cesium.Cartesian3.ZERO, // default
                         width: 200, // default: undefined
                         height: 50, // default: undefined
                         scaleByDistance: new Cesium.NearFarScalar(1.5e2, 1, 1000000, 0.0), // 按距离缩放,距离大于10000米时,图标不显示
                   }
          });
          //加载点3
          var point3 = viewer.entities.add({
              id: 'point3', // id属性
              position: Cesium.Cartesian3.fromDegrees(103.5, 30.5, 100), // 位置
              point: {  //
                  color: new Cesium.Color.fromCssColorString("#00ffff"), // 点颜色
                  pixelSize: 10,  // 点大小
                  outlineColor: new Cesium.Color.fromCssColorString("#ffffff"), // 点的外圈线颜色
                  outlineWidth: 2,  // 点的外圈线宽度
                  disableDepthTestDistance: Number.POSITIVE_INFINITY  // 被遮挡是否可见(也就是将这个Entity在场景中置顶)
              }
          });
          //加载线条
          var line  = viewer.entities.add({
              name: "line", // 线的name属性
              polyline: {  // 线
                  positions: [Cesium.Cartesian3.fromDegrees(103, 30, 100), Cesium.Cartesian3.fromDegrees(104, 30, 100)], // 由点构线
                  width: 5.0, // 线的宽度
                  material: new Cesium.PolylineGlowMaterialProperty({
                      color: new Cesium.Color.fromCssColorString("#ff0000"),
                  }), // 线的材质、样式
              }
          });
          //加载面图形
          var polygon  = viewer.entities.add({
              polygon: {
                  height: 0.1,
                  hierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArrayHeights([103, 30, 100, 103.5, 30.5, 100, 104, 30, 100])),  // 面的顶点坐标集合
                  material: new Cesium.Color.fromCssColorString("#FFD700").withAlpha(.5), // 颜色和透明度
                  perPositionHeight: true,  // 是否支持坐标高度  
              }
          });
            
          // 将三维球定位到模型
          viewer.camera.flyTo({
              destination: Cesium.Cartesian3.fromDegrees(103.5, 30, 200000),
              orientation: {
                  heading :  Cesium.Math.toRadians(348.4202942851978),
                  pitch : Cesium.Math.toRadians(-89.74026687972041),
                  roll : Cesium.Math.toRadians(0)
              },
              complete:function callback() {
                  // 定位完成之后的回调函数
              }
          });
   }    
            
</script>
</body>
</html>

 

posted @ 2022-08-25 11:37  JackGIS  阅读(6199)  评论(0编辑  收藏  举报