我已经找到了一种使用MapKit缓存图块的方法,但是我还没有找到任何解决方案来加载区域内所有图块(从顶层图块到底层图块)。

我想在地图视图中缓存矩形区域的所有图块。在Mapkit中有什么方法可以做到这一点?

最佳答案

为了在MKMapView中加载自定义图块,您需要继承MKTileOverlay并覆盖方法url(forTilePath path: MKTileOverlayPath) -> URLMKTitleOverlay包含图块的x,y和z属性。
因此,实现可能如下所示:

override func url(forTilePath path: MKTileOverlayPath) -> URL {
  let tilePath = Bundle.main.url(
  forResource: "\(path.y)",
  withExtension: "png",
  subdirectory: "tiles/\(path.z)/\(path.x)",
  localization: nil)!
  return tile
}

mapView设置函数中,添加以下内容:
let overlay = CustomTileOverlay()
overlay.canReplaceMapContent = true
mapView.add(overlay, level: .aboveLabels)

也不要忘记在中返回渲染器
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
  return MKTileOverlayRenderer(tileOverlay: overlay)
}

附言关于该主题的raywenderlich.com有一个很棒的教程:

10-06 04:24
查看更多