【问题标题】:Setting map annotations in Mapbox MapSnapshotter on Android在 Android 上的 Mapbox MapSnapshotter 中设置地图注释
【发布时间】:2020-03-13 06:29:18
【问题描述】:

我有一个 Android 应用程序,它通过 UDP 套接字将地图图片流式传输到外部嵌入式设备。因此,我创建了一个前台服务(地图流应该在后台运行,以便在另一个应用程序在前面或屏幕关闭时也能工作)实例化MapSnapshotter。到目前为止一切正常。

我现在想向快照器添加注释(例如,线条或图标,如当前位置标记)。但是,MapSnapshotter 的接口相当有限。我将能够手动编辑样式 JSON,添加我需要的自定义源和层,并直接使用 setStyleJson 设置样式。但这会使快照程序再次重新加载整个样式,这非常慢(在我的设置中,大约需要 1 秒),这不符合我的要求。当然,另一种可能性是直接在快照返回的位图中绘制线条/图标,但这非常有限(例如我无法在文本下方绘制)并且当地图倾斜时会变得复杂。

有没有人遇到过这个问题或者知道如何解决这个问题?如果我可以使用 Mapbox 注释插件就完美了。不幸的是,要实例化像SymbolManager 这样的注释管理器,我需要MapView/MapboxMap。我假设在内部MapSnapshotter 也持有某种MapboxMap,但它绝对不能通过公共接口访问。非常感谢任何帮助!

【问题讨论】:

    标签: java android mapbox mapbox-android


    【解决方案1】:

    Mapbox 的Android MapSnapshotter 目前不支持捕获添加到地图的运行时样式。因此,即使您可以设置注释管理器(由于依赖于底层 MapView/MapboxMap,您已经正确指出无法完成),从 snapshot.getBitmap() 检索到的图像也不会包含注释.

    您似乎有兴趣在地图上显示动态注释(例如用户的位置),这可能会经常更改。因此,此建议可能无法满足您的用例,但仍然值得一提:您可以尝试使用 Mapbox Studio 将标记添加到地图样式本身,然后将生成的地图样式传递给快照器的 withStyle 参数。

    或者,您可以实例化 MapboxMap 对象而不是 MapSnapshotter,然后使用 this Stack Overflow post 中的建议代码,这不是 Mapbox 特有的。 如果您将包含 Mapbox 地图对象的Layout 传递给链接帖子的答案中提供的takeScreenShot 方法,您应该能够生成一个Bitmap,其中包含您的地图和使用注释管理器添加到所述地图的注释或其他形式的客户端添加的地图图层。虽然这种方法失去了在设备的后台线程上生成快照的好处,但它在添加运行时样式方面提供了更大的灵活性。

    与此同时,我建议密切关注 Mapbox 的 Android MapSnapshotter 文档,了解为适应此动态用例所做的任何更改,并可能在 mapbox/mapbox-gl-native-android 中打开一个问题以表达功能请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-20
      • 1970-01-01
      • 2022-08-24
      相关资源
      最近更新 更多