Svg 从WorldWind中的AWT画布坐标获取位置
我想编写一个转换器,用于将svg基本类型转换为多段线、多边形等worldwind形状 因为svg在画布上提供坐标,我需要将它们转换为位置,所以我在api中寻找一种方法来实现这一点 我看到点有Vec4,但我不确定它与画布坐标的关系 如果对于点x=100,y=100,我执行以下操作,这是否是正确的表示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);
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
,反之亦然