Получить все плитки в блоке между 4 координатными точками: Найти все значения xy для разных значений z - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь кэшировать листы карты для автономного использования через 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, чтобы сохранить их до посещения плитки.
...