Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cesium-viewer 的 camera 在 sceneMode 2 下的问题 #27

Closed
z4none opened this issue Nov 19, 2019 · 3 comments
Closed

cesium-viewer 的 camera 在 sceneMode 2 下的问题 #27

z4none opened this issue Nov 19, 2019 · 3 comments
Labels
bug Something isn't working

Comments

@z4none
Copy link
Contributor

z4none commented Nov 19, 2019

当设置 viewer 为 2D 模式时,如果想通过以下方式实时获取 camera 位置,会导致视角卡在错误的位置

<cesium-viewer :logo="false" :sceneMode="2" :camera.sync="camera">
  <imagery-layer :contrast="0.8" :saturation="0.8" :brightness="0.5">
    <urltemplate-imagery-provider :url="url"></urltemplate-imagery-provider>
  </imagery-layer>
</cesium-viewer>
<div>
  camera: {{ camera }}
</div>

经分析是由于组件 emit 的 camera 数据不兼容 2D 模式导致的的
目前可以通过手动处理 @update:camera 来避免,希望能在组件中对 2D 的摄像头位置增加判断

<cesium-viewer :logo="false" :sceneMode="2" :camera="camera" @update:camera="onUpdateCamera">
  <imagery-layer :contrast="0.8" :saturation="0.8" :brightness="0.5">
    <urltemplate-imagery-provider :url="url"></urltemplate-imagery-provider>
  </imagery-layer>
</cesium-viewer>
<div>
  camera: {{ camera }}
</div>

...
methods: {
  onUpdateCamera() {
      const camPos = viewer.camera.positionCartographic;
      this.camera.position = {
        lng: camPos.longitude * (180 / Math.PI),
        lat: camPos.latitude * (180 / Math.PI),
        height: camPos.height
      }
    },
}
@zouyaoji zouyaoji added the bug Something isn't working label Nov 19, 2019
@zouyaoji zouyaoji pinned this issue Nov 19, 2019
@zouyaoji zouyaoji unpinned this issue Nov 19, 2019
@zouyaoji
Copy link
Owner

zouyaoji commented Nov 19, 2019

问题我重现了,但我看相机结构2D和3D应该差不多,查了一下好像是Cesium已知缺陷,而且很久了都没解决: CesiumGS/cesium#4246 (comment)https://github.com/AnalyticalGraphicsInc/cesium/issues/2469#issue-56582956。

我再看看有没有解决方案,不行的话避免一下吧。像你这个改是没问题的,但是我还没搞清楚为啥这样就可以了,我再学习一下先。。。

@zouyaoji
Copy link
Owner

额 好像明白了,是因为 $emit 出来的相机位置不正确,然后设置的时候设了一个错误的位置,然后乱串了吧。

@zouyaoji
Copy link
Owner

Cesium.Cartographic.fromCartesian(viewer.camera.position) 这个方法在二维下面得到的结果不对,具体为啥不对我没去搞明白- -
参考你的代码用 viewer.camera.positionCartographic二维三维都正确,已修改,谢谢反馈。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants