我想编写一个变换器,用于将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。
答案 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
,反之亦然,使用地球作为参考框架。