在铯地图中获取中心
Get center in Cesium Map
我想知道Cesium Map当前的中心是什么
我尝试使用 viewer.camera.position
,但它始终提供相同的 z 值(x:16921255.101297915,y:5578093.302269477,z:12756274),我不确定 x 和 y 值。它们以米为单位吗?
非常感谢!
编辑:解决方案
在我得到的所有帮助(谢谢!)下,我把它放在一起:
getPosition(){
if (viewer.scene.mode == 3) {
var windowPosition = new Cesium.Cartesian2(viewer.container.clientWidth / 2, viewer.container.clientHeight / 2);
var pickRay = viewer.scene.camera.getPickRay(windowPosition);
var pickPosition = viewer.scene.globe.pick(pickRay, viewer.scene);
var pickPositionCartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(pickPosition);
console.log(pickPositionCartographic.longitude * (180 / Math.PI));
console.log(pickPositionCartographic.latitude * (180 / Math.PI));
} else if (viewer.scene.mode == 2) {
var camPos = viewer.camera.positionCartographic;
console.log(camPos.longitude * (180 / Math.PI));
console.log(camPos.latitude * (180 / Math.PI));
}
};
此函数给出 longitude/latitude 度数坐标。
viewer.camera.position 给出相机在相对于地球中心的 X、Y、Z 坐标中的位置(以米为单位)。
根据您使用的场景模式不同,方法不同:
SCENE3D:
为了查看相机在看什么,您需要获得相机拾取光线和贴图的交点。
function getMapCenter() {
var windowPosition = new Cesium.Cartesian2(viewer.container.clientWidth / 2, viewer.container.clientHeight / 2);
var pickRay = viewer.scene.camera.getPickRay(windowPosition);
var pickPosition = viewer.scene.globe.pick(pickRay, viewer.scene);
var pickPositionCartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(pickPosition);
console.log(pickPositionCartographic.longitude * (180/Math.PI));
console.log(pickPositionCartographic.latitude * (180/Math.PI));
}
基于this thread.
同时尝试检查相机是否在看地图,而不是天空。
SCENE2D:
这是一个简单的 2D 视图,相机直接指向下方。
来自文档:
2D mode. The map is viewed top-down with an orthographic projection
var camPos = viewer.camera.positionCartographic;
console.log(camPos.longitude * (180/Math.PI));
console.log(camPos.latitude * (180/Math.PI));
剩下的情况是2.5D 或COLUMBUS_VIEW
我想知道Cesium Map当前的中心是什么
我尝试使用 viewer.camera.position
,但它始终提供相同的 z 值(x:16921255.101297915,y:5578093.302269477,z:12756274),我不确定 x 和 y 值。它们以米为单位吗?
非常感谢!
编辑:解决方案
在我得到的所有帮助(谢谢!)下,我把它放在一起:
getPosition(){
if (viewer.scene.mode == 3) {
var windowPosition = new Cesium.Cartesian2(viewer.container.clientWidth / 2, viewer.container.clientHeight / 2);
var pickRay = viewer.scene.camera.getPickRay(windowPosition);
var pickPosition = viewer.scene.globe.pick(pickRay, viewer.scene);
var pickPositionCartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(pickPosition);
console.log(pickPositionCartographic.longitude * (180 / Math.PI));
console.log(pickPositionCartographic.latitude * (180 / Math.PI));
} else if (viewer.scene.mode == 2) {
var camPos = viewer.camera.positionCartographic;
console.log(camPos.longitude * (180 / Math.PI));
console.log(camPos.latitude * (180 / Math.PI));
}
};
此函数给出 longitude/latitude 度数坐标。
viewer.camera.position 给出相机在相对于地球中心的 X、Y、Z 坐标中的位置(以米为单位)。
根据您使用的场景模式不同,方法不同:
SCENE3D:
为了查看相机在看什么,您需要获得相机拾取光线和贴图的交点。
function getMapCenter() {
var windowPosition = new Cesium.Cartesian2(viewer.container.clientWidth / 2, viewer.container.clientHeight / 2);
var pickRay = viewer.scene.camera.getPickRay(windowPosition);
var pickPosition = viewer.scene.globe.pick(pickRay, viewer.scene);
var pickPositionCartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(pickPosition);
console.log(pickPositionCartographic.longitude * (180/Math.PI));
console.log(pickPositionCartographic.latitude * (180/Math.PI));
}
基于this thread.
同时尝试检查相机是否在看地图,而不是天空。
SCENE2D:
这是一个简单的 2D 视图,相机直接指向下方。
来自文档:
2D mode. The map is viewed top-down with an orthographic projection
var camPos = viewer.camera.positionCartographic;
console.log(camPos.longitude * (180/Math.PI));
console.log(camPos.latitude * (180/Math.PI));
剩下的情况是2.5D 或COLUMBUS_VIEW