当我点击地球时,我在获取位置(lat / lon)方面遇到了问题。
SO(和其他网站)上的任何地方都建议使用 getCurrentPosition 方法。
不幸的是,这会返回顶部可拾取对象的位置,该位置可以理解点击的点,因此如果不存在可选对象,则该方法只返回 null
当你使用任何一个例子进入状态栏时你可以看到它:即使鼠标在地球上,也会偶尔出现 Off Globe 标签(而不是lat / lon)出于这个原因!
有没有其他方法可以在不依赖可选对象的情况下获得该位置? 我正在考虑通过屏幕上的位置计算并使用几何图形,但这将非常困难,我不知道从哪里开始......
答案 0 :(得分:2)
我不确定您引用的是哪个getCurrentPosition()
,但WorldWindow#getCurrentPosition()
应该按照您的意愿行事。 javadocs说:
返回当前光标位置的当前纬度,经度和海拔高度,如果光标不在地球上,则返回null。
如果您的光标不与地球相交(即您点击背景中的星星),则不会有与该点击相关联的位置。这不依赖于可选择的对象,只是在点击时与光标相交的地球上。
以下示例适用于我:
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());
}