-1

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

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

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

4

1 回答 1

0

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

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

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

同时,我建议密切关注 Mapbox 的 AndroidMapSnapshotter文档,以了解为适应这种动态用例而进行的任何更改,并可能会打开一个问题mapbox/mapbox-gl-native-android来表达功能请求。

于 2020-03-12T22:29:18.213 回答