gpt4 book ai didi

java - 在 WorldWind 中通过鼠标单击的精确位置

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:28:18 27 4
gpt4 key购买 nike

当我点击地球时,我在获取位置(纬度/经度)时遇到了问题。

SO(和其他网站)上的任何地方都建议使用 getCurrentPosition 方法。

不幸的是,这会返回包含单击点的顶部可拾取对象的位置,因此如果那里没有可拾取对象,该方法将返回 null

您可以在使用任何示例时进入状态栏时看到它:即使鼠标在地球上,也会不时出现 Off Globe 标签(而不是纬度/经度)正是出于这个原因!

有没有其他不依赖可拾取对象获取位置的方法?我正在考虑通过屏幕上的位置和使用几何来计算,但这会非常困难,我不知道从哪里开始......

最佳答案

我不确定您指的是哪个 getCurrentPosition(),但是 WorldWindow#getCurrentPosition() 应该可以满足您的要求。 javadocs说:

Returns the current latitude, longitude and altitude of the current cursor position, or null if the cursor is not on the globe.

如果您的光标不与地球相交(即您点击背景中的星星),则不会有与点击相关联的位置。这不依赖于可拾取的对象,仅依赖于点击时与光标相交的地球。

以下示例适用于我:

public class PositionListener implements MouseListener {
private final WorldWindow ww;

public PositionListener(WorldWindow ww) {
this.ww = ww;
}
@Override
public void mouseClicked(MouseEvent event) {
try {
System.out.println(ww.getCurrentPosition().toString());
} catch (NullPointerException e) {
// click was not on the globe
}
}
//...
}

如果 getCurrentPosition() 不适合您,这是一个替代方案:

@Override
public void mouseClicked(MouseEvent event) {
Point p = event.getPoint();
Vec4 screenCoords = new Vec4(p.x,p.y);
Vec4 cartesian = ww.getView().unProject(screenCoords);
Globe g=ww.getView().getGlobe();
Position pos=g.computePositionFromPoint(cartesian);
System.out.println(pos.toString());
}

关于java - 在 WorldWind 中通过鼠标单击的精确位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35088715/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com