Мое приложение использует службу листов диаграммы 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? )