CompassLayer 未出现在 WorldWind 中
Posted
技术标签:
【中文标题】CompassLayer 未出现在 WorldWind 中【英文标题】:CompassLayer not showing up in WorldWind 【发布时间】:2020-06-16 05:06:17 【问题描述】:我有一个WorldWindow
,上面有各种RenderableLayer
s。我想在运行时添加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(...)
手动设置罗盘位置
添加另一种类型的层(IconLayer
和 UserFacingIcon
),这工作正常,表明这不是我如何添加层或类似的东西的内在问题。
记录当前层以确保它被添加,使用:
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 中的主要内容,如果未能解决你的问题,请参考以下文章