new mars3d.layer.BusineDataLayer({加载动态的.png图标

149 篇文章 2 订阅
133 篇文章 0 订阅

问题:

用BillboardEntity或者BusineDataLayer方法加载图标是静态的,如果用div的话,400个就会很卡顿

解决方案:

目前BillboardEntity加载是静态的,无法加载动图,网上搜了下,可以使用apngjs.js插件库预先对动图进行解析。

image支持动态属性。里面传入apngjs.js 处理后的动态帧图片。

  let url = '../../assets/images/wind.png'
  let canvas = document.createElement('canvas')
  let ctx = canvas.getContext('2d')
  let blob = await loaderURL(url)
  let arrayBuffer = await blobToArrayBuffer(blob)
  let apng = apngjs.parseAPNG(arrayBuffer)
  let player = await apng.getPlayer(ctx)
  player.play()
 
  

  const graphic = new mars3d.graphic.BillboardEntity({
    position: new mars3d.LngLatPoint(116.328539, 30.978731, 1521),
    style: {
      image:  new Cesium.CallbackProperty(() => {
        return player.currentFrame.imageElement
      }, false),
      horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
      verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
      label: {
        text: "Popup局部更新绑定的演示",
        font_size: 18,
        font_family: "楷体",
        pixelOffsetY: -45,
        horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
        verticalOrigin: Cesium.VerticalOrigin.BOTTOM
      }
    },
    attr: { remark: "示例2" }
  })
  graphicLayer.addGraphic(graphic)

功能示例(Vue版) | Mars3D三维可视化平台 | 火星科技

利用第3方库(gifler.js)加载gif,参考

function addDemoGraphic12(graphicLayer) {
  let gifImgBuffer
  const graphic = new mars3d.graphic.BillboardEntity({
    position: new mars3d.LngLatPoint(116.3, 30.8, 1000),
    style: {
      image: new Cesium.CallbackProperty(() => {
        return gifImgBuffer
      }, false),
      scale: 0.1,
      horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
      verticalOrigin: Cesium.VerticalOrigin.CENTER
    },
    attr: { remark: "示例12" }
  })
  graphicLayer.addGraphic(graphic)

  // eslint-disable-next-line no-undef
  const gif = gifler("img/icon/tf.gif")
  gif.frames(document.createElement("canvas"), function (ctx, frame) {
    gifImgBuffer = frame.buffer.toDataURL()
  })
}

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mars3D是一款基于WebGL的开源地图框架,可以各种地图数据,并展示在地图上。如果要Mabpx的PBF矢量切片服务,可以按照以下步骤操作: 1. 首先需要在Mabpx平台上创建一个PBF矢量切片服务,然后获取服务地址和图层名称。 2. 在Mars3D中创建一个新的GeoJsonLayer图层。 3. 设置GeoJsonLayer的url属性为PBF矢量切片服务地址,设置layerName属性为图层名称。 4. 将GeoJsonLayerMars3D地图对象中,即可在地图上展示PBF矢量切片数据。 以下是示例代码: ```javascript // 创建一个Mars3D地图对象 var map = new mars3d.Map('mars3dContainer', { // 设置底图为谷歌影像图 "baseLayers": [{ "layer": "gaoDe", "title": "高德影像", "icon": "image/baseLayer_gaode.png", "visible": true }], // 设置地图中心点和缩放级别 "center": { "x": 120.129186, "y": 30.259494, "z": 1000000 } }); // 创建一个GeoJsonLayer图层 var layer = new mars3d.layer.GeoJsonLayer({ "name": "PBF矢量切片", "url": "http://localhost:8080/mabpx/tile/{z}/{x}/{y}.pbf", "layerName": "test" }); // 将图层添Mars3D地图对象中 map.addLayer(layer); ``` 在以上代码中,我们创建了一个GeoJsonLayer图层,设置了它的url属性为PBF矢量切片服务地址,设置了layerName属性为图层名称。然后将该图层添Mars3D地图对象中,即可在地图上展示PBF矢量切片数据。需要注意的是,PBF矢量切片服务地址中的{z}、{x}、{y}是动态参数,表示切片的级别、行号和列号。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值