cesium实现自定义div图层(实现复杂标注效果、地图弹出框)

1、创建自定义div类文件(customDiv.js)

class CustomDiv {
  name = 'CustomDiv'
  viewer = null
  position = null
  constructor({ viewer, id, name, position, style }) {
    this.viewer = viewer
    this.name = name || 'default'
    this.id = id
    this.position = position
    this.style = style || ''
    this.init()
  }
  //初始化
  init() {
    // 不存在则重新创建元素
    let containDiv = this.createDivDom()
    // 绑定到container下
    this.viewer.cesiumWidget.container.appendChild(containDiv)
    // 监听事件-实现div随地图移动
    this.viewer.scene.postRender.addEventListener((scene) => {
      // 世界坐标转换为屏幕坐标
      let screen = scene.cartesianToCanvasCoordinates(this.position)
      // div变换css矩阵
      if (screen && screen.x && screen.y)
        containDiv.style.transform = `matrix(1, 0, 0, 1, ${screen.x}, ${screen.y})`
    })
  }
  //创建div元素
  createDivDom() {
    let containDiv = document.createElement('div')
    containDiv.classList.add('map-divGraphic')
    this.name.split(' ').forEach((item) => {
      containDiv.classList.add(item)
    })
    if (this.id) {
      containDiv.setAttribute('id', this.id)
    }
    containDiv.style.cssText =
      'position: absolute;left: 0px;top: 0px;transform-origin: left bottom 0px;'
    containDiv.innerHTML = this.style?.html || ''
    return containDiv
  }
  //更改div的坐标
  setPosition(position) {
    this.position = position
  }
}
export default CustomDiv

2、使用方法

参数说明:

  • viewer:cesium地球视图
  • id:唯一值
  • name:名称
  • position:坐标位置
  • style:html - html字符串代码
import CustomDiv from './customDiv.js'

const viewer = new Cesium.Viewer('viewerDiv')
const entity = {
  viewer: viewer ,
  id: '唯一id值'
  name: 'name值',
  position: Cesium.Cartesian3.fromDegrees(x,y,z),
  style: {
    html: '<div>测试文本</div>'
  }
}
new CustomDiv(entity)

回答: 要在Vue3中使用Cesium实现自定义框,你可以按照以下步骤进行操作。首先,在vite.config.js中配置vite-plugin-cesium插件,引入Cesium和vite-plugin-cesium,并将其添加到plugins中。\[1\]然后,安装Cesium和vite-plugin-cesium插件,可以使用npm命令进行安装。\[2\]接下来,创建一个子组件,使用template标签定义组件的模板,其中包含自定义框的HTML结构和样式。\[3\]在script setup标签中,使用defineProps定义props属性,用于接收父组件传递的数据。最后,在style标签中定义组件的样式。这样就可以实现自定义框了。 #### 引用[.reference_title] - *1* *2* [使用vue3+vite+cesium,在地图上显示图标,并且点击实体弹出消息框](https://blog.csdn.net/weixin_46212682/article/details/127348864)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Vue3+cesium添加自定义弹窗并设置随地图移动位置移动](https://blog.csdn.net/qq_43474235/article/details/129230006)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值