当前位置:   article > 正文

cesium实现区域贴图及加载多个gif动图

cesium

       1、cesium加载多个gif动图

        Cesium的Billboard支持单帧纹理贴图,如果能够将gif动图进行解析,获得时间序列对应的每帧图片,然后按照时间序列动态更新Billboard的纹理,即可实现动图纹理效果。为此也找到了相对于好一点的第三方库libgif能够将gif转化为一帧帧图像,正好能够满足我们的需求!!!

  1. let gifImgList = [];
  2. data?.forEach((tag) => {
  3. let url = huangren;
  4. let gifDiv = document.createElement("div");
  5. let gifImg = document.createElement("img");
  6. // gif库需要img标签配置下面两个属性
  7. gifImg.setAttribute("rel:animated_src", url);
  8. gifImg.setAttribute("rel:auto_play", "1"); // 设置自动播放属性
  9. gifDiv.appendChild(gifImg);
  10. let superGif = new SuperGif({
  11. gif: gifImg,
  12. });
  13. gifImgList.push(superGif);
  14. });
  15. data?.forEach((tag, ind) => {
  16. gifImgList[ind].load(function () {
  17. onViewer.entities.add({
  18. _content: tag,
  19. position: new Cesium.Cartesian3.fromDegrees(
  20. Number(tag.longitude),
  21. Number(tag.latitude),
  22. 100
  23. ),
  24. billboard: {
  25. //图标
  26. image: new Cesium.CallbackProperty(() => {
  27. // 转成base64,直接加canvas理论上是可以的,这里设置有问题
  28. return gifImgList[ind].get_canvas().toDataURL();
  29. }, false),
  30. scale: 0.25,
  31. // width: 36,
  32. // height: 36,
  33. //sizeInMeters: true,//以米为单位,近大远小
  34. //pixelOffset: new Cesium.Cartesian2(0,20), //设置左右、上下移动
  35. //rotation:1.58, //设置旋转角度
  36. //scaleByDistance: new Cesium.NearFarScalar(20000,1,8000000, 0.1), //设置近大远小
  37. //pixelOffsetScaleByDistance: new Cesium.NearFarScalar(20000,10,8000000,100), //设置偏移量
  38. // translucencyByDistance:new Cesium.NearFarScalar(20000,1,8000000,0), //设置透明
  39. // distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
  40. // 20000,
  41. // 8000000
  42. // ), //限制区域显示与隐藏
  43. //水平方向
  44. heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
  45. // 垂直方向
  46. verticalOrigin: Cesium.VerticalOrigin.BASELINE,
  47. },
  48. });
  49. });
  50. });

2、cesium加载geoJSON并贴图

  1. const dataSource = new Cesium.GeoJsonDataSource();
  2. dataSource
  3. .load("https://geo.datav.aliyun.com/areas_v3/bound/110000.json", {
  4. clampToGround: true,
  5. })
  6. .then(() => {
  7. onViewer.dataSources.add(dataSource);
  8. const entities = dataSource.entities.values;
  9. for (let i = 0; i < entities.length; i++) {
  10. const entity = entities[i];
  11. // 修改 entity 样式
  12. entity.polygon.material = new Cesium.ImageMaterialProperty({
  13. image: beijin,
  14. });
  15. entity.polygon.outline = false;
  16. // 添加 entity 的 polyline
  17. entity.polyline = {
  18. positions: entity.polygon.hierarchy._value.positions,
  19. width: 2,
  20. material: Cesium.Color.fromCssColorString("#ffff"),
  21. clampToGround: true,
  22. };
  23. // 获取一个 entity 的中心位置
  24. const center = Cesium.BoundingSphere.fromPoints(
  25. entity.polygon.hierarchy._value.positions
  26. ).center;
  27. // 设置中心位置
  28. entity.position = center;
  29. // 添加 text
  30. entity.label = {
  31. text: entity.properties.name,
  32. color: Cesium.Color.fromCssColorString("#fff"),
  33. font: "normal 32px MicroSoft YaHei",
  34. showBackground: true,
  35. scale: 0.5,
  36. horizontalOrigin: Cesium.HorizontalOrigin.LEFT_CLICK,
  37. verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
  38. disableDepthTestDistance: 10000.0,
  39. };
  40. }
  41. // if (zoomto) {
  42. onViewer.zoomTo(dataSource);
  43. // }
  44. });
  45. return dataSource;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/145155
推荐阅读
相关标签
  

闽ICP备14008679号