我正在将Java worldwind广泛用于在矩形扇区上显示数据的应用程序。我希望能够将此数据拖到全球各地。如SurfaceCircle所示,WorldWind中已经针对诸如Movable(实现BasicDragger)之类的形状实现了这种行为。
我正在尝试为AnalyticSurface实现这种行为(不实现Moveable)。问题是DragSelectEvent .getTopObject返回一个受保护的静态类,称为AnalyticSurface.ClampToGroundSurface,而我的AnalyticSurface没有公共访问器。
总结一下:我创建了一个对象,并在3d地球渲染中显示了该对象,并且在此图形表示形式上发起的拖动事件返回了一个对象,该对象没有我自己的对象的公共访问器,因此无法按照鼠标行为对其进行修改。
在WorldWind方面,这似乎是一个体系结构错误。不使用反射,是否有办法访问链接到我的拖动事件的我自己的对象?
最佳答案
您所需要做的就是扩展AnalyticSurface
并实现Movable
,那么您可以只使用BasicDragger
而不是编写自己的选择侦听器。
public class DraggableAnalyticSurface extends AnalyticSurface implements Movable {
@Override
public Position getReferencePosition() {
return this.referencePos;
}
@Override
public void move(Position position) {
// not needed by BasicDragger
}
@Override
public void moveTo(Position position) {
final double latDelta = this.referencePos.getLatitude().degrees
- position.getLatitude().degrees;
final double lonDelta = this.referencePos.getLongitude().degrees
- position.getLongitude().degrees;
final double newMinLat = this.sector.getMinLatitude().degrees - latDelta;
final double newMinLon = this.sector.getMinLongitude().degrees - lonDelta;
final double newMaxLat = this.sector.getMaxLatitude().degrees - latDelta;
final double newMaxLon = this.sector.getMaxLongitude().degrees - lonDelta;
this.setSector(Sector.fromDegrees(newMinLat, newMaxLat, newMinLon, newMaxLon));
}
}