Я пытаюсь кэшировать листы карты для автономного использования через MapKit и листы с openstreetmap.org
Как я могу получить все листы в блоке между 4 точками координат?
Другими словами: Как найти все Y
и X
точки для разных Z
уровней в пределах 4 координат, образующих прямоугольник?
Все мои поиски приводят к тому, что люди говорят, что вы не можете хранить карты в автономном режиме, и указывают на платные услуги.Но хранить / кэшировать тайлы для автономного использования на самом деле глупо просто:
// Custom map overlays
class OpenMapOverlay: MKTileOverlay {
// grabs the tile for the current x y z
override func url(forTilePath path: MKTileOverlayPath) -> URL {
if TileMaster.shared.tileExistsLocally(for: path) {
// return local URL
return TileMaster.shared.getPath(for: TileMaster.shared.getFileName(for: path))
} else {
// Otherwise download and save
TileMaster.shared.saveTile(for: path)
// If you're downloading and saving, then you could also just pass the url to renderer
let tileUrl = "https://tile.openstreetmap.org/\(path.z)/\(path.x)/\(path.y).png"
return URL(string: tileUrl)!
}
}
}
приведенный выше код сообщает рендереру тайлов Карты, откуда он должен получать тайлы для XYZ.Если он сохранен, верните путь к локальному хранилищу (в каталоге документов);в противном случае верните URL-адрес OpenStreetMap для плитки и сохраните плитку в следующий раз.
- Мне нужна математика, чтобы получить все точки XYZ, чтобы сохранить их до посещения плитки.