经纬志
首页 / Cesium / 使用示例

双击定位

双击地球上任意位置,相机带缓动飞过去并保持斜俯视角, 目标点留下一个带坐标的标记。飞行时长可以用滑杆调。

CesiumJS 1.121 · 更新 2026-10-27
源码与运行效果
运行效果

先摘掉默认行为

Viewer 内部已经给双击绑定了「选中要素并缩放过去」。不先移除的话, 自己的回调会和默认行为一起执行,表现为相机被拉近两次, 或者飞到的位置和双击点对不上。

移除的入口是 viewer.cesiumWidget.screenSpaceEventHandler, 注意不是自己新建的那个 handler。移除之后再绑到自己的 handler 上。

相机参数怎么配

destination 的高度取 2600 米,是一个街区尺度的视距; orientation.pitch 取 -42 度,既能看到地面细节又保留一点透视。 maximumHeight: 9000000 让跨洲飞行时相机先抬高到九千公里再落下, 避免长距离飞行贴着地面掠过。

可调参数

位置改什么效果
飞行时长滑杆0.5 到 5 秒duration 实时生效,下一次双击开始用
lat - 0.012去掉偏移相机落在目标正上方,失去斜视效果
pitch: -42改成 -78接近正俯视,适合看面状数据
maximumHeight删掉飞行路径直接连过去,长距离会穿过地面
duration设 0瞬间跳转,没有缓动

双击球体以外的区域没有反应。pickEllipsoid 在射线打不到球体时 返回 undefined,代码里直接 return。想在这种情况下也给出反馈, 应该在面板上提示「双击位置在地球之外」,而不是让功能静默失效。

与 flyTo 的关系

本质就是一次带参数的 flyTo。区别在于视角是从点击位置推出来的, 而不是固定值。做「搜索结果点击定位」时逻辑相同:拿到目标经纬度后 用同一套参数飞过去,把 heading 换成业务需要的朝向即可。