Cesium加载billboard,GIF,模拟socket动态移动(vx gzh【图说GIS】)

在这里插入图片描述

const viewer = new Cesium.Viewer('cesiumContainer');

    let property, entity, lastTime;
    const addEntity = (point) => {
        property = new Cesium.SampledPositionProperty();
        const start = Cesium.JulianDate.now();
        const position = Cesium.Cartesian3.fromDegrees(point.x, point.y, 0);
        property.addSample(start, position);
        lastTime = start;

        const id = "router-fly-line";
        const entityOption = {
            id,
            name: id,
            position: property,
            heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
            billboard: {
                image: "https://st-gdx.dancf.com/gaodingx/0/uxms/design/20201124-112715-54af.gif",
                verticalOrigin: Cesium.VerticalOrigin.BOTTOM
            },
            orientation: new Cesium.VelocityOrientationProperty(property),
        };

        entity = viewer.entities.add(entityOption);

        viewer.trackedEntity = entity;
        viewer.clock.startTime = start.clone();
        viewer.clock.currentTime = start.clone();
        viewer.clock.clockRange = Cesium.ClockRange.CLAMPED;
        viewer.clock.shouldAnimate = false;
    };

    const getPosition = (time, point) => {
        if (viewer.clock.shouldAnimate === false) {
            viewer.clock.shouldAnimate = true;
        }
        const position = Cesium.Cartesian3.fromDegrees(point.x, point.y, 0);
        const nextTime = Cesium.JulianDate.addSeconds(lastTime, time, new Cesium.JulianDate());
        property.addSample(nextTime, position);
        lastTime = nextTime;
    };
    let x = 103, y = 36, time = 3;//秒
    setInterval(() => {
        if (!property) {
            addEntity({
                x, y
            });
        } else {
            x += 0.0003 * Math.random();
            y += 0.0001;
            const point = {
                x,
                y
            };
            getPosition(time, point);
        }
    }, time * 1000);

1.Cesium的billboard使用动态GIF
在这里插入图片描述
需要注意的是需要引入libgif.js

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="theme-color" content="#000000" />
    <link href="../../Cesium/Widgets/widgets.css" rel="stylesheet">
    <script type="text/javascript" src="../../Cesium/Cesium.js"></script>
    <script src="./libgif.js"></script>
    <title>gif</title>
</head>

<body style="margin: 0px;width:100%;height:100%;">
    <div id="cesiumContainer" style="width:100%;height:100%;position:absolute;"></div>
</body>
<script>
    //created by onegiser at 2021-10-31
    const viewer = new Cesium.Viewer('cesiumContainer', {
        imageryProviderViewModels: [
            new Cesium.ProviderViewModel({
                name: "天地图影像",
                iconUrl: "/imgs/map/tdt_img.jpg",
                creationFunction: () => {
                    const imgImageryProvider = new Cesium.WebMapTileServiceImageryProvider({
                        url: "http://t{s}.tianditu.com/img_c/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=img&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=" + key,
                        subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'],
                        tilingScheme: new Cesium.GeographicTilingScheme(),
                        tileMatrixLabels: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19"]
                    })
                    return [imgImageryProvider]
                }
            })
        ]
    })

    const image = new Image();
    image.src = "https://st-gdx.dancf.com/gaodingx/0/uxms/design/20201124-112715-54af.gif";
    const superGif = new SuperGif({ gif: image });
    superGif.load(function () {
        const entity = viewer.entities.add({
            position: Cesium.Cartesian3.fromDegrees(103.742546, 36.06, 0),
            billboard: {
                image: new Cesium.CallbackProperty(() => {
                    return superGif.get_canvas().toDataURL("image/png");
                }, false),
                verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
                heightReference: Cesium.HeightReference.RELATIVE_TO_GROUND,
            }
        });
        viewer.camera.flyTo({
            destination: Cesium.Cartesian3.fromDegrees(103.742546, 36.06, 30000),
        });
    });
</script>
</html>
  1. Cesium的billboard使用canvas代码参考
    在这里插入图片描述

  2. Cesium的billboard使用canvas(svg构造)代码参考
    在这里插入图片描述
    4.在线图片或svg参考
    在这里插入图片描述

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值