目录
一、(获取Cartesian2)
二、 (获取Cartesian3)
三、(穿透拾取,获取所有对象)
四、(获取加载地形后的经纬度(弧度)和高程)
五、
六、 拾取图层
在 Cesium 的场景组织中,有那么几个容器构成了三维世界:
Scene:包括了 Globe,除了 Globe 的元素外,还加上了 Primitive、Entity、DataSource 等三维物件
Globe:包括了 Ellipsoid,还包括了所有的影像图层、地形瓦片,可以算是椭球体上面的皮肤
Ellipsoid:一个数学公式所定义的旋转椭球体,代表一个纯粹的地球椭球形状
鼠标点击获取对象,整体就是再scene的canvas对象上进行操作,不一样的就是根据不同的数据情况和场景情况,需要不同的操作,整体的操作流程如下:
var handler = new ();
(function (event) {
//不同场景的操作代码
}, .LEFT_CLICK); //大多数为左键点击事件操作
一、(获取Cartesian2)
使用场景:通过坐标位置,拾取 Entity
实体、 Primitive(图元)
、3D-Tiles
(Cesium3DTileFeature
)瓦片数据、数据源datasource对象。拾取后,可以用于改变对象的属性参数。
注意: 只能获取一个对象,并且获取的是最顶部的对象。如果拾取点没有对象,则为
undefined
示例代码:
let handler = new ();
(function (event) {
let pickedObject = ();
if (!(pickedObject)) {
("没有拾取到空间对象")
return;
}
(pickedObject)
}, .LEFT_CLICK)
二、 (获取Cartesian3)
使用场景:拾取对应位置的世界坐标,适用于模型表面位置的选取,拾取三维物体的坐标等。
注意: 一定要开启深度检测( = true;
),否则在没有3dTile模型的情况下,会出现空间坐标不准的问题,如果不开启深度检测,只能在3dTile模型上获取准确的空间坐标。
与区别:见下面
示例代码:
var handler = new ();
(function (event) {
var position = ();
("三维空间坐标:", positionposition);
}, .LEFT_CLICK);
//获取坐标转经纬度
let handler = new ();
(function (event) {
let earthPosition = ();
if ((earthPosition)) {
let cartographic = (earthPosition);
let lon = ().toFixed(5);
let lat = ().toFixed(5);
let height = (2);
(earthPosition, {
lon: lon,
lat: lat,
height: height,
});
}
}, .LEFT_CLICK);
三、(穿透拾取,获取所有对象)
使用场景:穿透拾取,是从当前拾取位置获取所有对象的对象列表(entity的集合),列表按其在场景中的视觉顺序(从前到后)排序(通过for循环可以获取当前坐标下的所有entity)。
注意: drillPick
和 Pick
不同,Pick
只能拾取一个对象,而 drillPick
可以拾取多个对象,并且 drillPick
可以设置 limit
参数,limit
参数可以控制获取几个对象,超出的就不获取了。
示例代码:
var handler = new ();
(function (event) {
var pickedObjectArrays = (,5); //最多获取前5个对象
// pickedObjectArrays 是个数组,使用for循环 可以拿到所有entity
}, .LEFT_CLICK);
四、(获取加载地形后的经纬度(弧度)和高程)
使用场景:此方法无论是否存在地质,无论是否开启地质的深度测试,获取与地形的笛卡尔坐标都是准确的,因为此方法只是与地形的求交,不包括模型、倾斜摄影表面。一般用于获取点击处地球表面的世界坐标(有地形),注意:不包括模型、倾斜摄影表面。找到射线与渲染的地球表面之间的交点(射线必须以世界坐标给出)返回的是世界坐标。一般用来获取加载地形后的经纬度和高程。
注意: 最好也开启深度检测( = true;
)。
与区别:
-
只能求交地形,
结果相对稳定准确,不论地形深度检测开启与否,不论加载的是默认地形还是别的地形数据 -
不仅可以求交地形,还可以求交除地形以外其他所有写深度的物体。只有在开启地形深度检测,且不使用默认地形时是准确的
示例代码:
var handler = new ();
(function (event) {
var myray = ();
var myposition = (myray, );
("当前场景坐标:", myposition);
}, .LEFT_CLICK);
五、
使用场景:获取相机视角下鼠标点的对应椭球面位置。接受一个必选的屏幕坐标,返回一个三维世界坐标 Cartesian3。主要用于获取椭球面的位置。通过一个必选的屏幕坐标,获取椭圆球体表面的一个Cartesian3
坐标。适用于裸球表面的选取,是基于数学模型的椭圆球体。
注意: pickEllipsoid
在加载地形的情况下有误差,地形凹凸程度越大,误差越大,所以不要用来获取有地形的坐标。使用此方法,关掉深度测试
示例代码:
var handler = new ();
(function (event) {
var position = (, );
("获取到的坐标:", position);
}, .LEFT_CLICK);
六、 拾取图层
使用场景:获取影像图层信息。
注意:
(ray,scene)→Promise.<Array.<ImageryLayerFeatureInfo >>
示例代码:
let handler = new ();
((event) => {
let pickRay = ();
let ImageryLayerFeatures = (pickRay, );
if (!(ImageryLayerFeatures)) {
('没有影像图层要素信息选中');
} else {
(ImageryLayerFeatures, function (LayerFeatures) {
//获取到图层数据
if ( > 0) {
(LayerFeatures)
}
});
}
}, .LEFT_CLICK);