从WorldWind的AWT画布坐标获取位置

时间:2015-04-06 11:13:32

标签: svg worldwind

我想编写一个变换器,用于将svg基本类型转换为世界风形状,如折线,多边形等。

由于svg在画布上给出了坐标,我需要将它们转换为位置,我正在寻找api中可以做到这一点的方法。

我看到有点Vec4,但我不确定它与画布坐标的关系。

如果对于点x = 100,y = 100,我会做以下

是否是正确的表示
Vec4 vec=new Vec4(x,y,0.0f);
Globe g=view.getGlobe();

Position p=g.computePositionFromPoint(vec);

此对应位置将是屏幕上点(x = 100,y = 100)的位置。如果我将鼠标设为x = 100且y = 100,则当前视图的位置应为p。

3 个答案:

答案 0 :(得分:2)

Globe.computePositionFromPoint(vec)将笛卡尔坐标作为输入,而不是屏幕坐标。要从屏幕坐标转到位置,你需要这样的东西:

Vec4 screenCoords = new Vec4(x,y);
Vec4 cartesian = view.unProject(screenCoords);
Globe g=view.getGlobe();
Position p=g.computePositionFromPoint(cartesian);

答案 1 :(得分:0)

更好的方法是:

<div class="container">
  <div class="section1">Section 1</div>
  <div class="section2">Section 2</div>
  <div class="section3">Section 3</div>
</div>

然后您可以将对象的位置设置为objectPosition。

答案 2 :(得分:0)

如果你想从画布转到3D,你可能正在寻找View#computeRayFromScreenPoint(double, double)。这将为您提供从眼睛到画布上给定像素的光线(以Vec4格式)。您必须将此光线与某些光线相交以生成有意义的3D点,因为每个像素都是空间中的无限线。

关于Globe#computePointFromPosition

Position - 纬度,经度,海拔位置,海拔高度为MSL(海拔高度以上)

Vec4 - 只是一个方向向量(通常用于笛卡尔坐标)。对于笛卡尔坐标系,z轴通过0deg / 0deg lat / lon,x轴到0deg / 90deg,y轴通过北极从地球出来。

正如克里斯提到的那样,Globe#computePointFromPosition()Globe#computePointFromPosition()Position切换到笛卡尔Vec4,反之亦然,使用地球作为参考框架。