赞
踩
Cesium的Billboard支持单帧纹理贴图,如果能够将gif动图进行解析,获得时间序列对应的每帧图片,然后按照时间序列动态更新Billboard的纹理,即可实现动图纹理效果。为此也找到了相对于好一点的第三方库libgif能够将gif转化为一帧帧图像,正好能够满足我们的需求!!!
- let gifImgList = [];
- data?.forEach((tag) => {
- let url = huangren;
- let gifDiv = document.createElement("div");
- let gifImg = document.createElement("img");
-
- // gif库需要img标签配置下面两个属性
- gifImg.setAttribute("rel:animated_src", url);
- gifImg.setAttribute("rel:auto_play", "1"); // 设置自动播放属性
- gifDiv.appendChild(gifImg);
- let superGif = new SuperGif({
- gif: gifImg,
- });
- gifImgList.push(superGif);
- });
-
- data?.forEach((tag, ind) => {
- gifImgList[ind].load(function () {
- onViewer.entities.add({
- _content: tag,
- position: new Cesium.Cartesian3.fromDegrees(
- Number(tag.longitude),
- Number(tag.latitude),
- 100
- ),
- billboard: {
- //图标
- image: new Cesium.CallbackProperty(() => {
- // 转成base64,直接加canvas理论上是可以的,这里设置有问题
- return gifImgList[ind].get_canvas().toDataURL();
- }, false),
- scale: 0.25,
- // width: 36,
- // height: 36,
- //sizeInMeters: true,//以米为单位,近大远小
- //pixelOffset: new Cesium.Cartesian2(0,20), //设置左右、上下移动
- //rotation:1.58, //设置旋转角度
- //scaleByDistance: new Cesium.NearFarScalar(20000,1,8000000, 0.1), //设置近大远小
- //pixelOffsetScaleByDistance: new Cesium.NearFarScalar(20000,10,8000000,100), //设置偏移量
- // translucencyByDistance:new Cesium.NearFarScalar(20000,1,8000000,0), //设置透明
- // distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
- // 20000,
- // 8000000
- // ), //限制区域显示与隐藏
- //水平方向
- heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
- // 垂直方向
- verticalOrigin: Cesium.VerticalOrigin.BASELINE,
- },
- });
- });
- });
2、cesium加载geoJSON并贴图
- const dataSource = new Cesium.GeoJsonDataSource();
- dataSource
- .load("https://geo.datav.aliyun.com/areas_v3/bound/110000.json", {
- clampToGround: true,
- })
- .then(() => {
- onViewer.dataSources.add(dataSource);
- const entities = dataSource.entities.values;
- for (let i = 0; i < entities.length; i++) {
- const entity = entities[i];
- // 修改 entity 样式
- entity.polygon.material = new Cesium.ImageMaterialProperty({
- image: beijin,
- });
- entity.polygon.outline = false;
- // 添加 entity 的 polyline
- entity.polyline = {
- positions: entity.polygon.hierarchy._value.positions,
- width: 2,
- material: Cesium.Color.fromCssColorString("#ffff"),
- clampToGround: true,
- };
- // 获取一个 entity 的中心位置
- const center = Cesium.BoundingSphere.fromPoints(
- entity.polygon.hierarchy._value.positions
- ).center;
- // 设置中心位置
- entity.position = center;
- // 添加 text
- entity.label = {
- text: entity.properties.name,
- color: Cesium.Color.fromCssColorString("#fff"),
- font: "normal 32px MicroSoft YaHei",
- showBackground: true,
- scale: 0.5,
- horizontalOrigin: Cesium.HorizontalOrigin.LEFT_CLICK,
- verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
- disableDepthTestDistance: 10000.0,
- };
- }
-
- // if (zoomto) {
- onViewer.zoomTo(dataSource);
- // }
- });
-
- return dataSource;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。