Преобразование между минимумом MKMapView.CameraZoomRange и максимумом MKTileOverlayZ - PullRequest
0 голосов
/ 23 февраля 2020

Мое приложение использует службу листов диаграммы NOAA RN C в качестве наложения для моего MKMapView. При загрузке каждого графика QuiltedTileSet я могу получить максимальный уровень масштабирования набора плиток (например, максимум Z = 21)

    func setupTileRenderer() {
        template = "https://tileservice.charts.noaa.gov/tiles/50000_1/{z}/{x}/{y}.png"
        let overlay = MKTileOverlay(urlTemplate: template)

        print("overlay template max zoom is : \(String(describing: overlay.maximumZ))")

        overlay.canReplaceMapContent = true
        mapView.addOverlay(overlay, level: .aboveRoads)
        tileRenderer = MKTileOverlayRenderer(tileOverlay: overlay)
    }

Понятно, что когда пользователь пытается увеличить масштаб выше максимального уровня Z, графики не будут визуализации.

Я хочу программно ограничить пользователя от увеличения, превышающего максимальное значение Z, и реализовал приближение с использованием минимального расстояния CameraZoomRange, равного 3500 (на основе проб и ошибок):

   func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {     
        let zoomRange = MKMapView.CameraZoomRange(minCenterCoordinateDistance: 3500)
        mapView.setCameraZoomRange(zoomRange, animated: true)
        return tileRenderer
   }

Поскольку не все наборы плиток имеют одинаковый максимум Z, я хотел бы знать, есть ли способ интерполировать CameraZoomRange от максимума Z, который предоставляется набором плиток?

И, поскольку не все плитки в quiltedTileSets NOAA на самом деле имеют тот же максимальный масштаб, что и исходное запрошенное местоположение xy, z часто меньше 21. Как я могу проверить максимальный Z, когда пользователь перемещается, и как я изменил бы минимальное расстояние CameraZoomRange, чтобы приспособить это новое значение?

Все более старые решения, которые мне удалось найти, используют MKCoordinateSpan для вычисления максимума Z и не используют iOS13 CameraZoomRange (например, Есть ли способ ограничения максимального уровня увеличения MKMapView? )

...