Cesium-Examples/examples/cesiumEx/1.6、事件.html

129 lines
5.2 KiB
HTML
Raw Normal View History

2025-03-11 08:25:45 +00:00
<!--********************************************************************
* by jiawanlong
*********************************************************************-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
2025-03-19 03:00:22 +00:00
<link rel="stylesheet" href="./../../libs/cesium/Cesium1.98/Widgets/widgets.css">
<script type="text/javascript" src="./../../libs/cesium/Cesium1.98/Cesium.js"></script>
2025-03-11 08:25:45 +00:00
</head>
<body style="margin: 0; overflow: hidden; background: #fff; width: 100%; height: 100%; position: absolute; top: 0">
<div id="map" style="margin: 0 auto; width: 100%; height: 100%"></div>
<script type="text/javascript">
Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI3ZjQ5ZGUzNC1jNWYwLTQ1ZTMtYmNjYS05YTY4ZTVmN2I2MDkiLCJpZCI6MTE3MTM4LCJpYXQiOjE2NzY0NDUyODB9.ZaNSBIfc1sGLhQd_xqhiSsc0yr8oS0wt1hAo9gbke6M'
const viewer = new Cesium.Viewer('map', {});
// 开启帧率
viewer.scene.debugShowFramesPerSecond = true;
// 加载离线地形
// viewer.terrainProvider = new Cesium.CesiumTerrainProvider({
// url: 'http://localhost/dem_30m/',
// });
// 0、取消默认的单击和双击事件右上角弹窗很丑
viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
// https://blog.csdn.net/u010358183/article/details/121610901
// 1、屏幕空间事件鼠标和键盘输入相关的事件
// 鼠标事件
// 键盘事件
// 2、相机事件
// 3、场景触发事件
// 1、-----------屏幕空间事件(鼠标和键盘输入相关的事件)-----------------------
// 左单击
let handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function (event) {
console.log('左键单击', event.position);
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
// shift + 左单击
handler.setInputAction(function (event) {
console.log('shift + 左键单击', event.position);
}, Cesium.ScreenSpaceEventType.LEFT_CLICK, Cesium.KeyboardEventModifier.SHIFT);
handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK, Cesium.KeyboardEventModifier.SHIFT);
// 2、--------------相机事件(更改默认操作)----------
viewer.scene.screenSpaceCameraController.tiltEventTypes = [
Cesium.CameraEventType.RIGHT_DRAG,
Cesium.CameraEventType.PINCH,
{
eventType: Cesium.CameraEventType.LEFT_DRAG,
modifier: Cesium.KeyboardEventModifier.CTRL,
},
{
eventType: Cesium.CameraEventType.RIGHT_DRAG,
modifier: Cesium.KeyboardEventModifier.CTRL,
},
];
viewer.scene.screenSpaceCameraController.zoomEventTypes = [
Cesium.CameraEventType.MIDDLE_DRAG,
Cesium.CameraEventType.WHEEL,
Cesium.CameraEventType.PINCH,
];
//----------- 3、场景触发事件(相机停止移动时触发,二三维联动)-------------------------
function callbackFunc(event) {
console.log(event)
}
viewer.camera.moveEnd.addEventListener(callbackFunc);
// viewer.camera.moveEnd.removeEventListender(callbackFunc);
// 常见的应用
const redPolygon = viewer.entities.add({
name: "贴地面",
polygon: {
hierarchy: Cesium.Cartesian3.fromDegreesArray([
-115.0,
37.0,
-115.0,
32.0,
-107.0,
33.0,
-102.0,
31.0,
-102.0,
35.0,
]),
material: Cesium.Color.RED.withAlpha(0.5),
},
data: {
name: 'hello'
}
});
handler.setInputAction(function (clickEvent) {
// 经纬度坐标
var position = viewer.scene.camera.pickEllipsoid(clickEvent.position, viewer.scene.globe.ellipsoid);
var cartesian3 = new Cesium.Cartesian3(position.x, position.y, position.z)
var cartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian3);
var lat = Cesium.Math.toDegrees(cartographic.latitude);
var lng = Cesium.Math.toDegrees(cartographic.longitude);
console.log(lng, lat)
console.log(cartesian3)
// 获取被点击的实体
var ray1 = viewer.camera.getPickRay(clickEvent.position);
var cartesian = viewer.scene.globe.pick(ray1, viewer.scene);
var pick = viewer.scene.pickPosition(clickEvent.position);
var pickEd = viewer.scene.pick(clickEvent.position);
if (pickEd && pick) {
console.log(pickEd.id.data)
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK)
</script>
</body>
</html>