2

我想编写一个转换器,用于将 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。

4

3 回答 3

2

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

Vec4 screenCoords = new Vec4(x,y);
Vec4 cartesian = view.unProject(screenCoords);
Globe g=view.getGlobe();
Position p=g.computePositionFromPoint(cartesian);
于 2015-07-17T22:23:00.703 回答
0

更好的方法是:

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。

于 2017-03-15T19:51:51.193 回答
0

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


关于Globe#computePointFromPosition

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

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

正如 Chris 所提到的Globe#computePointFromPosition(),使用地球作为参考系,Globe#computePointFromPosition()从 a 切换Position到笛卡尔Vec4,反之亦然。

于 2017-04-07T17:28:06.057 回答