QT QML - 更改 Mapbox 字体大小

QT QML - Changing Mapbox font size

我正在使用带有 MapboxGl 插件的 QT 5.12.4,我正在尝试弄清楚如何使街道名称以更大的字体显示,但我对如何指定文本大小感到非常困惑。我需要动态更改大小,因此使用预定义样式将无法满足要求。

两个令人困惑的方面是 Mapbox 的文档必须翻译成 "MapParameters" 用于 QML,而我对更改文本大小到底需要什么一无所知。在阅读文档和使用 mapbox studio 之间,我似乎需要修改 "road-label" 层。如果有人有一些关于如何更改文本大小的示例代码,如果您能分享,我将不胜感激。

https://docs.mapbox.com/mapbox-gl-js/style-spec/#layout-symbol-text-size

  MapParameter 
  {
      type: "layout"

      property var layer: "road-label"
      property var textSize: 20
  }

你所做的看起来是正确的。您需要定义类型为 layoutMapParameter,因为 text-size 是 Mapbox 样式规范中的布局 属性。我们不能在 QML 变量名上使用 -,所以我们将其驼峰命名为 textSize。之后你可以绑定 textSize 到你想要的任何东西。

您需要确保在添加 MapParameter 时样式上存在图层 road-label

我解决了问题,关键是为我使用的预定义样式 (navigation-preview-day-v2) 获取 JSON。 post 向我展示了如何获得预定义的样式:

对于 navigation-preview-day-v2 样式,URL 将是: https://api.mapbox.com/styles/v1/mapbox/navigation-preview-day-v2?access_token=(your 令牌在这里)

运行 JSON 通过格式化程序,以便您可以读取它并找到呈现街道名称的图层。本例中有四层:

  • 路标小
  • 中等道路标签
  • 路标大
  • 道路标签特大

这里是如何在 QML 中为字体大小形成 MapParameter 的示例:

MapParameter
{
    type: "layout"
    property var layer: "road-label-large"
    property var textSize:
    {
       "base": 1,
       "stops":
       [
          [9, 10],
          [20, 16]
       ]
    }
}

您还可以将 JSON 导入 Mapbox Studio 以查看或操作样式。在我的例子中,我想动态缩放字体大小,所以在我的 QML 中我添加了一个比例因子,结果 MapParameter 是:

MapParameter
{
    type: "layout"
    property var layer: "road-label-large"
    property var textSize:
    {
       "base": 1,
       "stops":
       [
          [9, Math.floor(10 * fontScaleFactor)],
          [20, Math.floor(16 * fontScaleFactor)]
       ]
    }
}