我的需求,首先显示一个billboard
,点击billboard
后,在旁边显示一个div
面板,并且该面板随着地图拖拽也能进行相对运动。
概要实现步骤:
1、自定义div
面板,面板需要设置id
值
2、使用我自己定义的函数,进行定位。
export function htmlFixed(viewer, domId) {const htmlOverlay = document.getElementById(domId);const scratch = new Cesium.Cartesian2();viewer.scene.preRender.addEventListener(function () {let position = Cesium.Cartesian3.fromDegrees(118.6672441346, 32.0120094599, 100);let canvasPosition = viewer.scene.cartesianToCanvasCoordinates(position, scratch);if (Cesium.defined(canvasPosition)) {htmlOverlay.style.top = canvasPosition.y + 'px';htmlOverlay.style.left = canvasPosition.x + 'px';}});
}
其实原理就是根据定位锚点
在cesium地球
中的位置,计算出面板在canvas
中的相对位置,最后使用style
进行定位。
官方参考demo
https://cesiumjs.org/Cesium/Build/Apps/Sandcastle/?src=HTML%20Overlays.html&label=Tutorials