【问题标题】:How to implement a scrollable, zoomable map in JavaFX/ScalaFX?如何在 JavaFX/ScalaFX 中实现可滚动、可缩放的地图?
【发布时间】:2015-07-13 20:00:34
【问题描述】:

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

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

  • 我有不同缩放级别的地图图块。对于每个缩放级别,我将ImageViews 安排在Group 中并转换该组,以便所有缩放级别使用相同的坐标。
  • 具有相同坐标的单独组用于我的叠加层。
  • 我使用鼠标滚轮进行缩放,仅显示一个缩放级别,具体取决于当前缩放。
  • 我将所有这些都打包成一个ScrollPane

这有一些限制:

  • 在启动时加载所有缩放级别的所有图块。这很难看,但适用于我的特定用例。
  • 仅当地图的边界有限时,使用 ScrollPane 才有效。同样,这里很好,但不适用于一般地图。
  • UX 很奇怪:ScrollPane 用鼠标滚轮滚动,而大多数地图都是通过拖放滚动的;大多数地图使用鼠标滚轮缩放或捏缩放。缩放在手势过程中保留“锚点”(鼠标/触摸位置)至关重要。 (开箱即用的移动设备也很好,但这只是现在的梦想......)
  • 叠加层中的不同细节级别(取决于当前缩放)是可能的,但可能不是很有效或不方便。

显然,这是我尝试过的方法之一。 This question 提到了某个 eppleton 的一个库,但是好像没有维护,以前描述这个库的博客也不存在了。此外,它似乎专注于提供一个游戏引擎,一个对游戏有意义的图块;地图中的瓦片只是一张图像,叠加层并不关心瓦片从哪里开始或结束。

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

【问题讨论】:

  • 这是一个(简单的)sample of a pannable map。另见JavaFX correct scaling。否则这个问题对于堆栈溢出可能有点过于宽泛(尽管那里有一些很好的信息)。如果您使用一些最少的示例代码将其分解为单独的、非常具体的问题,您可能会更幸运地获得更符合您想要实现的目标的更好答案。
  • 您可以使用带有 OpenLayers 地图的 JavaFX WebView 并在 OpenLayers (JavaScript) 中进行分层,而不是在 Java 代码中绘制图像和图层。这就是我在mapjfx 项目中所做的。

标签: java javafx maps tile scalafx


【解决方案1】:

更新: 现在几乎没有更多的选择了:


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 2016-03-23
    • 2013-11-06
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多