相机移动结束事件
viewer.scene.camera.moveEnd.addEventListener(function() {
//实现对应的移动结束操作
});
鼠标移动事件,这个在判断当前地图的鼠标所在位置,获取鼠标位置的坐标,同时能够判断当前鼠标处,是否存在地图中的对象。
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
handler.setInputAction(function (movement) {
//鼠标移动的结束坐标,也有起始坐标
var pickedObject = scene.pick(movement.endPosition);
//判断当前鼠标处,是否有对象
if (
Cesium.defined(pickedObject) &&
pickedObject.id instanceof Cesium.Entity
) {
//实体对象的处理
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
//鼠标的点击事件,这个是判断数据点击所在的位置
var handler.setInputAction(function (movement) {
//此处就只有鼠标的点击位置了
var pickedObject = scene.pick(movement.position);
if (
//同样也是判断点击处的对象信息
Cesium.defined(pickedObject) &&
pickedObject.id instanceof Cesium.Entity
) {
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
在使用完成后,用以下的方式去移除不需要的事件。
//移除鼠标点击事件
handler.removeInputAction(
Cesium.ScreenSpaceEventType.LEFT_CLICK
);
//移除鼠标移动事件
handler.removeInputAction(
Cesium.ScreenSpaceEventType.MOUSE_MOVE
);
场景的实时渲染事件,每间隔很短的一个时间,就会执行一次事件,这个可以判断场景中的一些实时的对象情况。
viewer.scene.preRender.addEventListener(function() {});
Scene
viewer.scene.backgroundColor=Cesium.Color.TRANSPARENT;
viewer.scene.globe.baseColor=Cesium.Color.TRANSPARENT;
瓦片加载
tileset.readyPromise.then(zoomToTileset);
坐标转换
坐标拾取
let handlers = new Cesium.ScreenSpaceEventHandler(viewer.scene._imageryLayerCollection);
handlers.setInputAction(function (event) {
//获取相机射线
ray = viewer.scene.camera.getPickRay(event.endPosition);
//根据射线和场景求出在球面中的笛卡尔坐标
position1 = viewer.scene.globe.pick(ray,viewer.scene);
//获取该浏览器坐标的顶部数据
feature = viewer.scene.pick(event.endPosition);
// console.log(feature);
if (feature == undefined && position1) {
cartographic1 = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position1);
lon = Cesium.Math.toDegrees(cartographic1.longitude);
lat = Cesium.Math.toDegrees(cartographic1.latitude);
MouseHeight = 0;
}
else{
let cartesian = viewer.scene.pickPosition(event.endPosition);
if (Cesium.defined(cartesian) ){
//如果对象已定义,将度转为经纬度
let cartographic = Cesium.Cartographic.fromCartesian(cartesian);
lon = Cesium.Math.toDegrees(cartographic.longitude);
lat = Cesium.Math.toDegrees(cartographic.latitude);
MouseHeight = cartographic.height;//模型高度
}
}
// console.log(A,B,MouseHeight)
} , Cesium.ScreenSpaceEventType.MOUSE_MOVE);
Cesium Cartesian3 和经纬度以及屏幕坐标等之间的转换
1、经纬度转换为世界坐标
Cesium.Cartesian3.fromDegrees(longitude, latitude, height, ellipsoid, result)
var ellipsoid=viewer.scene.globe.ellipsoid;
var cartographic=Cesium.Cartographic.fromDegrees(lng,lat,alt);
var cartesian3=ellipsoid.cartographicToCartesian(cartographic);
2、世界坐标转换为经纬度
var ellipsoid=viewer.scene.globe.ellipsoid;
var cartesian3=new Cesium.cartesian3(x,y,z);
var cartographic=ellipsoid.cartesianToCartographic(cartesian3);
var lat=Cesium.Math.toDegrees(cartograhphic.latitude);
var lng=Cesium.Math.toDegrees(cartograhpinc.longitude);
var alt=cartographic.height;
Cartographic.fromCartesian
3、屏幕坐标和世界坐标相互转换
var pick1= new Cesium.Cartesian2(0,0);
var cartesian = viewer.scene.globe.pick(viewer.camera.getPickRay(pick1),viewer.scene);
Cesium.SceneTransforms.wgs84ToWindowCoordinates(scene, Cartesian3);