Text Cesiumjs-旋转文本

Text Cesiumjs-旋转文本,text,label,cesium,Text,Label,Cesium,我想添加一个不总是面对相机的标签。相反,我希望它遵循定义的路径。类似于谷歌地图中的街道名称遵循街道方向(它们并不总是水平的) 我可以想到两种可能的文本轮换实现,但没有任何运气 该Label()或Label:具有我尚未找到的旋转属性。例如: viewer.entities.add({ position : Cesium.Cartesian3.fromDegrees(-75.1641667, 39.9522222), label : { text : 'Philade

我想添加一个不总是面对相机的标签。相反,我希望它遵循定义的路径。类似于谷歌地图中的街道名称遵循街道方向(它们并不总是水平的)

我可以想到两种可能的文本轮换实现,但没有任何运气

  • 该Label()或Label:具有我尚未找到的旋转属性。例如:

    viewer.entities.add({
        position : Cesium.Cartesian3.fromDegrees(-75.1641667, 39.9522222),
        label : {
            text : 'Philadelphia'
            //rotation : Cesium.Math.toRadians(-45)
        }
    });
    
  • 还是这个

        var labels = scene.primitives.add(new Cesium.LabelCollection());
        var l = labels.add({
            position : Cesium.Cartesian3.fromRadians(longitude, latitude, height),
            text : 'Hello World',
            font : '24px Helvetica'
            //rotation: Cesium.Math.toRadians(-45)
        });
    
  • 在photoshop中创建每个标签的图片并将其作为图像导入,然后旋转图像(或将其用作材质并旋转实体)。如果你有很多标签(比如街道名称),那么你的劳动强度会很大 或者,cesiumjs有一种方法可以将文本识别为固定位置的二维对象,并随着视角的变化适当地倾斜文本


    有什么想法吗?

    如果您的文本没有更改,您可以使用图像,并通过Cesium.SingleTileManager Provider加载它。 如果文本确实发生了更改,可以使用billboard.image,将HTML画布设置为该图像,然后按如下方式旋转画布:

       var c = document.getElementById("myCanvas");
       var ctx = c.getContext("2d");
    
       ctx.font = "20px Georgia";
       ctx.fillText("Hello World!", 10, 50);
    
       ctx.font = "30px Verdana";
       // Create gradient
       var gradient = ctx.createLinearGradient(0, 0, c.width, 0);
       gradient.addColorStop("0", "magenta");
       gradient.addColorStop("0.5", "blue");
       gradient.addColorStop("1.0", "red");
       // Fill with gradient
       ctx.rotate(20*Math.PI/180);
       ctx.fillStyle = gradient;
       ctx.fillText("Big smile!", 10, 90);
       billboard.image = ctx;
    

    我知道如何旋转标签的唯一方法就像@Henri Aloni用canvas说的那样

    铯已经有了一个名为writeTextToCanvas的函数

    typescript中的示例:

    viewer.entities.add({
        position: Cartesain3.fromDegrees(34, 32, 0),
        billboard: {
             image: writeTextToCanvas('baruch', {
                    font: '30px sans-serif' 
                   }), 
              rotation: 45
          } 
        });