【问题标题】:iOS - Some tiles not rendered in a custom MKTileOverlayiOS - 某些图块未在自定义 MKTileOverlay 中呈现
【发布时间】:2016-11-07 08:14:07
【问题描述】:

我在使用 MapKit 的 iOS 项目中有一个自定义的 MKTileOverlay,它在大多数情况下都能正常工作。但是,在放大/缩小几次并平移地图后,有些图块没有被绘制出来。

起初我认为这是一个简单的瓷砖没有加载的情况,所以我将 MKTileOverlay 子类化并在控制台中添加了日志记录。它表明所有图块都加载得非常好,并传送到结果块。

当我没有想法时,我创建了一个本地图块生成器,它只返回带有路径 x/y/z 和绘制框架的图像,以查看缺少哪些图块。

Missing tile example image

不幸的是,即使使用本地生成的图块,问题仍然存在,因此它与 Internet 连接无关。另一种奇怪的行为是,如果我有两个自定义叠加层,它们将是完全相同的图块,不会在两个叠加层上呈现。

我现在能想到的唯一解决方案是子类化 tile 渲染器并确保显示所有内容,因为无法知道 tile 没有被渲染。然而,这听起来像很多工作和“重新发明轮子”的任务......

【问题讨论】:

  • 您找到解决方案了吗?我相信这是由于用户缩放超过了叠加层的最大 Z 引起的。发生这种情况时,MapKit 不再从该叠加层请求图块;因此,当用户以超过 maximumZ 的缩放级别平移并到达之前未渲染的图块时,MapKit 不会请求它,因此会显示一个空图块。检查这些:stackoverflow.com/questions/4351724/…stackoverflow.com/questions/4417545/…
  • 不幸的是,我认为这与缩放无关。它发生在最小/最大范围内的许多不同缩放级别。我的朋友参加了 WWDC 2017,并在一些研讨会上提出了这个问题。 Apple 工程师填写了一份错误报告,现在我们希望它会与 iOS 11 一起修复。
  • 我可以在我的项目中重现它,但前提是缩放超过了最大 Z 级别。你对这个错误报告@pppd 有任何参考吗?
  • 有同样的问题,有人找到解决方案了吗?我只在 180.0/0.0 的边界上看到这个问题......但在每个缩放级别

标签: ios mapkit mktileoverlay custom-overlay


【解决方案1】:

我们也遇到了丢失图块的问题 - 尝试在新西兰周围绘制地图图块。 MKOverlayRenderer 甚至没有请求瓷砖。我们陷入了一个兔子洞,认为这一定是因为新西兰靠近 180/0 纬度边界。没有。是因为子类方法:-

- (void)loadTileAtPath:(MKTileOverlayPath)path result:(void (^)(NSData * __nullable data, NSError * __nullable error))result;

即使没有要返回的数据,也必须始终调用结果方法!为了在应得的地方给予信任,这是我们解决方案的来源:-

MKTileOverlay not drawing every tile?

【讨论】:

  • 感谢您的回答,希望我能在 5 小时前找到这个!
  • 这对我们的情况没有帮助。我的示例代码生成人造图块,因此总是有数据要返回,但其中一些不会被渲染。
  • 与@pppd 一样,这对我们没有帮助。有些图块没有按照我提供的赏金中的描述进行渲染,但是当我们被调用时,我们总是使用有效的非空数据调用结果块。
  • 我们已经向 Apple 报告了这个问题以及一个最小的示例应用程序,以便在 WWDC 2017 期间重现它,但据我所知它仍然存在。
  • @pppd 这仍然是一个错误吗?我刚刚问了一个问题,我想知道我是否遇到了与您相同的错误?虽然我无法渲染任何瓷砖。 stackoverflow.com/questions/62824057/…
猜你喜欢
  • 1970-01-01
  • 2015-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-18
相关资源
最近更新 更多