Cesium-Examples/examples/cesiumEx/1.4、屏幕、场景、地表坐标.html
2025-06-12 14:10:21 +08:00

79 lines
3.5 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!--********************************************************************
* by jiawanlong
*********************************************************************-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<link rel="stylesheet" href="./../../libs/cesium/Cesium1.98/Widgets/widgets.css">
<script type="text/javascript" src="./../../libs/cesium/Cesium1.98/Cesium.js"></script>
<script src="./latlng.js"></script>
</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.eyJqdGkiOiIyMjBhMzcxMC0wNjBiLTRmYjItYjY1MC0wMzAwMzMyMGUyMmEiLCJpZCI6MzAzNzc3LCJpYXQiOjE3NDc2Mzk0NTV9.E_90aKtVdzRGlU2z48VwJ4mWvl-uuDkfQBCOO6zbzn4'
const viewer = new Cesium.Viewer('map', {});
// 开启帧率
viewer.scene.debugShowFramesPerSecond = true;
// 加载离线地形
// viewer.terrainProvider = new Cesium.CesiumTerrainProvider({
// url: 'http://localhost/dem_30m/',
// });
// 根据xy可以获得高度贴地用
// var cartographic=Cesium.Cartographic.fromDegrees(88.01574604728957, 31.464332955079115);
// var posi = new Cesium.Cartographic(cartographic.longitude, cartographic.latitude)
// var height21 =viewer.scene.globe.getHeight(posi)
var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function (movement) {
// 1、屏幕坐标
console.log(movement.position);
// 2、椭球面坐标不包含地形、模型、倾斜摄影表面。
var position = viewer.scene.camera.pickEllipsoid(movement.position, viewer.scene.globe.ellipsoid);
console.log(position);
// 经纬度坐标
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)
// 3、场景坐标包含了地形、倾斜摄影表面、模型的坐标
// 只有在开启地形深度检测viewer.scene.globe.depthTestAgainstTerrain = true且不使用默认地形时是准确的
var position = viewer.scene.pickPosition(movement.position);
console.log(position);
// 4、地表坐标这里是地球表面的世界坐标包含地形不包括模型、倾斜摄影表面。
var ray = viewer.camera.getPickRay(movement.position);
var position = viewer.scene.globe.pick(ray, viewer.scene);
console.log(position);
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
// 扩展获取当前鼠标移动的位置
handler.setInputAction(function (movement) {
// console.log(viewer.scene, movement.endPosition, null)
// 获取当前坐标
console.log(latlng.getCurrentMousePosition(viewer.scene, movement.endPosition, null))
// 获取当前坐标并转换为经纬度
console.log(latlng.Cartesian3To(latlng.getCurrentMousePosition(viewer.scene, movement.endPosition, null), viewer).latlng)
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
</script>
</body>
</html>