如何在JavaFX/ScalaFX中实现可滚动、可缩放的映射?

如何在JavaFX/ScalaFX中实现可滚动、可缩放的映射?,java,javafx,maps,tile,scalafx,Java,Javafx,Maps,Tile,Scalafx,我正在实现一个地图作为电脑游戏配件;它应该通过一些信息覆盖显示电脑游戏的地理位置。我想知道在JavaFX或者更准确地说是ScalaFX中实现这一点的最佳方法是什么 现在,我有一个非常幼稚的实现: 我有不同缩放级别的地图平铺。对于每个缩放级别,我在组中排列ImageViews并变换该组,以便所有缩放级别使用相同的坐标 具有相同坐标的单独组用于我的覆盖 我使用鼠标滚轮进行缩放,根据当前的缩放,只显示一个缩放级别 我将所有这些都打包到一个滚动窗格中 这有一些局限性: 所有缩放级别的所有平铺都将在

我正在实现一个地图作为电脑游戏配件;它应该通过一些信息覆盖显示电脑游戏的地理位置。我想知道在JavaFX或者更准确地说是ScalaFX中实现这一点的最佳方法是什么

现在,我有一个非常幼稚的实现:

  • 我有不同缩放级别的地图平铺。对于每个缩放级别,我在
    组中排列
    ImageView
    s并变换该组,以便所有缩放级别使用相同的坐标
  • 具有相同坐标的单独组用于我的覆盖
  • 我使用鼠标滚轮进行缩放,根据当前的缩放,只显示一个缩放级别
  • 我将所有这些都打包到一个
    滚动窗格中
这有一些局限性:

  • 所有缩放级别的所有平铺都将在启动时加载。这很难看,但在我的特定用例中有效
  • 仅当地图的边界有限时,使用滚动窗格才有效。同样,这里很好,但不是一般的地图
  • 用户体验很奇怪:滚动窗格用鼠标滚轮滚动,而大多数地图每次拖放都会滚动;大多数贴图都使用鼠标滚轮或“捏”进行缩放。在手势过程中,缩放保持“定位”(鼠标/触摸位置)至关重要。(能够随时准备好开箱即用的手机也不错,但这只是现在的梦想而已……)
  • 根据当前的缩放,叠加中的不同细节级别是可能的,但可能不是非常有效或方便
显然,这是我尝试过的方法之一。某个eppleton提到了一个图书馆,但它似乎没有得到维护,用来描述图书馆的博客也不存在了。此外,它似乎专注于提供一个游戏引擎,一个对游戏有意义的互动程序;贴图中的平铺只是一个图像,覆盖并不关心平铺的开始或结束位置

最后,我要问一个具体的问题:是否有任何库或技术可以满足我的需求?我对我的第三个要点(UX)特别感兴趣,但我想如果有合适的方法,它将涵盖第1点到第3点。

更新: 现在摆在桌面上的选项很少:



一种选择是不构建而是使用现有的开源项目,例如

这里是一个(过于简单的)。另见。否则,这个问题对于堆栈溢出来说可能有点过于宽泛(尽管其中有一些很好的信息)。如果你用一些简单的示例代码将其分解成单独的、非常具体的问题,你可能会更幸运地得到与你试图实现的目标更接近的更好答案。你可以使用带有OpenLayers映射的JavaFX WebView,在OpenLayers中进行分层,而不是在Java代码中绘制图像和层(JavaScript)。这就是我在项目中所做的。