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)