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

Svg 从WorldWind中的AWT画布坐标获取位置,svg,worldwind,Svg,Worldwind,我想编写一个转换器,用于将svg基本类型转换为多段线、多边形等worldwind形状 因为svg在画布上提供坐标,我需要将它们转换为位置,所以我在api中寻找一种方法来实现这一点 我看到点有Vec4,但我不确定它与画布坐标的关系 如果对于点x=100,y=100,我执行以下操作,这是否是正确的表示 Vec4 vec=new Vec4(x,y,0.0f); Globe g=view.getGlobe(); Position p=g.computePositionFromPoint(vec);

我想编写一个转换器,用于将svg基本类型转换为多段线、多边形等worldwind形状

因为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。

Globe。computePositionFromPoint(vec)
将笛卡尔坐标作为输入,而不是屏幕坐标。要从屏幕坐标转到您想要的位置,请执行以下操作:

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

更好的方法是:

Point screenPoint = dragContext.getPoint();
View view = dragContext.getView();

double latitude = view.computePositionFromScreenPoint(screenPoint.getX(), screenPoint.getY()).getLatitude().degrees;
double longitude = view.computePositionFromScreenPoint(screenPoint.getX(), screenPoint.getY()).getLongitude().degrees;
Position objectPosition = new Position(LatLon.fromDegrees(latitude, longitude), 0);

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

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


关于
地球仪#computePointFromPosition

位置
-纬度、经度、高度位置,高度单位为MSL(海拔高度)

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

正如Chris提到的,
Globe#computePointFromPosition()
Globe#computePointFromPosition()
使用您的地球仪作为参考框架,从
位置切换到笛卡尔
Vec4
,反之亦然