我的应用程序使用 NOAA RNC Chart Tile Service 作为我的 MKMapView 的覆盖。下载每个图表 QuiltedTileSet 时,我能够检索图块集的最大缩放级别(例如 maximumZ = 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,并使用 3500 的最小距离 CameraZoomRange 实现了一个近似值(基于反复试验):
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
let zoomRange = MKMapView.CameraZoomRange(minCenterCoordinateDistance: 3500)
mapView.setCameraZoomRange(zoomRange, animated: true)
return tileRenderer
}
由于并非所有 tileSet 都具有相同的 maximumZ,我想知道是否有办法从 tileSet 提供的 maximumZ 中插入 CameraZoomRange?
而且,由于并非 NOAA 的 quiltedTileSets 中的所有图块实际上都具有与请求的原始 xy 位置相同的最大缩放比例,因此 z 通常小于 21。如何在用户平移时检查最大 Z,以及如何修改 CameraZoomRange 最小值适应这个新值的距离?
我能够找到的所有旧解决方案都使用 MKCoordinateSpan 来计算最大 Z,并且不使用 iOS13 的 CameraZoomRange(例如,有没有办法限制 MKMapView 最大缩放级别?)