CompassLayer 未出现在 WorldWind 中

Posted

技术标签:

【中文标题】CompassLayer 未出现在 WorldWind 中【英文标题】:CompassLayer not showing up in WorldWind 【发布时间】:2020-06-16 05:06:17 【问题描述】:

我有一个WorldWindow,上面有各种RenderableLayers。我想在运行时添加CompassLayer

try 

    String compassPath = "images" + File.separator + "CompassRoseWhite.png";
    String compassImg  = new ClassPathResource(compassPath).getURL().toString();
    compass            = new CompassLayer(compassImg);
    worldWindow.getModel().getLayers().add(compass);

 catch (IOException e)  e.printStackTrace(); 

很遗憾,我在屏幕上的任何地方都看不到指南针。我试过了:

使用compass.setLocationCenter(...)手动设置罗盘位置 添加另一种类型的层(IconLayerUserFacingIcon),这工作正常,表明这不是我如何添加层或类似的东西的内在问题。

记录当前层以确保它被添加,使用:

logger.debug("Cur layers = " + worldWindow.getModel().getLayers().toString());

我回来了:

Cur 图层 = 星星、大气、Bing Imagery VASCustom、比例尺、指南针、视图控件、可渲染、可渲染、可渲染、可渲染、指南针,

如何有效地调试我的不可见指南针问题?谢谢!

更新

我已经简化了我的代码以使用现有 compassLayer,并且我确定问题在于我使用setLocationCenter,即,

compass = (CompassLayer) worldWindow.getModel().getLayers().getLayerByName("Compass");

// this works ...           
// compass.setPosition(AVKey.SOUTHEAST);
// compass.setLocationOffset(new Vec4(0, 20));

// this does not work ...  
compass.setLocationCenter(worldWindow.getView().getCenterPoint());

// this part works fine
String compassPath = "images" + File.separator + "CompassRoseWhite.png";
String compassImg  = new ClassPathResource(compassPath).getURL().toString();
compass.setIconFilePath(compassImg);
compass.setEnabled(true);

所以我需要确定的是setLocationCenter 逻辑到底出了什么问题。

【问题讨论】:

【参考方案1】:

我的代码有两个主要问题。

    我已经有一个compassLayer 并且应该使用它而不是制作一个新的,即,

    compass = (CompassLayer) worldWindow.getModel().getLayers().getLayerByName("Compass");

    当您使用computePointFromPosition() 时,您将返回绝对笛卡尔坐标。然后您需要使用View.project() 将这些转换为像素坐标。最后你需要用当前的View 来抵消。即,

Vec4 vecOwnship = worldWindow.getModel()
                             .getGlobe()
                             .computePointFromPosition(ownshipPosition);
Vec4 vecScreen  = worldWindow.getView().project(vecOwnship);
Rectangle viewPort = worldWindow.getView().getViewport();
compass.setLocationCenter(new Vec4(viewPort.x + vecScreen.x, viewPort.y + vecScreen.y, 0));

修复这些问题解决了问题,现在指南针出现了。

【讨论】:

我的解决方案部分归功于this source。

以上是关于CompassLayer 未出现在 WorldWind 中的主要内容,如果未能解决你的问题,请参考以下文章

未找到文件错误消息未出现在 Code Igniter 中

出现取消按钮,但完成按钮未出现在 uitoolbar 中

论坛出现:“jquery未定义”错误提示,怎样解决?

图像视图未出现在屏幕上

Azure Data Studio:未找到新安装扩展的设置/未出现在设置中

图像未出现在 hostgator (cPanel) 中但出现在 localhost